我的AMPL建模有问题。你能帮助我如何定义一个二进制变量u,假设当另一个变量x也等于0时等于0,当x不等于0时为1?
我试图使用逻辑表达式,但我正在使用的解算器(cplex和minos)不允许它。
我的想法是:
subject to:
u || x != u && x
答案 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=1
和a
是布尔变量,那么语句“{{1} }隐含b
“可写为a
(如果b
,则为b>=a
)。