代码之家  ›  专栏  ›  技术社区  ›  Temmie

CPLEX到R语言的转换〔关闭〕

  •  0
  • Temmie  · 技术社区  · 8 年前

    我对这实际上是如何工作的感到困惑。我不知道二进制在CPLEX中是什么意思。问题是:

    制造经理负责最小化采购 接下来四个月的成本(原材料加存储成本)。 在表3.4中,可以找到一单位原材料的成本和 对于月末存储的每个单元。原材料的任何单位 在给定月份购买的可用于满足相同的需求 或者存储以满足未来几个月的需求。在 1月初没有库存,也没有最低库存 任何月份的库存要求。 enter image description here
    在接下来的四个月里,原材料供应商已经 特别优惠:在任何特定月份购买超过200的所有单位将 有2 e的折扣。例如,如果购买350个单位 在第1个月订购,首批200套将以12 e的价格出售,以及 以下150件将以每件10 e的价格出售。 1.定义决策变量(提供每个变量的简要定义 定义变量集)、目标函数和约束 最小化总采购成本的线性规划模型

    解决方案:
    enter image description here


    CPLEX码

    Minimize
    cost : 12 q1 + 14 q2 + 16 q3 + 18 q4 + 10 r1 + 12 r2 + 14 r3 + 16
              r4 + 2 s1 + 2 s2 + 2 s3 + 2 s4
    Subject To
      d1 : q1 + r1 - s1 = 150
      d2 : s1 + q2 + r2 - s2 = 200
      d3 : s2 + q3 + r3 - s3 = 250
      d4 : s3 + q4 + r4 - s4 = 150
      l1 : q1 - 200 b1 >= 0
      l2 : q2 - 200 b2 >= 0
      l3 : q3 - 200 b3 >= 0
      l4 : q4 - 200 b4 >= 0
      m1 : r1 - 10000 b1 <= 0
      m2 : r2 - 10000 b2 <= 0
      m3 : r3 - 10000 b3 <= 0
      m4 : r4 - 10000 b4 <= 0
    Bounds
      0 <= q1 <= 200
      0 <= q2 <= 200
      0 <= q3 <= 200
      0 <= q4 <= 200
    Binary
      b1
      b2
      b3
      b4
    End
    


    我的代码:

    library ( lpSolve )
    #defining parameters
    obj.fun <- c(12 , 14, 16, 18, 10, 12, 14, 2, 2, 2, 2)
    constr <- matrix (c(1, 0, 0, 0, 1, 0, 0, 0, -1, 0, 0, 0,
            0, 1, 0, 0, 0,1,0,0,1,-1,0,0,
            0,0,1,0,0,0,1,0,0,1,-1,0
            0,0,0,4,0,0,0,1,0,0,1,-1) , ncol = 4 , byrow =TRUE )
    constr.dir <- c("=","=", "=", "=")
    rhs <- c(150 , 200 , 250, 150)
    #solving model
    prod.sol <- lp ("max", obj.fun , constr , constr.dir , rhs ,compute.sens = TRUE)
    #accessing to R output
    prod.sol$obj.val 
    prod.sol$solution 
    prod.sol$duals 
    #sensibility analysis results
    prod.sol$duals.from
    prod.sol$duals.to
    prod.sol$sens.coef.from
    prod.sol$sens.coef.to
    
    1 回复  |  直到 8 年前
        1
  •  2
  •   isebarn    8 年前

    二进制表示b1、b2、b3、b4为0或1,因此,如果b1==1,并且你有10000个b1,这意味着你在第一个月购买10000*1=10000件原材料,从解决方案中,你不会在第2、3或4个月购买任何原材料

    在英语中,二进制变量用于表示完全关闭或完全打开的变量

    正如解决方案所述,“最佳选择是在第1个月购买所有单位”

    如何创建约束?你可以使用二进制变量

    你的老师正在为你学习混合整数规划做准备,这部分依赖于二进制变量

    根据您使用的cplex包装器,请参阅

    cplexAPI Rcplex ,并搜索二进制变量