亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? inventoryconstraint.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.pipeengine.*;
import com.power.lpsolver.LPSolve.*;

/**
 *
 * <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
 */

/**
 * InventoryConstraint type deals with the inventory balance at each inventory
 * facility for each bucket.
 */
public class InventoryConstraint
    extends Constraint {
  static ResourceBundle res = ResourceBundle.getBundle(
      "com.power.pipeengine.Res",
      EngineConfig.getInstance().getLocale());
  private static final InventoryConstraint INSTANCE =
      new InventoryConstraint();

  /**
   * Sole class constructor.
   */
  private InventoryConstraint() {
    setConstraintType(res.getString("INVENTORY_CONSRTAINT"));
  }

  public static InventoryConstraint getInstance() {
    return INSTANCE;
  }

  /**
   * stores all inventory constraints.
   */
  private Vector _constraints = new Vector();

  /**
   * Gets all inventory constraints.
   * @return the inventory constraint vector.
   */
  public Vector getConstraints() {
    return _constraints;
  }

  /**
   * Builds all inventory constraint at each facility.
   */
  public void buildConstraints() {
    super.publishMessage();
    Vector invFacilities = DataModel.getInstance().getFacilities().
        getInvFacilities();

    for (int i = 0; i < invFacilities.size(); i++) {
      Facility f = (Facility) invFacilities.elementAt(i);
      Vector products = f.getProducts();
      for (int j = 0; j < products.size(); j++) {
        Product p = (Product) products.elementAt(j);
        buildConstraintsByBucket(f, p);
      }
    }
  }

  /**
   * Builds inventory constraint at a given facility for a given product by
   * buckets.
   * @param f the facility where the constraints are built.
   * @param p the product for which the constraints are built.
   */
  public void buildConstraintsByBucket(Facility f, Product p) {
    Vector buckets = DataModel.getInstance().getCalendar().getBuckets();
    Vector producingRoutes = p.getProducingRoutes();
    Vector sourcingRoutes = p.getSourcingRoutes();
    InventoryVariable invVar = InventoryVariable.getInstance();
    AllocationVariable allocVar = AllocationVariable.getInstance();
    StartsVariable startsVar = StartsVariable.getInstance();
    OutsVariable outsVar = OutsVariable.getInstance();
    BackorderVariable backOrderVar = BackorderVariable.getInstance();
    BackorderOneVariable backOrderOneVar = BackorderOneVariable.getInstance();
    BackorderTwoVariable backOrderTwoVar = BackorderTwoVariable.getInstance();
    ShipOutVariable shipOutVar = ShipOutVariable.getInstance();
    ReceivingVariable rcvVar = ReceivingVariable.getInstance();
    Inventories inventories = DataModel.getInstance().getInventories();
    MinInventories minInvs = DataModel.getInstance().getMinInventories();
    MinInvVariable minInvVar = MinInvVariable.getInstance();
    LostSaleVariable lostSaleVar = LostSaleVariable.getInstance();

    int firstDmdBucket = p.getFirstDemandPeriod();
    boolean hasDemand = p.hasDemand();

    Model mdl = Model.getInstance();
    MemoryManager memMgr = MemoryManager.getInstance();

    for (int i = 0; i < buckets.size(); i++) {

      //add a new constraint to LP solver
      int rowNumber = Model.getInstance().getNumberOfRows();
      //com.power.lpsolver.LPSolve.Constraint con =
      // new com.power.lpsolver.LPSolve.Constraint( "I" + rowNumber + i, rowNumber );
      com.power.lpsolver.LPSolve.Constraint con =
          new com.power.lpsolver.LPSolve.Constraint("I" + rowNumber,
          rowNumber);

      Bucket b = (Bucket) buckets.elementAt(i);
      Bucket prevBucket = null;
      Bucket twoBucketsPrior = null;
      Bucket threeBucketsPrior = null;

      if (i >= 1) {
        prevBucket = (Bucket) buckets.elementAt(i - 1);
        //beginning inventory
        int colIdx = mdl.getModelVariables().addVariable(invVar.getVariable(f,
            p, prevBucket));
        Element elem = memMgr.getElement();
        elem.setProperties(colIdx, 1.0);
        con.addElement(elem);
        this.addMPSElem(con, colIdx, elem);
        //invVar.setObjElement( f, p, prevBucket, true );

      }

      if (i >= 2) {
        twoBucketsPrior = (Bucket) buckets.elementAt(i - 2);
      }

      if (i >= 3) {
        threeBucketsPrior = (Bucket) buckets.elementAt(i - 3);
      }

      //replenishment during the period
      for (int j = 0; j < producingRoutes.size(); j++) {
        Route r = (Route) producingRoutes.elementAt(j);
        if (r.getDestFacilityID() != f.getFacilityID())
          continue;
        if (r.getFacility().getNumWorkingDaysForBucket(b.getBucketID()) == 0) {
          continue;
        }
        Bucket bucket = outsVar.getRouteStartBucket(r, p, b);
        if (bucket != null) {
          int colIdx = mdl.getModelVariables().addVariable(outsVar.getVariable(
              p, b));
          Element elem = memMgr.getElement();
          elem.setProperties(colIdx, 1.0);
          con.addElement(elem);
          this.addMPSElem(con, colIdx, elem);
        }
      }

      //Products shipped in from other inventory points
      //-- need to consider shipment delay time for "b"
      //use mapped shipout variables as receiving variables
      Enumeration origFacilities = f.getOrignatingFacilities().elements();
      while (origFacilities.hasMoreElements()) {
        Vector shipments = (Vector) origFacilities.nextElement();
        for (int idx = 0; idx < shipments.size(); idx++) {
          Shipment s = (Shipment) shipments.elementAt(idx);
          /*if( EngineConfig.getInstance().getCollator().compare(
                s.getToProduct().getProductID(),
                p.getProductID() ) == 0 ) {*/
          if (s.getToProduct().getProductNumber() == p.getProductNumber()) {

            Bucket shipStartBucket = rcvVar.getShippingStartBucket(s, b);
            if (shipStartBucket != null) {
              /*String varName = shipOutVar.getVariable( s.getFromFacility(),
                      f,
                      p,
                      shipStartBucket );*/
              String varName = rcvVar.getVariable(s.getFromFacility(),
                                                  f,
                                                  p,
                                                  b);

              int colIdx = mdl.getModelVariables().addVariable(varName);
              Element elem = memMgr.getElement();
              elem.setProperties(colIdx, 1.0);
              con.addElement(elem);
              this.addMPSElem(con, colIdx, elem);
            }
          }
        }
      }

      //allocation during the period
      for (int k = 0; k < sourcingRoutes.size(); k++) {
        Route r = (Route) sourcingRoutes.elementAt(k);
        if (r.getSrcingFacilityID() != f.getFacilityID())
          continue;

        if (r.getFacility().getNumWorkingDaysForBucket(b.getBucketID()) == 0) {
          continue;
        }
        String varName = allocVar.getVariable(f, p, r, b);

        int colIdx = mdl.getModelVariables().addVariable(varName);
        Element elem = memMgr.getElement();
        elem.setProperties(colIdx, -1.0);
        con.addElement(elem);
        this.addMPSElem(con, colIdx, elem);
      }

      //products shipped out to other inventory points
      Enumeration destFacilities = f.getDestinationFacilities().elements();
      while (destFacilities.hasMoreElements()) {
        Vector shipments = (Vector) destFacilities.nextElement();
        for (int idx = 0; idx < shipments.size(); idx++) {
          Shipment s = (Shipment) shipments.elementAt(idx);
          /*if( EngineConfig.getInstance().getCollator().compare(
                s.getFromProduct().getProductID(),
                p.getProductID() ) == 0 )  {*/
          if (s.getFromProduct().getProductNumber() == p.getProductNumber()) {
            String varName = shipOutVar.getVariable(f,
                s.getToFacility(),
                p,
                b);

            int colIdx = mdl.getModelVariables().addVariable(varName);
            Element elem = memMgr.getElement();
            elem.setProperties(colIdx, -1.0);
            con.addElement(elem);
            this.addMPSElem(con, colIdx, elem);
          }
        }
      }

      int colIdx;
      Element elem = null;

      //if demanded, add backorder, overproduce variables
      if (hasDemand &&
          (b.getBucketID() >= firstDmdBucket)) {
        // if( p.hasDemand( b ) ) {
        //add 1 to priority to avoid division by zero.
        int dmdPriority = p.getDemandPriority(b) + 1;
        //back order variable in this bucket
        String bVar = backOrderVar.getVariable(f, p, b);
        colIdx = mdl.getModelVariables().addVariable(bVar);
        if (EngineConfig.getInstance().isMaxOnTimeDelivery()) {
          backOrderVar.setObjElement(bVar, p, b);
        }

        elem = memMgr.getElement();
        elem.setProperties(colIdx, 1.0);
        con.addElement(elem);
        this.addMPSElem(con, colIdx, elem);

        //back order filled in the bucket after next
        String bOneVar = backOrderOneVar.getVariable(f, p, b);
        colIdx = mdl.getModelVariables().addVariable(bOneVar);
        if (EngineConfig.getInstance().isMaxOnTimeDelivery()) {
          backOrderOneVar.setObjElement(bOneVar, p, b);
        }

        elem = memMgr.getElement();
        elem.setProperties(colIdx, 1.0);
        con.addElement(elem);
        this.addMPSElem(con, colIdx, elem);

        //back order filled in the third bucket from this
        String bTwoVar = backOrderTwoVar.getVariable(f, p, b);
        colIdx = mdl.getModelVariables().addVariable(bTwoVar);
        if (EngineConfig.getInstance().isMaxOnTimeDelivery()) {
          backOrderTwoVar.setObjElement(bTwoVar, p, b);
        }

        elem = memMgr.getElement();
        elem.setProperties(colIdx, 1.0);
        con.addElement(elem);
        this.addMPSElem(con, colIdx, elem);

        //lost sale variable for this bucket (only)
        /*String lsVar = lostSaleVar.getVariable( f, p, b );
             colIdx = mdl.getModelVariables().addVariable( lsVar );
             if( EngineConfig.getInstance().isMaxOnTimeDelivery() ) {
            lostSaleVar.setObjElement( lsVar, p, b );
                                         }
                                         elem = memMgr.getElement();
                                         elem.setProperties( colIdx, 1.0 );
                                         con.addElement( elem );
             this.addMPSElem( con.getMPSRowName(), colIdx, elem );*/
        //  }

        //back order variable for last bucket
        if (b.getBucketID() > firstDmdBucket /*&&
                                            p.hasDemand( prevBucket ) */) {
          String varName = backOrderVar.getVariable(f, p, prevBucket);
          colIdx = mdl.getModelVariables().addVariable(varName);
          elem = memMgr.getElement();
          elem.setProperties(colIdx, -1.0);
          con.addElement(elem);
          this.addMPSElem(con, colIdx, elem);
          if (EngineConfig.getInstance().isMaxProfit()) {
            backOrderVar.setObjElement(varName, p, prevBucket);
          }
        }

        //back order variable for the bucket before last
        if (b.getBucketID() > (firstDmdBucket + 1) /*&&
                                            p.hasDemand( twoBucketsPrior ) */) {
          String varName = backOrderOneVar.getVariable(f, p, twoBucketsPrior);

          colIdx = mdl.getModelVariables().addVariable(varName);
          elem = memMgr.getElement();
          elem.setProperties(colIdx, -1.0);
          con.addElement(elem);
          this.addMPSElem(con, colIdx, elem);
          if (EngineConfig.getInstance().isMaxProfit()) {
            backOrderVar.setObjElement(varName, p, twoBucketsPrior);
          }
        }

        //back order variable for two buckets before
        if (b.getBucketID() > (firstDmdBucket + 2) /*&&
                                            p.hasDemand( threeBucketsPrior ) */) {
          String varName = backOrderTwoVar.getVariable(f, p, threeBucketsPrior);

          colIdx = mdl.getModelVariables().addVariable(varName);
          elem = memMgr.getElement();
          elem.setProperties(colIdx, -1.0);
          con.addElement(elem);
          this.addMPSElem(con, colIdx, elem);
          if (EngineConfig.getInstance().isMaxProfit()) {
            backOrderVar.setObjElement(varName, p, threeBucketsPrior);
          }
        }

      }

      //ending inventory
      colIdx = mdl.getModelVariables().addVariable(invVar.getVariable(f, p, b));
      elem = memMgr.getElement();
      elem.setProperties(colIdx, -1.0);
      con.addElement(elem);
      this.addMPSElem(con, colIdx, elem);
      if (i < (buckets.size() - 1)) {
        //invVar.setObjElement( f, p, b, false );
      }

      //MinInventory requirement
      if (minInvs.hasMinInvReqmt(p, b)) {
        colIdx = mdl.getModelVariables().addVariable(minInvVar.getVariable(f, p,
            b));
        elem = memMgr.getElement();
        elem.setProperties(colIdx, -1.0);
        con.addElement(elem);
        this.addMPSElem(con, colIdx, elem);
      }

      //RHS
      double invQty = inventories.getInventoryQty(p.getProductID(),
                                                  f.getFacilityID(),
                                                  b.getBucketID());
      if (b.getBucketID() < firstDmdBucket) {
        con.setRHS( -invQty);
      }
      else {
        double rhs = -invQty + p.getDemand(b.getBucketID());
        con.setRHS(rhs);
      }

      //store constraint
      con.setSign("=");

      mdl.addConstraint(con);
    }
  }

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久国产精品露脸对白| 久久精品国产成人一区二区三区| 欧美一级在线观看| 粉嫩av一区二区三区| 亚洲成人av资源| 亚洲最色的网站| 久久综合狠狠综合久久激情 | 9色porny自拍视频一区二区| 丝袜美腿成人在线| 自拍偷拍国产亚洲| 国产亚洲一区二区三区四区 | 丁香激情综合国产| 蜜臀久久久99精品久久久久久| 国产精品国产三级国产aⅴ无密码 国产精品国产三级国产aⅴ原创 | 91亚洲精品一区二区乱码| 黄一区二区三区| 首页亚洲欧美制服丝腿| 亚洲三级视频在线观看| 国产日产欧美一区二区视频| 日韩午夜在线播放| 欧美久久久影院| 在线免费观看一区| 91丨九色porny丨蝌蚪| 国产999精品久久| 欧美影视一区二区三区| 成人中文字幕电影| 国产美女在线精品| 国产一区二区三区在线观看免费| 日本在线不卡视频| 日本成人超碰在线观看| 三级精品在线观看| 天堂久久一区二区三区| 香蕉久久一区二区不卡无毒影院| 亚洲免费高清视频在线| 亚洲视频一区二区免费在线观看| 亚洲国产岛国毛片在线| 国产日韩在线不卡| 欧美高清在线视频| 国产精品美女一区二区在线观看| 中文字幕免费一区| 国产精品久线观看视频| 中文字幕一区日韩精品欧美| 成人欧美一区二区三区1314 | 国产综合色产在线精品| 日韩vs国产vs欧美| 老司机精品视频线观看86| 六月丁香婷婷色狠狠久久| 久久国产夜色精品鲁鲁99| 久久www免费人成看片高清| 看电视剧不卡顿的网站| 国产一区二区网址| 成人动漫一区二区在线| 92精品国产成人观看免费| 一本一本久久a久久精品综合麻豆| 色综合欧美在线| 欧美日韩在线综合| 日韩一区二区精品在线观看| 久久综合精品国产一区二区三区| 国产色产综合产在线视频| 日韩一区在线播放| 亚洲午夜三级在线| 久久电影国产免费久久电影| 高潮精品一区videoshd| 色8久久人人97超碰香蕉987| 91精品视频网| 国产女同互慰高潮91漫画| 亚洲美女视频一区| 日本成人中文字幕| 成人av网址在线| 欧美色图免费看| 欧美精品一区二区三区蜜桃 | 麻豆专区一区二区三区四区五区| 国产综合成人久久大片91| a4yy欧美一区二区三区| 91精品国产综合久久久久久| 精品av久久707| 亚洲卡通欧美制服中文| 国产一区二区在线视频| 91久久香蕉国产日韩欧美9色| 制服丝袜在线91| 国产精品久久免费看| 亚洲成人综合网站| 国产精品一二三四| 欧美日韩一级片在线观看| 久久久久久黄色| 亚洲国产另类精品专区| 国产精品 欧美精品| 欧美三级日韩三级| 国产免费成人在线视频| 午夜影院久久久| 成人av资源下载| 日韩一区二区三| 日韩理论片中文av| 黑人精品欧美一区二区蜜桃| 色综合久久久网| 久久久久一区二区三区四区| 亚洲与欧洲av电影| 成人免费毛片app| 欧美一区二区三区免费观看视频| 日韩理论片网站| 国产成人在线视频播放| 欧美精品日韩一本| 亚洲色图丝袜美腿| 狠狠色丁香婷婷综合久久片| 欧美在线播放高清精品| 日本一区二区高清| 久久99精品国产| 欧美成人r级一区二区三区| 亚洲欧美另类小说| 成人午夜免费视频| 欧美精品一区二区三区视频 | 99视频一区二区| 久久久久久麻豆| 男人操女人的视频在线观看欧美| 91老师片黄在线观看| 欧美激情一区二区| 国产精品综合久久| 精品国产免费人成在线观看| 首页国产丝袜综合| 欧美绝品在线观看成人午夜影视| 一区二区视频在线| 99精品国产热久久91蜜凸| 国产区在线观看成人精品| 激情深爱一区二区| 日韩精品一区二| 麻豆精品一区二区三区| 8v天堂国产在线一区二区| 亚洲国产一区二区在线播放| 99re这里只有精品视频首页| 国产精品麻豆网站| 懂色av一区二区三区免费看| 国产亚洲午夜高清国产拍精品 | 亚洲日本乱码在线观看| 成人国产免费视频| 国产精品激情偷乱一区二区∴| 色综合视频在线观看| 亚洲视频在线一区| 色综合天天综合狠狠| 日本午夜精品视频在线观看| 欧洲国产伦久久久久久久| 亚洲特级片在线| 91精品办公室少妇高潮对白| 一个色在线综合| 欧美日韩一区 二区 三区 久久精品| 亚洲综合精品自拍| 欧美精品自拍偷拍| 肉肉av福利一精品导航| 精品成人免费观看| 国产寡妇亲子伦一区二区| 国产精品私人影院| 91丨porny丨首页| 亚洲精品ww久久久久久p站| 欧美色精品在线视频| 日韩经典一区二区| 久久伊99综合婷婷久久伊| 懂色中文一区二区在线播放| 一区二区三区资源| 日韩欧美一级二级| 成人一区二区视频| 一区二区三区日本| 制服丝袜激情欧洲亚洲| 国产最新精品免费| 中文字幕日韩av资源站| 欧美日韩综合色| 九九九久久久精品| 中文字幕在线视频一区| 欧美伊人久久久久久久久影院| 蜜臀av在线播放一区二区三区| 亚洲第一精品在线| 精品久久人人做人人爱| 成人av电影在线| 日韩激情一区二区| 国产蜜臀av在线一区二区三区| 欧美在线观看你懂的| 久久成人18免费观看| 亚洲人成亚洲人成在线观看图片 | 久久99久久99小草精品免视看| 国产精品无遮挡| 欧美高清精品3d| 成人免费视频一区| 日本成人中文字幕| 综合久久一区二区三区| 日韩欧美的一区二区| 91小视频免费看| 精品一区二区三区香蕉蜜桃| 亚洲欧美日韩成人高清在线一区| 精品久久久久久久久久久院品网| 99精品热视频| 国产在线播放一区| 亚洲成av人片在线| 国产精品美女久久久久久久久久久| 欧美日韩国产大片| a4yy欧美一区二区三区| 久国产精品韩国三级视频| 亚洲视频在线观看三级| 久久久精品中文字幕麻豆发布| 欧美日韩和欧美的一区二区| 成人免费电影视频| 精品制服美女丁香| 亚洲国产精品精华液网站|