初始化问题
承接前一篇文章,对于原始的线性规划问题,如果约束中某个 b i b_i bi小于零,直接以初始松弛变量作为基变量得到的基解是不可行的。例如:
m a x Z = x 1 + 2 x 2 x 1 + x 2 ≤ 2 − x 1 − x 2 ≤ − 1 x 1 , x 2 ≥ 0 \begin{aligned} max\quad& Z=x_1+2x_2\\ & x_1+x_2\leq 2\\ & -x_1-x_2\leq -1\\ & x_1,x_2\geq 0 \end{aligned} maxZ=x1+2x2x1+x2≤2−x1−x2≤−1x1,x2≥0
其松弛形式:
m a x Z = x 1 + 2 x 2 x 1 + x 2 + s 1 = 2 − x 1 − x 2 + s 2 = − 1 x 1 , x 2 , s 1 , s 2 ≥ 0 ⟹ m a x Z = x 1 + 2 x 2 s 1 = 2 − x 1 − x 2 s 2 = − 1 + x 1 + x 2 x 1 , x 2 , s 1 , s 2 ≥ 0 \begin{aligned} max\quad& Z=x_1+2x_2\\ & x_1+x_2+s_1=2\\ & -x_1-x_2+s_2=-1\\ & x_1,x_2,s_1,s_2\geq 0 \end{aligned}\\ \Longrightarrow \begin{aligned} \\ max\quad& Z=x_1+2x_2\\ & s_1=2-x_1-x_2\\ & s_2=-1+x_1+x_2\\ & x_1,x_2,s_1,s_2\geq 0 \end{aligned} maxZ=x1+2x2x1+x2+s1=2−x1−x2+s2=−1x1,x2,s1,s2≥0⟹maxZ=x1+2x2s1=2−x1−x2s2=−1+x1+x2x1,x2,s1,s2≥0
这时得到的基解中, s 2 = − 1 s_2=-1 s2=−1,这显然不可行。因此在完整的单纯形算法中,解的初始化问题也是非常重要的一步,有两个问题需要在初始化中解决:
- 该线性规划是否存在可行解
- 如果有可行解,如何找到一个可行解来启动迭代
有一种非常巧妙的初始化算法是构建辅助规划问题,通过求解辅助规划问题来为原问题找到初始可行解,其求解过程也采用单纯形算法
辅助规划问题
如果原问题 P P P为:
m a x c T x s . t . A x ≤ b x ≥ 0 \begin{aligned} max\quad& \boldsymbol{c}^T\boldsymbol{x}\\ s.t.\quad& \boldsymbol{A}\boldsymbol{x}\leq \boldsymbol{b} \\ & \boldsymbol{x} \geq0 \\ \end{aligned} maxs.t.cTxAx≤bx≥0
则定义它的辅助问题 Q Q Q为:
m i n x 0 s . t . A x − x 0 ∗ 1 ⃗ ≤ b x 0 , x ≥ 0 \begin{aligned} min\quad& x_0\\ s.t.\quad& \boldsymbol{A}\boldsymbol{x}-x_0*\vec{1}\leq \boldsymbol{b} \\ & x_0,\boldsymbol{x} \geq0 \\ \end{aligned} mins.t.x0Ax−x0∗1≤bx0,x≥0
拿上面那个例子举例:
m a x Z = x 1 + 2 x 2 x 1 + x 2 ≤ 2 − x 1 − x 2 ≤ − 1