单纯形学习笔记

单纯形

一般形式

单纯形有如下形式:
max ⁡ ∑ i = 1 n a i x i ∀ 1 ≤ i ≤ m , ∑ j = 1 n b i , j x j ≤ c i ∀ 1 ≤ i ≤ n , x i ≥ 0 \max \sum_{i=1}^{n} a_ix_i\\ \forall 1\le i\le m,\sum_{j=1}^{n}b_{i,j}x_j\le c_i\\ \forall 1\le i\le n,x_i \ge 0 maxi=1naixi1im,j=1nbi,jxjci1in,xi0
不妨引入 m m m个变量 x n + 1 , … , x n + m x_{n+1},\dots,x_{n+m} xn+1,,xn+m来完成第二个限制,于是变成:
max ⁡ ∑ i = 1 n a i x i ∀ 1 ≤ i ≤ m , x n + i = c i − ∑ j = 1 n b i , j x j ∀ 1 ≤ i ≤ n + m , x i ≥ 0 \max \sum_{i=1}^{n} a_ix_i\\ \forall 1\le i\le m,x_{n+i}=c_i-\sum_{j=1}^{n}b_{i,j}x_j\\ \forall 1\le i\le n+m,x_i \ge 0 maxi=1naixi1im,xn+i=cij=1nbi,jxj1in+m,xi0

基本思想

定义 max ⁡ \max max后面的那 n n n x i x_i xi叫做非基变量,用于表示限制的 m m m x n + i x_{n+i} xn+i叫做基变量。我们发现,其实基变量和非基变量之间是可以互相替换的,定义一个过程 pivot ( N , B ) \text{pivot}(N,B) pivot(N,B)表示将非基变量 x N x_N xN和基变量 x B x_B xB互相替换,可以理解为把下面的方程变形,用 x B x_B xB表示 x N x_N xN,然后把每一条方程以及 max ⁡ \max max中的 x N x_N xN带入替换,这样 x B , x N x_B,x_N xB,xN就交换了身份,当然 max ⁡ \max max中可能会出现常数,不过可以直接提出,这样还是满足那个形式。

这么做的目的是想让所有的 a i ≤ 0 a_i\le0 ai0,且所有的 c i ≥ 0 c_i\ge 0 ci0,这样所有的 x i = 0 x_i=0 xi=0就是最优解了。

关于 pivot \text{pivot} pivot,如下:
pivot(N,B) : x N = c B − ∑ j = 1 ∧ j ≠ N n b B , j x j − x B b B , N \text{pivot(N,B)}:x_N=\frac{c_B-\sum_{j=1 \land j\not =N}^{n}b_{B,j}x_j-x_B}{b_{B,N}} pivot(N,B):xN=bB,NcBj=1j=NnbB,jxjxB

具体内容

不过事情并没有那么简单,有各种情况是要特殊处理的,以及 pivot(N,B) \text{pivot(N,B)} pivot(N,B)中的 N , B N,B N,B怎么选取也还没有解决,上面的都是一个比较好的假设。

操作步骤
如何 pivot \text{pivot} pivot

先来考虑 pivot(N,B) \text{pivot(N,B)} pivot(N,B)。首先 a i ≤ 0 a_i\le 0 ai0 x i x_i xi是不用 pivot \text{pivot} pivot的,因为它已经符合我们的期望,那么挑选出一个 a N > 0 a_N>0 aN>0 x N x_N xN作为非基变量。接着挑选 x B x_B xB,我们找到一个 c i b i , N \frac{c_i}{b_{i,N}} bi,Nci最小的 i i i并且 b i , N > 0 b_{i,N}>0 bi,N>0,这就是对于 x B x_B xB最紧的一个限制,令 B = i B=i B=i,然后进行一次 pivot(N,B) \text{pivot(N,B)} pivot(N,B),观察上面的式子,变换后方程中的常数依然是一个非负值,所以这样的变换也是满足我们对 c i c_i ci的期望的。

当然,有可能存在这样的 N N N,但是没有符合的 B B B,这说明 x N x_N xN可以任取,故答案为 + ∞ +\infin +

如果有 c i < 0 c_i<0 ci<0

如果 ∃ i , c i < 0 \exist i,c_i<0 i,ci<0,那么我们要找一个 j j j使得 b i , j < 0 b_{i,j}<0 bi,j<0,那么进行一次 pivot(j,i) \text{pivot(j,i)} pivot(j,i)就能让 x j x_j xj变成基变量后 c > 0 c>0 c>0;假如找不到那么说明 x i < 0 x_i<0 xi<0,则无解。

对偶形式

假如我们人为的根据上面的形式再构造一个新的线性规划,如下:
min ⁡ ∑ i = 1 m c i y i ∀ 1 ≤ i ≤ n , ∑ j = 1 m b j , i y j ≥ a i ∀ 1 ≤ i ≤ m , y i ≥ 0 \min \sum_{i=1}^{m}c_iy_i\\ \forall 1\le i\le n,\sum_{j=1}^{m}b_{j,i}y_j\ge a_i\\ \forall 1\le i\le m,y_i\ge 0 mini=1mciyi1in,j=1mbj,iyjai1im,yi0
其实就是给上面的每条不等式都配上一个系数 y i y_i yi,然后分别乘上系数后相加,最后再去逼近各项系数 a i a_i ai,有大佬证明了这两个问题是等价的,但是我不会,不过可以感性理解。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值