AOR2 单纯形法原理推导

1 线性规划标准形式

max z = c T x s.t. A x = b , x > 0 \text{max} \quad z=c^Tx\\\text{s.t.}\quad Ax=b, x>0 maxz=cTxs.t.Ax=b,x>0

标准形式的要求:

  • 所有x>=0
  • 目标函数为max
  • b>=0

转换方法:

情况方法
x<=0使用-x作为新变量
x无约束使用x=x1-x2作为新变量, x1,x2>0
目标函数为min目标函数乘以-1
b<=0该约束条件乘以-1

2 单纯性法

2.1 求解思路

求解思路基本为:

求一个解=> 验证是否是最优解 => 如果不是👉求下一个更优解|如果是👉结束。

2.2 构造初始解

由于系数矩阵A(m*n)不是满秩,因此满足限制的解可以写为:
( x 1 , x 2 , . . . x m , x m + 1 , . . . x n ) (x_1,x_2,...x_m,x_{m+1},...x_{n}) (x1,x2,...xm,xm+1,...xn),为了构造一个解,将后面的n-m个变量全部取0, 然后带入Ax=b,解出一个解。

即是基可行解: ( x 1 , x 2 , . . . x m − 1 , 0 , 0 , . . , 0 ) (x_1,x_2,...x_{m-1},0,0,..,0) (x1,x2,...xm1,0,0,..,0),前面m个称为基变量,后面n-m个称为非基变量。

由于目标函数只是由若干个坐标x线性组合的,如果这些坐标刚好是后面n-m个x组成,那么刚好就取到了最值。

如果不是,则说明基可行解不是最优的,需要通过基可行解求另一个可行解进行验证。

2.3 构造下一个解

下面说明如何从一个可行解寻找下一个可行解进行改进:

由于A是由n个列向量组成,而向量维度为m<n, 因此它们线性相关。

不妨用前m个列向量P来表示第j个列向量:

P j = k 1 P 1 + . . . k m P m P_j=k_1P_1+...k_mP_m Pj=k1P1+...kmPm

由于后n-m个x取0, 原方程表示为: x 1 P 1 + . . x m P m = b x_1P_1+..x_m P_m=b x1P1+..xmPm=b

θ ( P j − ( k 1 P 1 + . . . . k m P m ) ) \theta(P_j-(k_1P_1+....k_mP_m)) θ(Pj(k1P1+....kmPm))加上上式,整理为:

( x 1 − θ k 1 ) P 1 + . . . ( x m − θ k m ) P m + θ P j = b (x_1-\theta k_1)P_1+...(x_m-\theta k_m)P_m+\theta P_j=b (x1θk1)P1+...(xmθkm)Pm+θPj=b

因此得到一个解: ( x 1 − θ k 1 , x 2 − θ k 2 , . . , 0 , 0 , θ , 0 , . . , 0 ) (x_1-\theta k_1,x_2-\theta k_2,..,0,0,\theta,0,..,0) (x1θk1,x2θk2,..,0,0,θ,0,..,0)

当某个 θ = x l / k l \theta=x_l/k_l θ=xl/kl时,xl相当于和xj交换了位置,因此从一个基可行解出发得到了另一个基可行解。

2.4 判断最优

对于目标函数: z = c 0 + c 1 x 1 + . . c n x n z=c_0+c_1x_1+..c_nx_n z=c0+c1x1+..cnxn, 由于x最小取0,如果c<0, 那么x取到了最优解。

因此只需要满足:

1.出现在目标函数中的x全部取0,未出现的没有限制

2.目标函数的系数全部小于0

即取到了最优解,总结为:目标函数中非基变量系数为正,基变量系数为0。

2.3 单纯形法和单纯形表

构造单纯形表:

