📄 sourcingconstraint.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.pipeengine.*;
import com.power.lpsolver.LPSolve.*;
public class SourcingConstraint
extends Constraint {
static ResourceBundle res = ResourceBundle.getBundle(
"com.power.pipeengine.Res",
EngineConfig.getInstance().getLocale());
private static final SourcingConstraint INSTANCE =
new SourcingConstraint();
// Private constructor supresses
// default public constructor
private SourcingConstraint() {
setConstraintType(res.getString("SOURCING_CONSRTAINT"));
}
public static SourcingConstraint getInstance() {
return INSTANCE;
}
private Vector _constraints = new Vector();
public Vector getConstraints() {
return _constraints;
}
public void buildConstraints() {
super.publishMessage();
DataModel dataModel = DataModel.getInstance();
Enumeration rteSrcs = dataModel.getRouteSources().getRouteSources().
elements();
PIPECalendar cal = dataModel.getCalendar();
StartsVariable startsVar = StartsVariable.getInstance();
AllocationVariable allocVar = AllocationVariable.getInstance();
Model mdl = Model.getInstance();
MemoryManager memMgr = MemoryManager.getInstance();
String varName = null;
while (rteSrcs.hasMoreElements()) {
Vector srcsForARte = (Vector) rteSrcs.nextElement();
if ( ( (RouteSource) srcsForARte.elementAt(0)).isSingle()) {
buildConstraintsForSingleSource(srcsForARte);
}
else {
buildConstraintsForMultipleSources(srcsForARte);
}
}
}
private void buildConstraintsForSingleSource(Vector srcsForARte) {
DataModel dataModel = DataModel.getInstance();
PIPECalendar cal = dataModel.getCalendar();
StartsVariable startsVar = StartsVariable.getInstance();
AllocationVariable allocVar = AllocationVariable.getInstance();
Model mdl = Model.getInstance();
MemoryManager memMgr = MemoryManager.getInstance();
String varName = null;
Route r = ( (RouteSource) srcsForARte.elementAt(0)).getRoute();
Facility srcingFacility = r.getSrcingFacility();
for (int t = 1; t <= cal.getTotalNumOfBuckets(); t++) {
if (t > r.getLastStartBucketHavingOuts())
continue;
if (r.getFacility().getNumWorkingDaysForBucket(t) == 0) {
continue;
}
//add one constraint to LP Solver
int rowNumber = mdl.getNumberOfRows();
com.power.lpsolver.LPSolve.Constraint con =
new com.power.lpsolver.LPSolve.Constraint("SC" + rowNumber,
rowNumber);
Bucket bucket = cal.getBucket(t);
varName = startsVar.getVariable(r, r.getProduct(), bucket);
int colIdx = mdl.getModelVariables().addVariable(varName);
Element elem = memMgr.getElement();
elem.setProperties(colIdx, 1.0);
con.addElement(elem);
this.addMPSElem(con, colIdx, elem);
Product srcingProd = null;
for (int i = 0; i < srcsForARte.size(); i++) {
RouteSource aRteSrc = (RouteSource) srcsForARte.elementAt(i);
srcingProd = aRteSrc.getSrcingProduct();
varName = allocVar.getVariable(aRteSrc, bucket);
colIdx = mdl.getModelVariables().addVariable(varName);
elem = memMgr.getElement();
elem.setProperties(colIdx, -1.0);
con.addElement(elem);
this.addMPSElem(con, colIdx, elem);
}
con.setSign("=");
con.setRHS(0.0);
mdl.addConstraint(con);
}
}
private void buildConstraintsForMultipleSources(Vector srcsForARte) {
DataModel dataModel = DataModel.getInstance();
PIPECalendar cal = dataModel.getCalendar();
StartsVariable startsVar = StartsVariable.getInstance();
AllocationVariable allocVar = AllocationVariable.getInstance();
Model mdl = Model.getInstance();
MemoryManager memMgr = MemoryManager.getInstance();
String varName = null;
Route r = ( (RouteSource) srcsForARte.elementAt(0)).getRoute();
Facility srcingFacility = r.getSrcingFacility();
for (int t = 1; t <= cal.getTotalNumOfBuckets(); t++) {
if (t > r.getLastStartBucketHavingOuts())
continue;
if (r.getFacility().getNumWorkingDaysForBucket(t) == 0) {
continue;
}
Bucket bucket = cal.getBucket(t);
for (int i = 0; i < srcsForARte.size(); i++) {
//add one constraint to LP Solver
int rowNumber = mdl.getNumberOfRows();
com.power.lpsolver.LPSolve.Constraint con =
new com.power.lpsolver.LPSolve.Constraint("SC" + rowNumber,
rowNumber);
varName = startsVar.getVariable(r, r.getProduct(), bucket);
int colIdx = mdl.getModelVariables().addVariable(varName);
Element elem = memMgr.getElement();
elem.setProperties(colIdx, 1.0);
con.addElement(elem);
this.addMPSElem(con, colIdx, elem);
Product srcingProd = null;
RouteSource aRteSrc = (RouteSource) srcsForARte.elementAt(i);
srcingProd = aRteSrc.getSrcingProduct();
varName = allocVar.getVariable(aRteSrc, bucket);
colIdx = mdl.getModelVariables().addVariable(varName);
elem = memMgr.getElement();
elem.setProperties(colIdx, -1.0 / aRteSrc.getNumberRequired());
con.addElement(elem);
this.addMPSElem(con, colIdx, elem);
con.setSign("=");
con.setRHS(0.0);
mdl.addConstraint(con);
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -