【问题标题】:Or Condition in Linear Programming with GLPSOL AMPL/MathProg或 GLPSOL AMPL/MathProg 线性规划中的条件
【发布时间】:2014-04-25 21:10:21
【问题描述】:

我想编写一个优化模型,根据某些约束选择两个任务中较小的一个。

minimize obj: (doT1 * T1) + (doT2*T2) + (additional variables)

现在,T1 和 T2 代表任务的持续时间,而 doT1 代表执行这些任务的标志。如果需要,我希望此优化仅选择其中一个。

当我放置约束时

s.t. c15: 0<= doT1 <= 1;
s.t. c15: 0<= doT2 <= 1;

我在 glpsol 中收到一条错误消息,指出不允许线性形式的乘法。

线性规划中可以表达OR条件吗?

【问题讨论】:

    标签: linear-programming ampl glpk mathprog


    【解决方案1】:

    gplsol 最有可能抱怨变量doT1 * T1doT2 * T2 的乘积。

    我假设doT1doT2 是二进制变量,T1T2 是连续变量(代表任务的持续时间)。 (请注意,这意味着您将不得不使用混合整数规划求解器,而不是纯线性规划求解器。您可能还想尝试使用功能强大的 MIP 求解器,例如 Gurobi)。

    您可以通过将约束和目标重写为来构建模型

      minimize  T1 + T2 + (additional variables)
    
       st        T1 <= UT1*doT1
                 T2 <= UT2*doT2
                 doT1 + doT2 <= 1
                 doT1, doT2 binary
                 (plus any additional constraints)
    

    其中UT1 是任务T1 持续时间的上限,UT2 是任务T2 持续时间的上限。如果doT1 = 0 那么T1 &lt;= 0,那么任务将不会完成。如果doT1 = 1,则T1 &lt;= UT1,这意味着任务T1 允许花费一些时间。 T2 也是如此。

    OR 条件由约束doT1 + doT2 &lt;= 1 表示。此约束意味着doT1doT2 不能都为1。即只能选择一个作业。请注意,&lt;= 约束还允许您不执行任何一项任务。如果必须至少完成一项任务,则要使用约束doT1 + doT2 == 1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多