⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 startsoutsconstraint.java

📁 全球著名IT公司ILog的APS高级排产优化引擎
💻 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 + -