我在无线性问题中有几个约束。
例如:
In m(x+y-n)^2
If x+y-n>=0 Then m=0,
Else m=1.
如何将此条件约束写为线性或非线性约束?
答案 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。