偶尔碰到一个线性化的问题:一个变量在一个区域内为一个值,在其他区域内为另一个值,即
如果 m 1 ≤ x ≤ m 2 m_1\leq x\leq m_2 m1≤x≤m2,则 y = x y=x y=x,否则 y = 0 y=0 y=0。
该问题的线性化如下:
引入一个 0-1 变量
z
z
z 和足够大的常数
M
M
M,
x
≥
m
1
−
z
M
x
≤
m
2
+
z
M
y
−
x
≥
−
z
M
y
−
x
≤
z
M
y
≤
(
1
−
z
)
M
y
≥
−
(
1
−
z
)
M
\begin{aligned} x&\geq m_1-zM\\ x&\leq m_2+zM\\ y-x&\geq -zM\\ y-x&\leq zM\\ y&\leq (1-z)M\\ y&\geq -(1-z)M \end{aligned}
xxy−xy−xyy≥m1−zM≤m2+zM≥−zM≤zM≤(1−z)M≥−(1−z)M