最优化:单纯形法(二)

本文深入探讨了线性规划中的二段法和单纯形法。通过实例解释了单纯形法的迭代过程,展示了如何从初始可行解逐步优化目标函数,找到最优解。同时,提到了算法的初始化阶段,如何构造并解决辅助问题以获取初始可行解。此外,还讨论了算法的终止条件和存在的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在本文中,我们着重具体地来介绍一下二段法(The 2-Phase Method)和单纯形法(the Simplex Algorithm)两种方法。

最优化:单纯形法(一) 中,我们提出了二段法(The 2-Phase Method)和单纯形法(the Simplex Algorithm)。我们在上一篇文章中,是可以知道,任意的LP,符合Bland’s Rule便可以利用二段法求解,得到最优解或者是Unbounded的结果。
在本文中,我们着重具体地来介绍一下这两种方法。

Simplex

单纯形法说难不难,不如利用一个例子来描述。例如,对于一个以下的LP:
max ⁡ ( 0 1 3 0 ) ⏟ c x  s.t.  ( 1 1 2 0 0 1 1 1 ) ⏟ A x = ( 2 5 ) ⏟ b x 1 , x 2 , x 3 , x 4 ≥ 0 \begin{array}{ll}\max & \underbrace{\left(\begin{array}{llll}0 & 1 & 3 & 0\end{array}\right)}_{c} x \\\text { s.t. } & \underbrace{\left(\begin{array}{llll}1 & 1 & 2 & 0 \\0 & 1 & 1 & 1\end{array}\right)}_{A} x=\underbrace{\left(\begin{array}{l}2 \\5\end{array}\right)}_{b} \\& x_{1}, x_{2}, x_{3}, x_{4} \geq 0\end{array} max s.t. c (0130)xA (10112101)x=b (25)x1,x2,x3,x40

通过在最优化:单纯形法(一) 的叙述,我们很容易便可以确定,这个LP的基是 B = { 1 , 4 } B=\{1,4\} B={1,4}。对于这个基,有一个基解:
x = { 2 , 0 , 0 , 5 } x=\{2,0,0,5\} x={2,0,0,5}

但是,怎么去得到更好的可行解呢?
假定这个更好的可行解为: x = { x 1 , x 2 , x 3 , x 4 } x=\{x_1,x_2,x_3,x_4\} x={x1,x2,x3,x4}。首先,我们可以固定 x 3 = 0 x_3=0 x3=0,使得 x 2 = t x_2=t x2=t
这个可行解一定会满足 A x = b Ax=b Ax=b的限制条件,因此:
( 2 5 ) = ( 1 1 2 0 0 1 1 1 ) x = x 1 ( 1 0 ) + x 2 ( 1 1 ) + x 3 ( 2 1 ) + x 4 ( 0 1 ) = ( x 1 0 ) + t ( 1 1 ) + 0 ( 2 1 ) + ( 0 x 4 ) = t ( 1 1 ) + ( x 1 x 4 ) ( ∗ ) \begin{aligned} \left(\begin{array}{l} 2 \\ 5 \end{array}\right) &=\left(\begin{array}{llll} 1 & 1 & 2 & 0 \\ 0 & 1 & 1 & 1 \end{array}\right) x \\ &=x_{1}\left(\begin{array}{l} 1 \\ 0 \end{array}\right)+x_{2}\left(\begin{array}{l} 1 \\ 1 \end{array}\right)+x_{3}\left(\begin{array}{l} 2 \\ 1 \end{array}\right)+x_{4}\left(\begin{array}{l} 0 \\ 1 \end{array}\right) \\ &=\left(\begin{array}{c} x_{1} \\ 0 \end{array}\right)+t\left(\begin{array}{l} 1 \\ 1 \end{array}\right)+0\left(\begin{array}{l} 2 \\ 1 \end{array}\right)+\left(\begin{array}{c} 0 \\ x_{4} \end{array}\right) \\ &=t\left(\begin{array}{l} 1 \\ 1 \end{array}\right)+\left(\begin{array}{l} x_{1} \\ x_{4} \end{array}\right) (*) \end{aligned} (25)=(10112101)x=x1(10)+x2(11)+x3(21)+x4(01)=(x10)+t(11)+0(21)+(0x4)=t(11)+(x1x4)()

In short,这个式子总结为:
x B = b − t A k x_B = b-tA_k xB=btAk。其中, x B x_B xB x x x的基分量, x B = { x B 1 , . . . , x B n } x_B =\{x_{B1},...,x_{Bn}\} xB={xB1,...,xBn}
A k A_k Ak为矩阵 A A A的第 k k k列。这个 k k kentering basis。也就是上面的 x 2 x_2 x2的下标 2 2 2

我们改写上面的结果,可以得到下面的式 ( ∗ ) (*) ()
( x 1 x 4 ) ⏟ x B = ( 2 5 ) ⏟ b − t ( 1 1 ) ⏟ A 2 ( ∗ ) \underbrace{\left(\begin{array}{l}x_{1} \\x_{4}\end{array}\right)}_{x_{B}}=\underbrace{\left(\begin{array}{l}2 \\5\end{array}\right)}_{b}-t \underbrace{\left(\begin{array}{l}1 \\1\end{array}\right)}_{A_{2}}(*) xB (x1x4)=b (25)tA2 (11)()

