2014-03-19 20 views
1

我想写一个优化模型,根据一些约束选择较小的两个任务。或使用GLPSOL AMPL/MathProg进行线性规划的条件

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

回答

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是以任务T1UT2的持续时间的上限是以任务T2的持续时间的上限。如果doT1 = 0T1 <= 0,所以任务不会完成。如果doT1 = 1,则T1 <= UT1,这意味着任务T1被允许持续一段时间。这同样适用于T2

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