📄 materialconstraint.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 MaterialConstraint extends Constraint
{
static ResourceBundle res = ResourceBundle.getBundle("com.power.pipeengine.Res",
EngineConfig.getInstance().getLocale() );
private static final MaterialConstraint INSTANCE =
new MaterialConstraint();
// Private constructor supresses
// default public constructor
private MaterialConstraint( ) {
setConstraintType( res.getString("MATERIAL_CONSRTAINT") );
}
public static MaterialConstraint getInstance( ) {
return INSTANCE;
}
private Vector _constraints = new Vector();
public Vector getConstraints() {
return _constraints;
}
public void buildConstraints() {
super.publishMessage();
DataModel dataModel = DataModel.getInstance();
Hashtable matUses = dataModel.getMaterialUses().getMaterialUses();
Hashtable materials = dataModel.getMaterials().getMaterials();
PIPECalendar cal = dataModel.getCalendar();
StartsVariable startsVar = StartsVariable.getInstance();
MaterialVariable matVar = MaterialVariable.getInstance();
Enumeration allMaterials = materials.elements();
Model mdl = Model.getInstance();
MemoryManager memMgr = MemoryManager.getInstance();
String varName = null;
while( allMaterials.hasMoreElements() ) {
Material mat = (Material) allMaterials.nextElement();
Vector uses = (Vector) matUses.get( mat.getMaterialID() );
if( uses == null ) continue;
for( int t=1; t<=cal.getTotalNumOfBuckets(); t++ ) {
Bucket b = cal.getBucket( t );
String constr = new String(); //hold one constraint
//add a new constraint to LP solver
int rowNumber = mdl.getNumberOfRows();
com.power.lpsolver.LPSolve.Constraint con =
new com.power.lpsolver.LPSolve.Constraint( "M" +
rowNumber,
rowNumber );
//beginning material inventory
if( t>1 ) {
constr += matVar.getVariable( mat,
mat.getFacility(),
cal.getBucket( t-1 ) );
int colIdx = mdl.getModelVariables().addVariable( constr );
Element elem = memMgr.getElement();
elem.setProperties( colIdx, 1.0 );
con.addElement( elem );
this.addMPSElem( con, colIdx, elem );
}
for( int i=0; i<uses.size(); i++ ) {
MaterialUse matUse = (MaterialUse) uses.elementAt(i);
Route r = matUse.getRoute();
if( t > r.getLastStartBucketHavingOuts() ) continue;
double rate = matUse.getConsumptionRate( t );
constr += " - " + new Double( rate).toString();
varName = startsVar.getVariable( r,
r.getProduct(),
b );
constr += varName;
int colIdx = mdl.getModelVariables().addVariable( varName );
Element elem = memMgr.getElement();
elem.setProperties( colIdx, - rate );
con.addElement( elem );
this.addMPSElem( con, colIdx, elem );
}
//ending material inventory
varName = matVar.getVariable( mat,
mat.getFacility(),
b );
constr += " - " + varName;
int colIdx = mdl.getModelVariables().addVariable( varName );
Element elem = memMgr.getElement();
elem.setProperties( colIdx, - 1.0 );
con.addElement( elem );
this.addMPSElem( con, colIdx, elem );
// RHS
double avail = mat.getAvailMaterial( t );
constr += " >= - " + new Double( avail ).toString();
_constraints.addElement( constr );
con.setRHS( - avail );
con.setSign( ">=" );
mdl.addConstraint( con );
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -