单纯形表法(基本原理+例题解析)

基本思想:从一个基本可行解出发,一步步的转到更优的基本可行解,直至最优解。

单纯形法总有两种形式,一是单纯形法,还有一种是单纯形表法。下面我们依次展开讨论。

单纯形法:

基本概念:

单纯形法其实是对消去法的一个总结,归纳和公式化。

标准线性规划问题:

\left\{\begin{matrix} min f(x)=c^{T}x\\ s.t. Ax=b \\ x\geq 0 \end{matrix}\right.rank(A)=m

A=(p_{1},p_{2},...,p_{n}),假设 B=(p_{1},p_{2},...,p_{m}) 是可行基 A=(B,N),根据 B 矩阵,将 x 分为基变量 x_{B}=(x_{1},x_{2},...,x_{m})^{T} 和非基变量 x_{N}=(x_{m+1},x_{m+2},...,x_{n})^{T} 将 c 同样分为 c_{B}=(c_{1},c_{2},...,c_{m})^{T} 和 c_{N}=(c_{m+1},c_{m+2},...,c_{n})^{T} 。

约束条件 Ax=b 可以写成:

\bigl(\begin{smallmatrix} B ,&N \end{smallmatrix}\bigr)\binom{x_{B}}{x_{N}}=b\Rightarrow Bx_{B}+Nx_{N}=b\Rightarrow Bx_{B}=b-Nx_{N}

两边左乘 B^{-1},得到 x_{B}=B^{-1}b-B^{-1}Nx_{N}

目标函数 f(x)=c^{T}x 可以写成:

c^{T}x=\bigl(\begin{smallmatrix} c_{B}^{T} ,&c_{N}^{T} \end{smallmatrix}\bigr)\binom{x_{B}}{x_{N}}=c_{B}^{T}x_{B}+c_{N}^{T}x_{N}

将 x_{B}=B^{-1}b-B^{-1}Nx_{N} 代入目标函数表达式,得:

c^{T}x=c_{B}^{T}(B^{-1}b-B^{-1}Nx_{N})+c_{N}^{T}x_{N}=c_{B}^{T}B^{-1}b-c_{B}^{T}B^{-1}Nx_{N}+c_{N}^{T}x_{N}

=c_{B}^{T}B^{-1}b-(c_{B}^{T}B^{-1}N-c_{N}^{T})x_{N}

令 x_{N}=0,可得 x_{B}=B^{-1}b ,从而得到基本解:

\bar{x}=\binom{x_{B}}{x_{N}}=\binom{B^{-1}b}{0}

如果 B^{-1}b\geq 0 ,则 \bar{x} 是基本可行解,B 是可行基。

目标函数 f(x)=c_{B}^{T}B^{-1}b-(c_{B}^{T}B^{-1}N-c_{N}^{T})x_{N}.

如果 \bar{x} 是基本可行解,并且 c_{B}^{T}B^{-1}N-c_{N}^{T}\leq 0,则可以断定  \bar{x} 是最优解。

检验数向量:

定义:称 (c_{B}^{T}B^{-1}A-c^{T}) 是标准线性规划的检验数向量,如果 (c_{B}^{T}B^{-1}A-c^{T})\leq 0 则取到了最优解。

由此综合,可总结出定理:

1)对于标准线性规划问题,如果基矩阵为 B ,并且 B^{-1}b\geq 0( B 是可行基),并且所有的检验数都非正(即 (c_{B}^{T}B^{-1}A-c^{T})\leq 0 ),则对应于 B 的基本可行解 \bar{x}=\binom{B^{-1}b}{0} 是最优解。

2)如果线性规划的某个检验数 \sigma _{j}> 0 ,而相对应的列向量 p_{j}\leq 0,则这个线性规划无解。

下面给出运用两个定理的例题,用于加深理解。

1,判断 x=(4,0,5,0)^{T} 是否为线性规划问题的最优解?

\left\{\begin{matrix} minf(x)=x_{1}+2x_{2}+3x_{3}-2x_{4}\\ s.t. x_{1}-2x_{2}+4x_{4}=4 \\ x_{2}+x_{3}-2x_{4}=5 \\ x_{1},x_{2},x_{3},x_{4}\geq 0 \end{matrix}\right.

解:

A=\left [ \begin{smallmatrix} 1& -2 &0 &4 \\0 &1 &1 &-2 \end{smallmatrix} \right ]b=\left [ \begin{smallmatrix} 4\\5 \end{smallmatrix}\right ]c=\left [ \begin{smallmatrix} 1\\2 \\3 \\-2 \end{smallmatrix}\right ]

由 x=(4,0,5,0)^{T} 知,x_{1}x_{3} 是基变量,x_{2}x_{4}是非基变量

B=\left [\begin{smallmatrix} 1 &0 \\0 &1 \end{smallmatrix} \right ],c_{B}^{T}=(1,3)

下面计算检验数向量:

(c_{B}^{T}B^{-1}A-c^{T})=(1,3)\left [\begin{smallmatrix} 1 &0 \\0 &1 \end{smallmatrix} \right ]\left [ \begin{smallmatrix} 1& -2 &0 &4 \\0 &1 &1 &-2 \end{smallmatrix} \right ]-(1,2,3,-2)

=(1,1,3,-2)-(1,2,3,-2)=(0,-1,0,0)\leq 0

 x=(4,0,5,0)^{T} 是最优解。

2,对于下面的线性规划,讨论其有无最优解?

\left\{\begin{matrix} minf(x)=x_{1}-x_{2}\\ s.t. 3x_{1}-2x_{2}+x_{3}=1 \\ 2x_{1}-x_{2}+x_{4}=5 \\ x_{1},x_{2},x_{3},x_{4}\geq 0 \end{matrix}\right.

解:

A=\left [ \begin{smallmatrix} 3& -2 &1 &0 \\2 &-1 &0 &1 \end{smallmatrix} \right ]b=\left [ \begin{smallmatrix} 1\\5 \end{smallmatrix}\right ]c=\left [ \begin{smallmatrix} 1\\-1 \\0 \\0 \end{smallmatrix}\right ]

B=\left [\begin{smallmatrix} 1 &0 \\0 &1 \end{smallmatrix} \right ],c_{B}^{T}=(0,0)

下面主要判断 \sigma _{2} 是否大于0?

计算检验数向量:

(c_{B}^{T}B^{-1}A-c^{T})=(0,0)\left [ \begin{smallmatrix} 3& -2 &1 &0 \\2 &-1 &0 &1 \end{smallmatrix} \right ]-(1,-1,0,0)

=(0,0,0,0)-(1,-1,0,0)=(-1,1,0,0)

 \sigma _{2} =1>0,由定理2可知 此线性规划无最优解。

算法步骤:

步骤1:找到初始可行基矩阵 B ,解 Bx_{B}=b ,得到 x_{B}=B^{-1}b=\bar{b},令 x_{m}=0,确定初始基本可行解,计算目标函数 f=c_{B}x_{B}

步骤2:求单纯性乘子 w,解 wB=c_{B},得到 w=c_{B}B^{-1},对于所有的非基变量,计算判别数(z_{j}-c_{j})=wp_{j}-c_{j},令 (z_{k}-c_{k})=max(z_{j}-c_{j}),j\in R^{n},若(z_{k}-c_{k})\leq 0,则对于所有非基变量 (z_{j}-c_{j})\leq 0,对于基变量的判别数总为零,该基本可行解是最优解;否则,转步骤3;

步骤3:解 By_{k}=p_{k},得到 y_{k}=B^{-1}p_{k},若 y_{k}\leq 0,则停止运算,问题不存在有限最优解;否则,转步骤4;

步骤4:确定下标 r ,\frac{\bar{b}_{r}}{y_{rk}}={min{\frac{\bar{b}_{i}}{y_{ik}}}|y_{ik}>0}x_{Br} 为离基变量,x_{k}为进基变量,用 p_{k} 替换 p_{B},得到新的矩阵 B,转步骤1。

例题分析:

例题:利用单纯形法求解下列问题:

\left\{\begin{matrix} min-4x_{1}-x_{2}\\ s.t. -x_{1}+2x_{2}\leq 4\\ 2x_{1}+3x_{2}\leq 12\\x_{1}-x_{2}\leq 3 \\ x_{1},x_{2}\geq 0 \end{matrix}\right.

解:将约束条件化为标准型:

\left\{\begin{matrix} -x_{1}+2x_{2}+x_{3}= 4\\ 2x_{1}+3x_{2}+x_{4}= 12\\x_{1}-x_{2}+x_{5}= 3 \\ x_{1},x_{2},x_{3},x_{4},x_{5}\geq 0 \end{matrix}\right.

A=(p_{1},p_{2},p_{3},p_{4},p_{5})=\bigl(\begin{smallmatrix} -1 &2 &1 &0 & 0\\2 &3 &0 &1 &0 \\1 &-1 &0 &0 &1 \end{smallmatrix}\bigr)b=\bigl(\begin{smallmatrix} 4\\ 12\\ 3 \end{smallmatrix}\bigr)

第一次迭代:

B=(p_{3},p_{4},p_{5})=\left [ \begin{smallmatrix} 1 &0 &0 \\ 0 & 1 & 0\\ 0 & 0 & 1 \end{smallmatrix} \right ]B^{-1}=\left [ \begin{smallmatrix} 1 &0 &0 \\ 0 & 1 & 0\\ 0 & 0 & 1 \end{smallmatrix} \right ]

x_{B}=B^{-1}b=\bigl(\begin{smallmatrix} 4\\ 12\\ 3 \end{smallmatrix}\bigr)x_{N}=\binom{x_{1}}{x_{2}}=\binom{0}{0}

f_{1}=c_{B}x_{B}=(0,0,0)(4,12,3)^{T}=0

w=c_{B}B^{-1}=(0,0,0)

计算检验数:

\left\{\begin{matrix} (z_{1}-c_{1})=wp_{1}-c_{1}=(0,0,0)(-1,2,1)^{T}-(-4)=4\\(z_{2}-c_{2})=wp_{2}-c_{2}=(0,0,0)(2,3,-1)^{T}-(-1)=1 \end{matrix}\right.

确定进基变量:又知道对应基变量的判别数均为零,因此最大判别数是 z_{1}-c_{1}=4,下标为1,x_{1}为进基变量;

确定离基变量:

y_{1}=B^{-1}p_{1}=\left [ \begin{smallmatrix} 1 &0 &0 \\ 0 & 1 & 0\\ 0 & 0 & 1 \end{smallmatrix} \right ]\left [ \begin{smallmatrix} -1 \\2 \\1 \end{smallmatrix}\right ]=\left [ \begin{smallmatrix} -1 \\2 \\1 \end{smallmatrix}\right ],\bar{b}=B^{-1}b=\bigl(\begin{smallmatrix} 4\\ 12\\ 3 \end{smallmatrix}\bigr)

确定下标:

\frac{\bar{b}_{r}}{y_{r1}}={min{\frac{\bar{b}_{i}}{y_{i1}}}|y_{i1}>0}=min[\frac{12}{2},\frac{3}{1}]=\frac{3}{1}

\Rightarrow r=3

x_{B} 中第三个分量 x_{5} 为离基变量,用 p_{1} 替换 p_{5} ,得到新基,进行下一次迭代。

第二次迭代:

B=(p_{3},p_{4},p_{1})=\left [ \begin{smallmatrix} 1 &0 &-1 \\ 0 & 1 & 2\\ 0 & 0 & 1 \end{smallmatrix} \right ]B^{-1}=\left [ \begin{smallmatrix} 1 &0 &1 \\ 0 & 1 &-2\\ 0 & 0 & 1 \end{smallmatrix} \right ]

x_{B}=B^{-1}b=\bigl(\begin{smallmatrix} 7\\ 6\\ 3 \end{smallmatrix}\bigr)x_{N}=\binom{x_{2}}{x_{5}}=\binom{0}{0}

f_{2}=c_{B}x_{B}=(0,0,-4)(7,6,3)^{T}=-12

w=c_{B}B^{-1}=(0,0,-4)

计算检验数:

\left\{\begin{matrix} (z_{2}-c_{2})=wp_{2}-c_{2}=(0,0,-4)(2,3,-1)^{T}-(-1)=5\\(z_{5}-c_{5})=wp_{5}-c_{5}=(0,0,-4)(0,0,1)^{T}-(0)=-4 \end{matrix}\right.

确定进基变量:又知道对应基变量的判别数均为零,因此最大判别数是 z_{2}-c_{2}=5,下标为2,x_{2}为进基变量;

确定离基变量:

y_{2}=B^{-1}p_{2}=\left [ \begin{smallmatrix} 1 &0 &1 \\ 0 & 1 &-2\\ 0 & 0 & 1 \end{smallmatrix} \right ]\left [ \begin{smallmatrix} 2 \\3 \\-1 \end{smallmatrix}\right ]=\left [ \begin{smallmatrix} 1 \\5 \\-1 \end{smallmatrix}\right ],\bar{b}=B^{-1}b=\bigl(\begin{smallmatrix} 7\\ 6\\ 3 \end{smallmatrix}\bigr)

确定下标:

\frac{\bar{b}_{r}}{y_{r2}}={min{\frac{\bar{b}_{i}}{y_{i2}}}|y_{i2}>0}=min[\frac{7}{1},\frac{6}{5}]=\frac{6}{5}

\Rightarrow r=2

x_{B} 中第二个分量 x_{4} 为离基变量,用 p_{2} 替换 p_{4} ,得到新基,进行下一次迭代。

第三次迭代:

B=(p_{3},p_{2},p_{1})=\left [ \begin{smallmatrix} 1 &2 &-1 \\ 0 & 3 & 2\\ 0 & -1 & 1 \end{smallmatrix} \right ]B^{-1}=\left [ \begin{smallmatrix} 1 &-\frac{1}{5} &\frac{7}{5} \\ 0 & \frac{1}{5} & -\frac{2}{5}\\ 0 & \frac{1}{5} & \frac{3}{5} \end{smallmatrix} \right ]

x_{B}=B^{-1}b=\bigl(\begin{smallmatrix} \frac{29}{5}\\ \frac{6}{5}\\ \frac{21}{5} \end{smallmatrix}\bigr)x_{N}=\binom{x_{4}}{x_{5}}=\binom{0}{0}

f_{3}=c_{B}x_{B}=(0,-1,4)\bigl(\begin{smallmatrix} \frac{29}{5}\\ \frac{6}{5}\\ \frac{21}{5} \end{smallmatrix}\bigr)=-18

w=c_{B}B^{-1}=(0,-1,-2)

计算检验数:

\left\{\begin{matrix} (z_{4}-c_{4})=wp_{4}-c_{4}=(0,-1,-2)(0,1,0)^{T}-(0)=-1\\(z_{5}-c_{5})=wp_{5}-c_{5}=(0,-1,-2)(0,0,1)^{T}-(0)=-2 \end{matrix}\right.

确定进基变量:又知道对应基变量的判别数均为零,且检验数小于零,故得到最优解。

x= (x_{1},x_{2},x_{3},x_{4},x_{5})=(\frac{21}{5},\frac{6}{5},\frac{29}{5},0,0)

f_{min}=-18

单纯形表法:

单纯形表是通过表格的形式,按照行列式的变换规则,运算得到最优解,原理与单纯形法一致,但是书写起来更为便捷。并严格按照上文给出的定理1,判断是否为最优解。

下面依然以一道例题来解释单纯形表的运算过程:

例题分析:

可以对比得到,单纯形表法简洁不少!

Bland规则:

针对退化情况(基循环的处理),我们可以采取两个规则:

规则一:进基变量的选择

由 r=min\begin{Bmatrix} j|\pi _{j}> 0 \end{Bmatrix} 确定 x_{r} 为进基变量

规则二:离基变量的选择(和Dantzig离基规则相同)

由 j_{s}=min \begin{Bmatrix} j_{k}|\frac{\bar{b}_{k0}}{b_{kr}}{min_{b_{ir}>0}\frac{\bar{b}_{i0}}{b_{ir}}} \end{Bmatrix} 确定 x_{r} 为进基变量

从理论上看,在单纯形算法步骤中采用 Bland 规则,可以使算法在有限步结束。

从计算实践来看,Dantzig 规则效果更好,迭代次数少。

对于线性规则问题,先按照 Dantzig 规则进行单纯形迭代,万一遇到基的循环,在采用 Bland 规则。

(行文中若有纰漏,希望大家指正)

  • 5
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
好的,以下是一个线性规划问题的例题单纯形法的求解步骤: 假设有一家化工公司要生产两种产品 A 和 B。生产一个单位的 A 需要 1 个单位的原料 X 和 2 个单位的原料 Y;生产一个单位的 B 需要 2 个单位的原料 X 和 1 个单位的原料 Y。公司现在有 100 个单位的 X 和 80 个单位的 Y,而且 A 和 B 的销售利润分别是 5 和 4。问这家公司应该如何安排生产才能最大化利润? 我们可以用线性规划模型来描述这个问题: 目标函数:Maximize 5A + 4B 约束条件: A + 2B <= 100 (原料 X 的限制) 2A + B <= 80 (原料 Y 的限制) A, B >= 0 (非负性约束) 接下来,我们可以用单纯形法来求解这个问题。 首先,将约束条件转化为标准形式: A + 2B + S1 = 100 2A + B + S2 = 80 A, B, S1, S2 >= 0 其中,S1 和 S2 是人造变量,它们的系数都为 1。 然后,构造初始单纯形: | 基变量 | 非基变量 | 系数 | 系数 | 系数 | 右端常数 | |--------|----------|------|------|------|----------| | S1 | A | 1 | 2 | 0 | 100 | | S2 | B | 2 | 1 | 0 | 80 | | Z | | -5 | -4 | 0 | 0 | 其中,Z 示目标函数,基变量是 S1 和 S2,非基变量是 A 和 B。 接下来,我们要进行迭代,找到最优解。 第一步,选择进入变量。根据单纯形法的规则,我们需要选择目标函数系数最小的非基变量作为进入变量。在这个例子中,B 的系数最小,因此选择 B 作为进入变量。 第二步,选择离开变量。根据单纯形法的规则,我们需要选择进入变量系数为正的约束条件中,右端常数最小的那个约束条件对应的基变量作为离开变量。在这个例子中,第二个约束条件对应的基变量 S2 的右端常数最小,因此选择 S2 作为离开变量。 第三步,进行行变换。根据单纯形法的规则,我们需要将离开变量所在的行变换为新的基变量。具体来说,我们需要将 S2 所在的行除以 S2 的系数,并让 S2 的系数变为 1。其他行需要进行相应的调整,使得非基变量的系数都为 0。行变换后,新的单纯形如下: | 基变量 | 非基变量 | 系数 | 系数 | 系数 | 右端常数 | |--------|----------|------|-------|------|----------| | S1 | A | 4/5 | 3/5 | 0 | 60 | | B | S2 | 2/5 | 1/5 | 0 | 40 | | Z | | -2 | -11/5 | 0 | -160 | 第四步,检查最优性。如果目标函数系数都为负数,那么当前解就是最优解。否则,返回第一步继续迭代。 在这个例子中,目标函数系数不全为负数,因此需要继续迭代。重复上述步骤,选择 A 作为进入变量,S1 作为离开变量,进行行变换,得到新的单纯形: | 基变量 | 非基变量 | 系数 | 系数 | 系数 | 右端常数 | |--------|----------|------|-------|------|----------| | A | S1 | 5/4 | 1/4 | 0 | 25 | | B | S2 | 1/4 | -1/4 | 0 | 15 | | Z | | -9/4 | -7/4 | 0 | -125 | 此时,目标函数系数都为负数,因此当前解就是最优解。最优解是在 A = 25,B = 15 时取得的,此时目标函数值为 5*25 + 4*15 = 155,即这家公司应该生产 25 个单位的 A 和 15 个单位的 B,才能最大化利润。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

背对人潮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值