3

我对 AMPL 建模有疑问。你能帮我定义一个二进制变量 u,当另一个变量 x 也等于 0 时,它假设等于 0,而当 x 不等于 0 时,它等于 1?

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

我的想法是:

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

1 回答 1

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二进制变量。

如果 nowx是连续的且不一定大于 1,则必须调整上述约束(例如,此处的第一个约束不会使用x=0.3and验证u=1)。

a一般的想法是,您可以(在许多情况下)用不等式替换这些逻辑约束,使用 if和b是布尔变量的事实,那么语句“a蕴含b”可以写为b>=a(if a=1, then b=1)。

于 2013-05-10T15:00:53.870 回答