如何在AMPL中为另一个变量分配二进制变量

时间:2013-05-09 20:20:57

标签: linear-programming ampl

我的AMPL建模有问题。你能帮助我如何定义一个二进制变量u,假设当另一个变量x也等于0时等于0,当x不等于0时为1?

我试图使用逻辑表达式,但我正在使用的解算器(cplex和minos)不允许它。

我的想法是:

subject to:
u || x != u && x

1 个答案:

答案 0 :(得分:3)

M变为{大'常量,例如x < M成立,并假设x是整数(如果x >= 1是连续的,则为x)。您可以使用这两个约束:

 u <= x     (if x=0, then u=0)
 x <= M*u   (if x>0, then u=1)

u二进制变量。

如果现在x是连续的且不一定大于1,则必须调整上述约束(例如,此处的第一个约束不会通过x=0.3和{{1}进行验证})。

一般的想法是,你可以(在很多情况下)用不等式替换那些逻辑约束,使用如果u=1a是布尔变量,那么语句“{{1} }隐含b“可写为a(如果b,则为b>=a)。