如果那么约束非线性编程

时间:2016-08-10 06:54:58

标签: modeling linear-programming integer-programming

我在无线性问题中有几个约束。

例如:

In   m(x+y-n)^2
If    x+y-n>=0 Then m=0, 
Else  m=1.

如何将此条件约束写为线性或非线性约束?

2 个答案:

答案 0 :(得分:0)

你可以写成[min(x+y-n,0)]^2。不确定这对你有什么好处(这是不可区分的,因此许多求解器都很难)。我们可以使用其他二进制变量使min()表达式线性化:

z <= x+y-n
z <= 0
z >= x+y-n - b * M
z >= 0 - (1-b) * M
b in {0,1}

M足够大的常数。在许多情况下,可以应用更好的重构,但这取决于模型的其余部分。

答案 1 :(得分:0)

如果使用约束编程解算器,例如Choco Solver,则可以直接使用IfThenElse约束以及其他非线性约束,例如square。