单纯形法笔记?

单纯形法

考虑问题:

\[\text{min}\ S=x_1-2x_2+x_3-3x_4 \]

\[s.t.\begin{cases}x_1&+x_2&+3x_3&+x_4&=&6\\ &-2x_2&+x_3&+x_4&\le&3\\ &-x_2&+6x_3&-x_4&\le&4\\ x_i&\ge0 \end{cases} \]

min S 指的是,S等于后面那一坨东西,然后求S的最小值

s.t. 指的是要满足后面的条件

变形

我们考虑如果只有等式怎么办?或者说,如何将他变为只含有等式的样子?

\[\text{min}\ S=x_1-2x_2+x_3-3x_4 \]

\[s.t.\begin{cases}x_1&+x_2&+3x_3&+x_4&&&=&6\\ &-2x_2&+x_3&+x_4&+x_5&&=&3\\ &-x_2&+6x_3&-x_4&&+x_6&=&4\\ x_i&\ge0 \end{cases} \]

方法就是:让那些 \(\le\) 的,最左边加上一个非负数;那些 \(\ge\) 的左边减去一个非负数。

显然,这么变换不会影响答案。

可行解

然后我们先找一组可行解(不一定是最优解),在此之前,将这个问题写成矩阵的形式。

\[\min\ S=CX=(1,-2,1,-3,0,0) \begin{pmatrix} x_1\\ x_2\\ x_3\\ x_4\\ x_5\\ x_6 \end{pmatrix} \]

\[s.t. \begin{cases} AX=\begin{pmatrix} 1&1&3&1&0&0\\ 0&-2&1&1&1&0\\ 0&-1&6&-1&0&1 \end{pmatrix} \begin{pmatrix} x_1\\ x_2\\ x_3\\ x_4\\ x_5\\ x_6\\ \end{pmatrix} = \begin{pmatrix} 6\\3\\4 \end{pmatrix} =b\\ X\ge0 \end{cases} \]

其中约定 \(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\) 是因为最开始约定时已经算过了)

\[\text{min}\ S=y_{00}+y_{0,2}x_2+y_{0,3}x_3+y_{0,4}x_4 \]

\[s.t. \begin{cases}x_1&+y_{1,2}x_2&+y_{1,3}x_3&+y_{1,4}x_4&&&=&6\\ &y_{2,2}x_2&+y_{2,3}x_3&+y_{2,4}x_4&+x_5&&=&3\\ &y_{3,2}x_2&+y_{3,3}x_3&+y_{3,4}x_4&&+x_6&=&4\\ \end{cases} \]

我们改写一下 \(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了。

看一下这个情况

\[\min\ S=4x_1+5x_2+6x_3 \]

\[s.t.\begin{cases}x_1&+x_2&+x_3=&5\\ -6x_1&+10x_2&+5x_3&\le&20\\ 5x_1&-3x_2&+x_3&\ge&15\\ x_i&\ge0 \end{cases} \]

如果变形成:

\[\min\ S=4x_1+5x_2+6x_3 \]

\[s.t.\begin{cases}x_1&+x_2&+x_3&&&=&5\\ -11x_1&+5x_2&&+x_4&&=&-5\\ -4x_1&+4x_2&&&+x_5&=&-10\\ x_i&\ge0 \end{cases} \]

不能直接选取可行解 \(X=(0,0,5,-5,-10)\),因为规定有 \(x_i\ge0\)
虽然好像这么算答案是能算对的

两阶段法

对于 \(AX=b,X\ge0\) 可能不是很好找基本可行解,可以考虑构造一个辅助线性规划问题:

\[\min\ Z=\sum\limits_{i=1}^my_i \]

\[s.t. \begin{cases} AX+Y=b\\ X\ge0,Y\ge0 \end{cases} \]

这里的 \(m\)\(A\) 的行数。

例如:

\[\min\ Z=y_1+y_2 \]

\[s.t. \begin{cases} 2x_1&+x_2&+2x_3&+y_1&&=4&\\ 3x_1&+3x_2&+x_3&&+y_2&=3&\\ x_j&\ge0,&y_i&\ge0 \end{cases} \]

此时的基变量是 \(y_1,y_2\) 我们的目标是将基变量全部变为 \(x_j\),之后再用单纯形法求最优解即可,方法同上。

posted @ 2025-03-26 13:48  zYzYzYzYz  阅读(74)  评论(0)    收藏  举报