📄 tightcapacityconstraint.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.Report.*;import com.power.pipeengine.Variable.*;import com.power.pipeengine.*;import com.power.lpsolver.LPSolve.*;import com.power.util.Message.*;/** * * <p>Title: PIPE Engine</p> * <p>Description: Global Planning Optimization Engine</p> * <p>Copyright: Copyright (c) 2002</p> * <p>Company: Paraster, Inc.</p> * @author Wei Tan * @version 1.0 *//** * This class creates capacity constraint (see LP model document for algorithm). * It is a singular class. */public class TightCapacityConstraint extends Constraint{ static ResourceBundle res = ResourceBundle.getBundle("com.power.pipeengine.Res", EngineConfig.getInstance().getLocale() ); private static final TightCapacityConstraint INSTANCE = new TightCapacityConstraint(); /** * Sole class constructor. */ private TightCapacityConstraint( ) { setConstraintType( res.getString("CAPACITY_CONSRTAINT") ); } public static TightCapacityConstraint getInstance( ) { return INSTANCE; } /** * Builds all capacity constraints by looping through all resources and all * buckets. */ public void buildConstraints() { super.publishMessage(); DataModel dataModel = DataModel.getInstance(); ResourceUses rscUses = dataModel.getResourceUses(); Enumeration allRscs = dataModel.getResources().getResources().elements(); int numOfBuckets = dataModel.getCalendar().getTotalNumOfBuckets(); PIPECalendar cal = dataModel.getCalendar(); Routes routes = dataModel.getRoutes(); StartsVariable startsVar = StartsVariable.getInstance(); OutsVariable outsVar = OutsVariable.getInstance(); Products products = dataModel.getProducts(); RscSlackVariable rscSlackVar = RscSlackVariable.getInstance(); Model mdl = Model.getInstance(); MemoryManager memMgr = MemoryManager.getInstance(); Enumeration allRoutes = routes.getRoutes().elements(); //loop through all resources while( allRoutes.hasMoreElements() ) { Route rte = (Route) allRoutes.nextElement(); Vector rscUsesByRte = rscUses.getResourceUse( rte.getRouteID() ); if( null == rscUsesByRte ) continue; ResourceUse rscUse = (ResourceUse) rscUsesByRte.elementAt( 0 ); Resource rsc = DataModel.getInstance().getResources().getResource( rscUse.getResourceID(), rte.getFacilityID() ); Facility f = rte.getFacility(); //for all time buckets for( int t=1; t<=numOfBuckets && t <= 50; t++ ) { Bucket b = cal.getBucket( t ); if( rsc.getFacility().getNumWorkingDaysForBucket( t ) == 0 ) { continue; } //create a new constraint for the LPSolve int rowNumber = Model.getInstance().getNumberOfRows(); com.power.lpsolver.LPSolve.Constraint con = new com.power.lpsolver.LPSolve.Constraint( "TC" + rowNumber, rowNumber ); String sVar = startsVar.getVariable( rte, rte.getProduct(), b ); int colIdx = Model.getInstance().getModelVariables().addVariable( sVar ); Element elem = MemoryManager.getInstance().getElement(); elem.setProperties( colIdx, 1.0 ); con.addElement( elem ); this.addMPSElem( con, colIdx, elem ); //RHS double coeff =7.5; coeff *= f.getNumWorkingDaysForBucket( t ); if( con.getElements().size() > 0 ) { double rhs = rte.getNumOfOperators() * rscUse.getUPH() * coeff; con.setRHS( rhs ); } con.setSign( "<=" ); mdl.addConstraint( con ); } } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -