单纯形法
问题概述
待求解的问题具有如下的一般形式:
x∈RnmincTxs.t. Ax=b,x≥0.
单纯形算法
\begin{algorithm}\caption{单纯形法}
\begin{algorithmic}
\Input{$c; A,b$}
\Output{$x = [x_B,x_N]$, 请注意按下标排列}
\Procedure{单纯形法}{$c;A,b$}
\State{随机给定基本指标集 $\mathcal{B} \subset [n]$ 与非基本指标集合 $\mathcal{N} = [n] - \mathcal{B}$.}
\While{1}
\State{Set $B = [a_{i},\cdots](i\in\mathcal{B}, a_{i}\in A), N = A - B$.}
\State{Set $c_B = [c_{i},\cdots]^T(i\in\mathcal{B}, c_{i}\in c),c_N = c - c_B$}
\State{Solve $x_B$ for $Bx_{B}= b$ and Set $x_N = \vec{0}$}
\State{Solve $\lambda$ for $B^T \lambda = c_B$ and Set $s_{N} = c_N - N^T \lambda$}
\IF{$s_N \geq \vec{0}$}
\STATE{找到了最优解为 $[x_B, x_N]$ }
\Break
\Else
\State{choose $q\in \mathcal{N}$ randomly s.t. $s_q < 0$}
\State{Solve $d$: $Bd = A_q$}
\If{$d\leq \vec{0}$}
\State{问题无解}
\Break
\Else
\State{choose $p = \mathop{\min}\limits_{i\;| \; d_i >0} \frac{(x_B)_i}{d_i}$ $\quad$ (where $p\in \mathcal{B}$)}
\State{add $q \rightarrow\mathcal{B}$ and add $p\rightarrow\mathcal{N}$}
\EndIf
\ENDIF
\EndWhile
\EndProcedure
\end{algorithmic}
\end{algorithm}
Example
st.min−5x1−x2x1+x2≤52x1+x2=8x1,x2≥0
(1) 增加非限制变量,使成为标准型
(2) 利用单纯型法求解
解:(1) 原问题可转化为
minst.cTxAx=b,x≥0
其中
c=[−5,−1,0,0]T,x=[x1,x2,x3,x4]T,A=[12111001],b=[58]
(2) 采用单纯形法求解上述问题如下
a. 初始时,选取B={3,4}⇒N={1,2}.
⇒xB=[5,8]T,xN=[0,0]T⇒初始可行解x=[0,0,5,8]T,且此时目标函数值为0
又有λ=B−TcB=[0,0]T,sN=cN−NTλ=[−5,−1]T<0
b. 选取 q=1∈N,此时 A1=[1,2]T,计算 Bd=A1,得 d=[1,2]T。通过计算 d1(xB)1=5,d2(xB)2=4,则 p=4∈B。此时 B={1,3},N={2,4}. 对应矩阵 B=[1210],N=[12101],且cB=[−5,0]T,cN=[−1,0]T
计算得
xB=B−1b=[4,1]T⇒xN=[0,0]Tλ=B−TcB=[0,−25]TsN=cN−NTλ=[41,25]T⇒stop
此时目标函数值为
cT[4,0,1,0]=−20.
■