2

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

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 条件?

4

1 回答 1

1

gplsol最有可能抱怨变量doT1 * T1和的乘积doT2 * T2

我假设doT1anddoT2是二元变量,T1andT2是连续变量(代表任务的持续时间)。(请注意,这意味着您将不得不使用混合整数规划求解器而不是纯线性规划求解器。您可能还想尝试使用功能强大的 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是任务持续时间的上限T1UT2是任务持续时间的上限T2。如果doT1 = 0then T1 <= 0,那么任务将无法完成。如果doT1 = 1, 那么T1 <= UT1, 意味着T1允许该任务花费一些时间。对于T2.

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

于 2014-04-10T17:32:58.537 回答