我们可以解这个式 ( ∗ ) (*) ()。而且,要使得 x 1 x_1 x1 x 4 x_4 x4同时满足非负的条件:
x 1 = 2 − t ≥ 0 ⟶ t ≤ 2 x 4 = 5 − t ≥ 0 ⟶ t ≤ 5 \begin{array}{l} x_{1}=2-t \geq 0 \quad \longrightarrow \quad t \leq {2}\\ x_{4}=5-t \geq 0 \quad \longrightarrow \quad t \leq 5 \end{array} x1=2t0t2x4=5t0t5

于是,优化这个LP,我们要使 t t t取所能取的最大的值。因此, t = 2 t=2 t=2
因此,我们便可以得到一个新解: x = { 0 , 2 , 0 , 3 } x=\{0,2,0,3\} x={0,2,0,3}。这个新解比之前的解会使得目标函数再大一些。之后再将LP改写成Canonical form;单纯形法就是迭代多次,直至找到最优的解。

同时,我们发现,这个LP的解从 x = { 2 , 0 , 0 , 5 } x=\{2,0,0,5\} x={2,0,0,5} x ′ = { 0 , 2 , 0 , 3 } x'=\{0,2,0,3\} x={0,2,0,3},下标为1的分量退出( x 1 ′ = 0 x_1'=0 x1=0),而下标为2的分量进入了解,使得 x 2 ′ ≠ 0 x_2'\neq0 x2=0。我们称下标1为leaving bias,称下标2为entering bias。基从 B = { 1 , 4 } B=\{1,4\} B={1,4}变成了 B = { 2 , 4 } B=\{2,4\} B={2,4}。因此,我们也可以认为,单纯形法其实就是找到一个最佳的基。(个人理解,不一定对)

值得注意的问题

问题也是存在的:

  1. 算法需要一个初始解向量,那我们如何得到一个的初始的可行解向量呢?

  2. 我们如何保证算法是可以迭代到最终退出的结果呢?即:需要一些新规则来保证算法最终会退出。

初始化

前面说到了,我们需要一个初始的可行解(或者说是可行基,其实是同样的意思)。其实这个可行解也可以利用单纯形法求得。首先,可行解需要同时满足LP的两个限制条件:
A x = b x ≥ 0 Ax=b \\ x \geq 0 Ax=bx0
还是继续给出一个例子:

max ⁡ ( 1 2 − 1 3 ) ⏟ c x  s.t.  ( 1 5 2 1 − 2 − 9 0 3 ) ⏟ A x = ( 7 − 13 ) ⏟ b x 1 , x 2 , x 3 , x 4 ≥ 0 \begin{array}{ll}\max & \underbrace{\left(\begin{array}{llll}1 & 2 & -1 & 3\end{array}\right)}_{c} x \\\text { s.t. } & \underbrace{\left(\begin{array}{llll}1 & 5 & 2 & 1 \\-2 & -9 & 0 & 3\end{array}\right)}_{A} x=\underbrace{\left(\begin{array}{c}7 \\-13\end{array}\right)}_{b} \\& x_{1}, x_{2}, x_{3}, x_{4} \geq 0\end{array} max s.t. c (1213)xA (12592013)x=b (713)x1,x2,x3,x40

可行解不会和Objective function 有联系:毕竟,我们只要一个可行解嘛。因此,我们只关注上面的限制条件: A x = b Ax=b Ax=b

因此,问题便转化为了:对于这两个限制条件,我们需要找到一个可行解、或者判断无解。这个问题的解只需要follow下面的几个步骤:

A x = b Ax=b Ax=b的右边的常量分量转化为非负

很简单,对于某一个 b i , ( b i < 0 ) b_i,(b_i<0) bi,(bi<0)所对应的一个方程,我们只需要乘于一个 − 1 -1 1,便可以将其转化。
( 1 5 2 1 2 9 0 − 3 ) x = ( 7 13 ) \left(\begin{array}{cccc}1 & 5 & 2 & 1 \\2 & 9 & 0 & -3\end{array}\right) x=\left(\begin{array}{c}7 \\13\end{array}\right) (12592013)x=(713)

构造副问题(Auxiliary Problem)

例如,对于上面的例子,我们构造如下的Auxiliary Problem。

min ⁡ x 5 + x 6 s.t.   ( 1 5 2 1 1 0 2 9 0 − 3 0 1 ) ⏟ A            ∣             I x = ( 7 13 ) x ≥ 0 \min x_5 + x_6 \\\text{s.t.}~~\underbrace{\left(\begin{array}{cccccc}1 & 5 & 2 & 1 & 1 &0 \\2 & 9 & 0 & -3 & 0 & 1\end{array}\right)}_{A~~~~~~~~~~|~~~~~~~~~~~I} x=\left(\begin{array}{c}7 \\13\end{array}\right) \\x \geq 0 minx5+x6s.t.  A                     I (125920131001)x=(713)x0

利用单纯形法,解这个问题

得到结果 ( 2 , 1 , 0 , 0 , 0 , 0 ) ⊤ (2,1,0,0,0,0)^{\top} (2,1,0,0,0,0)。判断出 x 5 = x 6 = 0 x_5=x_6=0 x5=x6=0,从而它是这个问题的可行解。

于是,我们就可以得到满足初始的解。从而进入单纯形算法中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值