首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用GLPSOL AMPL/MathProg实现线性规划中的Or条件

用GLPSOL AMPL/MathProg实现线性规划中的Or条件
EN

Stack Overflow用户
提问于 2014-03-19 22:26:15
回答 1查看 945关注 0票数 2

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

代码语言:javascript
复制
minimize obj: (doT1 * T1) + (doT2*T2) + (additional variables)

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

当我把约束放在

代码语言:javascript
复制
s.t. c15: 0<= doT1 <= 1;
s.t. c15: 0<= doT2 <= 1;

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

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

EN

回答 1

Stack Overflow用户

发布于 2014-04-11 01:32:59

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

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

可以通过重写约束和目标来构建模型,如下所示

代码语言:javascript
复制
  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 <= 0,因此任务将不会完成。如果为doT1 = 1,则为T1 <= UT1,这意味着允许任务T1占用一定的持续时间。T2也是如此。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22508983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档