单纯形法笔记?
单纯形法
考虑问题:
min S 指的是,S等于后面那一坨东西,然后求S的最小值
s.t. 指的是要满足后面的条件
变形
我们考虑如果只有等式怎么办?或者说,如何将他变为只含有等式的样子?
方法就是:让那些 \(\le\) 的,最左边加上一个非负数;那些 \(\ge\) 的左边减去一个非负数。
显然,这么变换不会影响答案。
可行解
然后我们先找一组可行解(不一定是最优解),在此之前,将这个问题写成矩阵的形式。
其中约定 \(A=(P_1,P_2,...,P_6)\),也就是说 \(P_i\) 是 \(A\) 的每一列,\(X\ge0\) 表示 \(x_i\ge0\) 都成立。
显然 \(X=(6,0,0,0,3,4)^T\) 满足条件,为什么这个可以呢?因为我们构造的时候让 \((P_1,P_5,P_6)\) 是一个单位矩阵 \(I\)。其他未知数全取0,\(x_1,x_5,x_6\) 取 \(b\) 中相应的系数即可。
但是这个可行解不一定是最优的,我们考虑如何通过变换 \(X\) 获得最优解。
最优解
我们先约定一些东西,我们构造的单位矩阵用的是 \(P_1,P_5,P_6\),称 \(x_1,x_5,x_6\) 为基变量,令 \(X_B=(x_1,x_5,x_6)^T\),其他的为飞机变量非基变量,\(X_N=(x_2,x_3,x_4)^T\)。基列 \(B=(P_1,P_5,P_6)\) 非基列 \(N=(P_2,P_3,P_4)\) 然后 \(C_B=(1,0,0)\) 也就是 \(S=CX\) 中的 \(C\) 中基变量的系数(由于 \(x_5,x_6\) 是我们人为补充的,显然他们的系数是0也就是 \(S\) 和他们无关)。
再把原题给的式子变一下形:
\(S=(C_B,C_N)(X_B,X_N)^T=C_BX_B+C_NX_N\)
\(AX=(B,N)(X_B,X_N)^T=BX_B+NX_N=b\)
由第二个等式,可以推出 \(X_B=B^{-1}b-B^{-1}NX_N\),然后带入第一个式子,得:
\(S=C_BB^{-1}b-C_BB^{-1}NX_N+C_NX_N=C_BB^{-1}b+(C_N-C_BB^{-1}N)X_N\)
聪明的您估计已经发现了,这里的 \(S\) 就和原来的基变量的取值 \(X_B\) 无关了,也就是说我们可以通过改变飞机变量的取值,来改变 \(S\) 的值,从而获得最优解。
如果 \(C_N-C_BB^{-1}N\ge0\) 时,不管怎么改变 \(X_N\) , \(S\) 也不会变小(你没忘了 \(x_i\ge0\) 吧?)。
约定 \(y_{00}=C_BB^{-1}b\),注意那个可行解中基变量的取值就是 \(b\) 中的系数,其他的非基变量都是0,so此时 \(B^{-1}b=X_B\)
\(C_N-C_BB^{-1}N=(y_{0,2},y_{0,3},y_{0,4})\);基变量对应的 \(y_{0,1},y_{0,5},y_{0,6}\) 这三个全是0
\(B^{-1}N=\begin{pmatrix} y_{1,2}&y_{1,3}&y_{1,4}\\ y_{2,2}&y_{2,3}&y_{2,4}\\ y_{3,2}&y_{3,3}&y_{3,4}\\ \end{pmatrix}\)
\(B^{-1}b=(y_{10},y_{20},y_{30})^T\),也就是 \(y_{i,0}\) 等于第 \(i\) 行对应的基变量的取值
我们在这里再把原问题变一下形:(这里 \(y_{00}\) 不带 \(x\) 是因为最开始约定时已经算过了)
我们改写一下 \(S\):\(-y_{00}=-S+y_{0,2}x_2+y_{0,3}x_3+y_{0,4}x_4\)
你是否还记得,可行解中的非基变量全是0,这里我们改变一下 \(x_2,x_3,x_4\) 的值,就能改变 \(S\)。
书上证明了一下目标函数在有界凸多面集的某一顶点上达到最小,说人话就是,非基变量全是0的情况下,是能找到最优解的。
所以对于最开始找的可行解,我们要踢出一些基变量,让他变成非基变量;再拉进来一些非基变量,让他成为新的基变量。
回忆一下上面说过的:如果 \(C_N-C_BB^{-1}N\ge0\) 时,不管怎么改变 \(X_N\) , \(S\) 也不会变小。
我们先找出一个 \(y_{0,j}<0\) 的,考虑让这个非基变量 \(x_j\) 从 0 变大,从而减小 \(S\)。
那 \(x_j\) 能无限变大吗?能的话就没最优解了,不能的话,最大能变成多少呢?
这个不妨按下不表,我们先写出一个表格,方便我们之后的计算。
| \(C_B\) | \(X_B\) | \(y_{i,0}\) | \(x_1\) | \(x_2\) | \(x_3\) | \(x_4\) | \(x_5\) | \(x_6\) |
|---|---|---|---|---|---|---|---|---|
| 本行右 | 边是 \(y_{0,j}\) | -6 | 0 | -3 | -2 | -4 | 0 | 0 |
| 1 | \(x_1\) | 6 | 1 | \(\boxed{1}\) | 3 | 1 | 0 | 0 |
| 0 | \(x_5\) | 3 | 0 | -2 | 1 | 1 | 1 | 0 |
| 0 | \(x_6\) | 4 | 0 | -1 | 6 | -1 | 0 | 1 |
先回忆: \(C_B=(1,0,0)\) 也就是 \(S=CX\) 中的 \(C\) 中基变量的系数
发现 \(y_{0,2}<0\) ,于是我们考虑让 \(x_2\) 变大从而减少 \(S\)。
看 \(x_1\) 这一行,\(y_{1,2}=1\) 表示 \(x_2\) 每增加 1 ,那么\(x_1\) 需要减小 \(y_{1,2}=1\)。(这个可以根据 \(AX=b\) 得出)
\(y_{1,0}/y_{1,2}=6\) 表示你在保持 \(x_1\) 非负的情况下,最大可以让 \(x_2\) 取到6。(这个可以根据 \(AX=b\) 得出)
显然 \(y_{2,2}<0,y_{3,2}<0\) 表示,你增大 \(x_2\) 不会让 \(x_5,x_6\) 为负数。
如果 \(x_2\) 这一列全是非正的,那么 \(x_2\) 可以取到无限大,原问题无最优解。
对于本例题,这里 \(x_2\) 最大为 6,成为基变量 ,\(x_1\) 就变成了0,成为非基变量。
我们把这个1框起来表示限制 \(x_2\) 取值的是 \(x_1\)。
然后这个表格改怎么变呢?回忆一下,之前说过基变量的那个 \(X_B\) 是个单位矩阵,这一列其余的数都是0,并且基变量对应的 \(y_{0,2}\) 是0
你把整个表格看成一个大矩阵,用 \(x_1\) 的那一行,把 \(x_2\) 所在的那一列系数分别变成 \(0,1,0,0\)。
也就是第一行加上第二行的3倍,让 \(y_{0,2}=0\),第二行除以 \(y_{1,2}\),第三行+2倍,第四行+1倍,维护单位矩阵,之后表格变为:
| \(C_B\) | \(X_B\) | \(y_{i,0}\) | \(x_1\) | \(x_2\) | \(x_3\) | \(x_4\) | \(x_5\) | \(x_6\) |
|---|---|---|---|---|---|---|---|---|
| 12 | 3 | 0 | 7 | -1 | 0 | 0 | ||
| -2 | \(x_2\) | 6 | 1 | 1 | 3 | 1 | 0 | 0 |
| 0 | \(x_5\) | 15 | 2 | 0 | 7 | \(\boxed{3}\) | 1 | 0 |
| 0 | \(x_6\) | 10 | 1 | 0 | 9 | 0 | 0 | 1 |
这里需要同步改一下第二行的 \(C_B,X_B\) 表示基变量 \(x_1\) 换为 \(x_2\)。这里可以注意到,改变 \(x_2\) 和 \(x_1\) 的值,\(x_5,x_6\) 也同步改变了。
这时发现 \(y_{0,4}<0\) 考虑让 \(x_4\) 变大,\(\min(6/1,15/3)=5\),说明 \(x_5\) 限制了 \(x_4\) 的取值,换一下基变量并消 \(x_4\) 这一列的系数,表格变为:
| \(C_B\) | \(X_B\) | \(y_{i,0}\) | \(x_1\) | \(x_2\) | \(x_3\) | \(x_4\) | \(x_5\) | \(x_6\) |
|---|---|---|---|---|---|---|---|---|
| 17 | 11/3 | 0 | 28/3 | 0 | 1/3 | 0 | ||
| -2 | \(x_2\) | 1 | 1/3 | 1 | 2/3 | 0 | -1/3 | 0 |
| -3 | \(x_4\) | 5 | 2/3 | 0 | 7/3 | 1 | 1/3 | 0 |
| 0 | \(x_6\) | 10 | 1 | 0 | 9 | 0 | 0 | 1 |
最后发现所有的检验数 \(y_{0,j}\) 均非负,此时最优解 \(X=(0,1,0,5,0,10)^T,\min S=-2*1-3*5=-17=-y_{0,0}\)
一些特殊情况
如果题目中给的是 \(\max\ S\),我们需要变为 \(\min\ -S\)。
如果 \(A\) 中难以找到一组基变量,可以对 \(A\) 做一下行变换,从而得到一个单位子矩阵,就ok了。
看一下这个情况
如果变形成:
不能直接选取可行解 \(X=(0,0,5,-5,-10)\),因为规定有 \(x_i\ge0\)。
虽然好像这么算答案是能算对的
两阶段法
对于 \(AX=b,X\ge0\) 可能不是很好找基本可行解,可以考虑构造一个辅助线性规划问题:
这里的 \(m\) 是 \(A\) 的行数。
例如:
此时的基变量是 \(y_1,y_2\) 我们的目标是将基变量全部变为 \(x_j\),之后再用单纯形法求最优解即可,方法同上。

浙公网安备 33010602011771号