线性化非线性约束(两个连续变量的乘积)
Linearize non-linear constraint (product of two continuous variables)
由于两个连续变量的乘积,我在对约束进行线性化时遇到问题。
假设非线性约束为A = b + x1 x2 : A,x1,x2为非负连续变量
如何线性化此约束?
我试图通过创建两个新的连续变量(y1 和 y2)来重新表述它
其中 y1 = 1/2 (x1 + x2) 和 y2= 1/2 (x1 - x2)。
在这种情况下,约束也变成非线性的。
我该怎么办?
如果 x 和 y 是连续的,则没有精确的线性化方法 w=x*y
。
- 重新表述
z1 = 1/2 (x + y)
和 z2 = 1/2 (x - y)
得到 w = z1^2 - z2^2
。这确实仍然是非线性的,但是使用分段线性近似时更容易处理。
- 您可以使用 McCormick 信封 (https://optimization.mccormick.northwestern.edu/index.php/McCormick_envelopes)。但这只是一个近似值。为了获得更高的精度,请将范围分成几部分。
- 有时(在特殊情况下)对数变换会有所帮助。
- 一些求解器可以直接处理这个二次表达式。
由于两个连续变量的乘积,我在对约束进行线性化时遇到问题。
假设非线性约束为A = b + x1 x2 : A,x1,x2为非负连续变量
如何线性化此约束?
我试图通过创建两个新的连续变量(y1 和 y2)来重新表述它 其中 y1 = 1/2 (x1 + x2) 和 y2= 1/2 (x1 - x2)。 在这种情况下,约束也变成非线性的。
我该怎么办?
如果 x 和 y 是连续的,则没有精确的线性化方法 w=x*y
。
- 重新表述
z1 = 1/2 (x + y)
和z2 = 1/2 (x - y)
得到w = z1^2 - z2^2
。这确实仍然是非线性的,但是使用分段线性近似时更容易处理。 - 您可以使用 McCormick 信封 (https://optimization.mccormick.northwestern.edu/index.php/McCormick_envelopes)。但这只是一个近似值。为了获得更高的精度,请将范围分成几部分。
- 有时(在特殊情况下)对数变换会有所帮助。
- 一些求解器可以直接处理这个二次表达式。