单纯形算法 Simplex Algorithm (一)

单纯形算法是求解线性规划问题最经典的方法,在许多介绍该算法的文章中会使用单纯形表(Tableau)辅助计算,而对Tableau进行的操作本质上都是在对松弛化的线性规划模型进行矩阵运算,从几何表现上看,就是在线性规划问题的定义域上的顶点中迭代搜索,寻找使得目标函数最优的那个顶点。使用Tableau计算虽然很高效,不过对于理解算法原理帮助不大;单纯形算法的原理是基于线性代数的,如果要彻底理解,还是需要很多基础的矩阵知识的。这篇文章里我只是记录和单纯形算法相关的线性代数知识,加深对该算法中一些术语的记忆和理解;算法里更加具体的线代原理则跳过,那已经超过了我的认知水平,在后续文章中会记录更容易理解的算法计算过程。

线性规划松弛形式

在应用算法前,必须对原始的线性规划模型进行预处理,先转换成标准线性规划模型,再转换成松弛线性规划模型。标准线性规划模型的形式:
m a x Z = c T x s . t . A x ≤ b x ≥ 0 \begin{aligned} max\quad& Z=\boldsymbol{c}^T\boldsymbol{x}\\ s.t.\quad& \boldsymbol{A}\boldsymbol{x}\leq \boldsymbol{b} \\ & \boldsymbol{x} \geq0 \\ \end{aligned} maxs.t.Z=cTxAxbx0
具体形式:
m a x Z = c 1 x 1 + c 2 x 2 + . . . + c n x n s . t . [ a 11 a 12 . . . a 1 n a 21 a 22 . . . a 2 n . . . . a m 1 a m 2 . . . a m n ] [ x 1 x 2 . x n ] ≤ [ b 1 b 2 . b m ] x ≥ 0 \begin{aligned} max\quad& Z=c_1x_1+c_2x_2+...+c_nx_n\\ s.t.\quad& \begin{bmatrix} a_{11} & a_{12} & ... & a_{1n} \\ a_{21} & a_{22} & ... & a_{2n} \\ . & . & . & . \\ a_{m1} & a_{m2} & ... & a_{mn} \\ \end{bmatrix} \begin{bmatrix} x_1 \\ x_2 \\ . \\ x_n\\ \end{bmatrix}\leq \begin{bmatrix} b_1 \\ b_2 \\ . \\ b_m\\ \end{bmatrix}\\ & \boldsymbol{x} \geq0 \\ \end{aligned} maxs.t.Z=c1x1+c2x2+...+cnxna11a21.am1a12a22.am2..........a1na2n.amnx1x2.xnb1b2.bmx0
如果将一个原始的线性规划模型标准化? 如果目标是最小化,则乘上-1变成最大化目标(当然标准模型的目标函数也可以是最小化,两者本质是相同的,只不过算法的某些细节上互为相反);如果约束是 ≥ \geq ,两边同乘-1;如果某个变量 x i < 0 x_i<0 xi<0,那么定义 x i = x ′ − x ′ ′ x_i=x'-x'' xi=xx,并且 x ′ ≥ 0 , x ′ ′ ≥ 0 x'\geq0,x''\geq0 x0,x0,将原变量替换成 x ′ x' x x ′ ′ x'' x

然后将标准形式转换成松弛形式,其实就是给每个约束不等式上引入松弛变量 s s s,将所有的约束不等式转换成等式:
m a x Z = c T x ′ s . t . A ′ x ′ = b x ′ ≥ 0 \begin{aligned} max\quad& Z=\boldsymbol{c}^T\boldsymbol{x'}\\ s.t.\quad& \boldsymbol{A'}\boldsymbol{x'}= \boldsymbol{b} \\ & \boldsymbol{x'} \geq0 \\ \end{aligned} maxs.t.Z=cTxAx=bx0
即:
m a x Z = c 1 x 1 + c 2 x 2 + . . . + c n x n s . t . a 11 x 1 + a 12 x 2 + . . . + a 1 n x n + s 1 = b 1 a 21 x 1 + a 22 x 2 + . . . + a 2 n x n + s 2 = b 2 . . . a m 1 x 1 + a m 2 x 2 + . . . + a m n x n + s m = b m x 1 , x 2 , . . . , x n , s 1 , . . . , s m ≥ 0 \begin{aligned} max\quad& Z=c_1x_1+c_2x_2+...+c_nx_n\\ s.t.\quad& a_{11}x_{1}+a_{12}x_{2}+...+a_{1n}x_{n}+s_1=b_1 \\ & a_{21}x_{1}+a_{22}x_{2}+...+a_{2n}x_{n}+s_2=b_2 \\ & {...} \\ & a_{m1}x_{1}+a_{m2}x_{2}+...+a_{mn}x_{n}+s_m=b_m \\ & x_1,x_2,...,x_n,s_1,...,s_m \geq 0 \end{aligned} maxs.t.Z=c1x1+c2x2+...+cnxn<

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值