📄 startsoutsconstraint.java
字号:
package com.power.pipeengine.Constraint;
import java.util.*;
import com.power.pipeengine.Entity.*;
import com.power.pipeengine.InputData.*;
import com.power.pipeengine.LPModel.*;
import com.power.pipeengine.Variable.*;
import com.power.lpsolver.LPSolve.*;
import com.power.pipeengine.*;
public class StartsOutsConstraint
extends Constraint {
static ResourceBundle res = ResourceBundle.getBundle(
"com.power.pipeengine.Res",
EngineConfig.getInstance().getLocale());
private Vector _constraints = new Vector();
private static final StartsOutsConstraint INSTANCE =
new StartsOutsConstraint();
// Private constructor supresses
// default public constructor
private StartsOutsConstraint() {
setConstraintType(res.getString("STARTS_OUTS"));
}
public static StartsOutsConstraint getInstance() {
return INSTANCE;
}
public Vector getConstraints() {
return _constraints;
}
public void buildConstraints() {
super.publishMessage();
DataModel dataModel = DataModel.getInstance();
Hashtable allRouteProducts = dataModel.getRouteProducts().getRouteProducts();
OutsVariable outsVar = OutsVariable.getInstance();
StartsVariable startsVar = StartsVariable.getInstance();
Routes allRoutes = dataModel.getRoutes();
Products allProducts = dataModel.getProducts();
Enumeration routeProds = allRouteProducts.elements();
Vector buckets = dataModel.getCalendar().getBuckets();
Model mdl = Model.getInstance();
MemoryManager memMgr = MemoryManager.getInstance();
String varName = null;
RouteProducts rteProds = dataModel.getRouteProducts();
Enumeration allProductOuts = rteProds.getProducts().elements();
while (allProductOuts.hasMoreElements()) {
Product p = (Product) allProductOuts.nextElement();
Vector routes = rteProds.getRoutes(p);
for (int i = 0; i < buckets.size(); i++) {
Bucket currentBucket = (Bucket) buckets.elementAt(i);
//add a new constraint to LP Solver
int rowNumber = mdl.getNumberOfRows();
com.power.lpsolver.LPSolve.Constraint con =
new com.power.lpsolver.LPSolve.Constraint("SO" + rowNumber,
rowNumber);
//for all routes that produce this out product
for (int k = 0; k < routes.size(); k++) {
Route aRoute = (Route) routes.elementAt(k);
//skip if no working days, no outs.
if (aRoute.getFacility().getNumWorkingDaysForBucket(currentBucket.
getBucketID()) == 0) {
continue;
}
Bucket bucket = outsVar.getRouteStartBucket(aRoute,
aRoute.getProduct(),
currentBucket);
if (bucket == null)
continue;
Bucket earliestStartBucket = outsVar.getEarliestRouteStartBucket(
aRoute,
aRoute.getProduct(),
currentBucket);
//if none, set it to the first bucket
if (null == earliestStartBucket) {
earliestStartBucket = (Bucket) buckets.elementAt(0);
for (int n = 1; n <= bucket.getBucketID(); n++) {
if (aRoute.getFacility().getNumWorkingDaysForBucket(n) != 0) {
earliestStartBucket = (Bucket) buckets.elementAt(n - 1);
break;
}
}
}
RouteProduct aRteProd = rteProds.getRouteProduct(aRoute.getRouteID(),
p.getProductID());
double splitFraction = aRteProd.getSplitFraction(currentBucket.
getBucketID());
//Double coeff = new Double( splitFraction / aRoute.getYield() );
Double coeff = new Double(aRoute.getYield() * splitFraction);
for (int m = earliestStartBucket.getBucketID();
m <= bucket.getBucketID(); m++) {
Bucket tmpBucket = (Bucket) buckets.elementAt(m - 1);
if (aRoute.getFacility().getNumWorkingDaysForBucket(tmpBucket.
getBucketID()) == 0) {
continue;
}
varName = startsVar.getVariable(aRoute, aRoute.getProduct(),
tmpBucket);
int colIdx = mdl.getModelVariables().addVariable(varName);
Element elem = memMgr.getElement();
elem.setProperties(colIdx, coeff.doubleValue());
con.addElement(elem);
this.addMPSElem(con, colIdx, elem);
}
/*varName = startsVar.getVariable( aRoute, aRoute.getProduct(), bucket );
int colIdx = mdl.getModelVariables().addVariable( varName );
Element elem = memMgr.getElement();
elem.setProperties( colIdx, coeff.doubleValue() );
con.addElement( elem );*/
}
//double splitFraction = rteProd.getSplitFraction( currentBucket.getBucketID() );
varName = outsVar.getVariable(p, currentBucket);
//constr += varName + " = 0";
int colIdx = mdl.getModelVariables().addVariable(varName);
Element elem = memMgr.getElement();
elem.setProperties(colIdx, -1.0);
con.addElement(elem);
this.addMPSElem(con, colIdx, elem);
//encourage early starts
/*if( p.hasDemand() ) {
outsVar.setObjElement( varName, - 100 / ( 100 - i ) );
}*/
con.setSign("=");
con.setRHS(0.0);
if (con.getElements().size() != 0) {
//if( con.getNumberOfElements() != 0 ) {
mdl.addConstraint(con);
}
//_constraints.addElement( constr );
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -