我在非线性问题中有几个约束。
例如:
In m(x+y-n)^2
If x+y-n>=0 Then m=0,
Else m=1.
如何将此条件约束写为线性或非线性约束?
我在非线性问题中有几个约束。
例如:
In m(x+y-n)^2
If x+y-n>=0 Then m=0,
Else m=1.
如何将此条件约束写为线性或非线性约束?
好吧,您可以将其写为[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
足够大的常数。在许多情况下,可以应用更好的重新表述,但这取决于模型的其余部分。
如果您使用约束规划求解器,例如Choco Solver,那么您可以直接使用 IfThenElse 约束以及其他非线性约束,例如正方形。