x 1 x_1 x1 x 2 x_2 x2 x m − 1 x_{m-1} xm1 x m x_{m} xm x m + 1 x_{m+1} xm+1 x n x_n xn
0 \color{#FF7D00}{0} 0 0 \color{#FF7D00}{0} 0 . . . \color{#FF7D00}{...} ... 0 \color{#FF7D00}{0} 0 . . . \color{#FF7D00}{...} ... c m + 1 \color{#FF7D00}{c_{m+1}} cm+1 . . . \color{#FF7D00}{...} ... c n \color{#FF7D00}{c_n} cn z \color{#FF7D00}{z} z
x 1 \color{#FF0000}x_1 x1 1 \color{#00FF00}{1} 1 0 \color{#00FF00}{0} 0 . . . \color{#00FF00}{...} ... 0 \color{#00FF00}{0} 0 0 \color{#00FF00}{0} 0 k 11 \color{#00FF00}{k_{11}} k11 . . . \color{#00FF00}{...} ... k 1 n \color{#00FF00}{k_{1n}} k1n b 1 \color{#FF00FF}{b_1} b1
x 2 \color{#FF0000}x_2 x2 0 \color{#00FF00}{0} 0 1 \color{#00FF00}{1} 1 . . . \color{#00FF00}{...} ... 0 \color{#00FF00}{0} 0 0 \color{#00FF00}{0} 0 k 21 \color{#00FF00}{k_{21}} k21 . . . \color{#00FF00}{...} ... k 2 n \color{#00FF00}{k_{2n}} k2n b 2 \color{#FF00FF}{b_2} b2
. . . \color{#FF0000}... ... . . . \color{#00FF00}{...} ... . . . \color{#00FF00}{...} ... . . . \color{#00FF00}{...} ... . . . \color{#00FF00}{...} ... . . . \color{#00FF00}{...} ... . . \color{#00FF00}{..} .. . . . \color{#00FF00}{...} ... . . . \color{#00FF00}{...} ... . . . \color{#FF00FF}{...} ...
x m \color{#FF0000}x_m xm 0 \color{#00FF00}{0} 0 0 \color{#00FF00}{0} 0 . . . \color{#00FF00}{...} ... 0 \color{#00FF00}{0} 0 1 \color{#00FF00}{1} 1 k m 1 \color{#00FF00}{k_{m1}} km1 . . . \color{#00FF00}{...} ... k m 1 \color{#00FF00}{k_{m1}} km1 b m \color{#FF00FF}{b_m} bm

红色:基变量
橙色:目标函数参数,只有非基变量前面是非0
绿色:系数矩阵,基变量为单位阵
紫色:方程的常数项

0.将问题转为标准形式

注意b必须全部大于0,不然需要乘以-1

1.初始时,如果系数矩阵是m*n,则找到m个变量作为基变量,使得它们系数矩阵为单位阵,然后把系数填入单纯形表中

注意,目标函数中基变量前面系数必须化为0

一般来说,添加若干个变量使得不等号变为等号过程,会引入系数为1的变量,选这几个变量作为最开始的基变量最好。

2.如果目标函数系数没有负项,说明达到目的,结束。

如果不是,则挑选一个最大的作为入基变量。

3.对于每一行,计算 b k l \frac{b}{k_{l}} klb,即b除以该行入基变量对应的列的值。

选择值最小的作为入基变量`。注意必须选择kl是正的,如果是负值,则把kl化为1的同时,b变为了负值,问题不可行。

4.对于下一次迭代

入基变量行除以系数,使得入基变量系数为1.

其他行分别把入基向量所在列化为0,包括目标函数的那行。

5.重复2,3,4,5步


一个例子:

min ⁡ z = − x 2 + 2 x 3 \min z=-x_2+2x_3 minz=x2+2x3

s.t. x 1 − 2 x 2 + x 3 = 2 x_1-2x_2+x_3=2 x12x2+x3=2
x 2 − 3 x 3 + x 4 = 1 x_2-3x_3+x_4=1 x23x3+x4=1
x 2 − x 3 + x 5 = 2 x_2-x_3+x_5=2 x2x3+x5=2

x 1 , x 2 , x 3 , x 4 , x 5 ≥ 0 x_1,x_2,x_3,x_4,x_5\ge 0 x1,x2,x3,x4,x50

1.发现目标函数不满足条件,化为标准形式

max ⁡ z = x 2 − 2 x 3 \max z=x_2-2x_3 maxz=x22x3

2.构造初始可行解,由于1,4,5没有在目标函数中出现,所以选择它们(理论上可以任意选择,只需要把系数化为单位阵即可):

x1x2x3x4x5b
01-2000
x11-21002
x401-3101
x501-1012

发现1,4,5系数已经是单位阵了, 目标函数中1,4,5系数化为0(这步省略了)

3.选择入基变量:x2(因为目标函数中系数是正的)

选择出基变量(必须选择一个系数是正的),且b/a最小的, 因此选择x4

(1)最左边把x1换成x4,
(2)x2的系数变为1
(3)x1,x5在x2处的系数化为0
(3)x2目标函数系数化为0

x1x2x3x4x5b
001-100
x110-5204
x201-3101
x500[5]-111

发现x3系数为正,因此x3入基,x5出基(只有x5系数是正的)

x1x2x3x4x5b
000-4/5-1/50
x1100115
x2010-2/53/58/5
x3001-1/51/51/5

发现可行,因此解为:

x1=5,x2=8/5,x3=1/5, z=-8/5+2/5=-6/5

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值