矩阵表示单纯形法的优点
[ ]
X B1 X S1
,同
时目标函数的系数 C 分为 C B ,分 C B 别对应于基变量和非基变量,并记作 C =( C B ,C N ) 。
a 1,1 ⋯ a 1, n 1 a ⋯ a 2, n 1 系数矩阵表示 A=( N , B)= 2,1 ⋮ ⋱ a m , 1 ⋯ a m ,n 1 C =( c 1, ⋯ , c n , 0, ⋯ , 0 )
( 0)
∑ β i ,m +t P i
i=1
m
。用系
=( x 1, x 2, ⋯ , x m ) 满足约束方程
∑ x (i 0) Pi =b
i=1
m
,于是要找到一个基向
量 P k 使得用其余基变量 ( P 1, ⋯ , P k −1 , P k +1 , ⋯ , P m) 和换入非基变量 P_t 线性表出后,约束方程 还有非负解。显然,当由于新的基向量组可以线性表出 P k ,新基向量组线性无关。 方法:引入参量 θ > 0 用系数方程表示 新的基可行解由 X
x
β l , m+ t
}
x(i0)−θ β i ,m +t i ≠l 即 x = θ i =l
(1) i
{
}
所以找到的 θ
应是
θ = min
i
(
0) x( i
β i ,m +t
∣β i , m+t > 0 =
)
x(l0)
β l , m+ t
用矩阵表示
θ = min
i
(
B−1 bi ( B−1 P j )i
则该问题目标函数无界。 (4)基变化 从直观上选择 σ j > 0 中最大的对应的非基变量 σ t= max ( σ > 0 ) 进行替换,换入基变量。
j
换出非基变量的确定,要保证换出后的基变量线性无关,并有非负基可行解。 将选中的的非基向量 P m+ t 用基向量组 B=( P 1, P 2, ⋯ , P m ) 表示: P m+ t= 数方程表示初始基可行解为 X
∣( B P j )i > 0 =
−1
)
( B−1 b )i ( B−1 P j)i
这里矩阵表示的优势不是很明显,因为计算时还是要把矩阵的每一列单独拿出来计算。 (5)迭代 把选中的非基变量换入需要把新的系数矩阵化为单位阵,通过行变换作用在增广矩阵上获得。而这 一步中矩阵表示的优势就很明显,更能看出变换的本质,免去了行变换中一些繁琐的工作。
[ ]
而新的约束矩阵,基可行解,目标函数值,检验数都可以由此算出来了
矩阵表示单纯形法的优点
线性代数小论文 2011010250 吴昊亮 在阅读线性规划相关书籍的过程中,我发现单纯形法是普遍介绍的求解线性规划最优解的方法,而 在一些深入的书籍中线性规划的矩阵描述方法被介绍。最初,我感觉矩阵的描述方法太抽象不太容易被 接受,但是运用矩阵描述的的单纯性法语言简洁,而且可以简化一些求解过程中的步骤,避免重复计算。 在多数书籍中,单纯形法的两种描述方法总是被先后分开说明,以便于读者接受。下面通过自然表 述的单纯形法和矩阵描述的单纯形法的对比,以加深对单纯形法的理解,展现矩阵描述法简单和高效的 优点。 首先是描述一个线性规划问题,统一符号: 加入 m 个人工变量 目标方程 系数方程表示 max z =c 1 x1 +⋯ c n x n . 矩阵表示 约束方程
通过检验数可以检验解的存在性和最优性 1.最优解判定 :所有 σ j≤ 0 ,则解为最优解;
−1 −1
2.无穷多最优解判定 :所有 σ j≤ 0 且存在 σ ( m +t )=0 ,则存在无穷多最优解 3.无界解判定 :存在 σ ( m +t )> 0 且非基向量组 P( m +t) 的所有分量都非负 a i , m +t≤ 0
max z =CX
a 1,1 x1 +⋯+ a 1, n x n =b1 系数矩阵表示 a2,1 x 1 +⋯+ a 2, n x n=b2 ⋮ a m , 1 x 1+⋯+ a m , n x n=b m
矩阵表示
AX ≤b X s=( x s1 , x s2 , ⋯ , x sm )T x s1 x s2 ⋱ x sm + a m , 1 x 1 +⋯+ a m ,n x n= bm + a 1,1 x 1+⋯+ a 1, n x n=b 1 + a 2,1 x 1+⋯+ a 2, n x n= b2
[
]
经过迭代运算,在基矩阵中可能还存在松弛变量或全无松弛变量。为了阐述方便起见,设
X S=
[ ]
X S1 X S2
; X B=
[ ]
X B1 X S1
; X N=
[ ]
X N1 X S2
; N = [ N 1 S 2 ] ; B= [ N 2 S 1 ]
B,N,S 分别表示对应的基变量、非基变量、松弛变量的系数矩阵。这时线性规划问题可以表示为
( 0)
∑x
i=1
m
( 0) i
Pi +θ P m+ t−∑ β i , m+t P i =b 即
i =1 ( 1)
(
m
)
∑ ( x(i0) −θ β i , m+t ) P i+θ P m +t =b
i=1
m
,
转化为 X
x =
(1) i
{
x(i0) − β
x(l0)
l , m+ t (0 ) l
⋅β i , m+t i ≠ l i= l
即
a ' ij =
{
a ij −
a kj a kt
(i≠ k ) (i= k )
a kj a kt
}
;
变换后的新增广矩阵为
[
a ' 1,1
⋯ 0 ⋯ ⋮
a ' 1, n
a' k,1 ⋯ 1 ⋯ a'k ,n ⋮ a ' m, 1 ⋯ 0 ⋯ a ' m , n
a1t a kt ⋮ 1 0 ⋯ + a kt ⋮ a 0 ⋯ − 1t a kt 1 ⋯ −
(1) 加入松弛 m 个松弛变量
系数矩阵表示 max z =c 1 x 1+⋯+ c n x n+ 0x s1 +⋯+ 0x sm
矩阵表示
max z =CX + OX S AX + IX S =b
这里 I 和 O 是 m × m 的单位矩阵和零矩阵。最开始以 X S 为基变量,最后要把 m 个松弛变量从 基变量中逐个替换出来,先标记基变量 X B = X S 。其对应的单位矩阵就是基矩阵 B,这时将系数矩 阵 ( A , I ) 分为 ( N , B ) 两块,N 是非基变量的系数矩阵。相应的决策变量被分为 X =
令非基变量 X N =0 ,可以得到一个基可行解 X
( 1) −1 = B b 0
[ ]
,这时目标函数为 z =C B B
−1
b
(3)最优性检验与解的判别 把非基变量前的系数设为检验数, σ j= c j − z j ( j =m + 1, ⋯ , n )
⃗ =(σ 1 , σ 2 , ⋯ , σ n ) , 引入检验数向量 σ ⃗ =( C N1−C B B 即 σ N 1 , C S2 −C B B I ) −1 观察到 C S2= 0 , C B−C B B B =0 ,检验数可以表示为 ⃗ =( C −C B B−1 A , −C B B−1 ) σ
⋯ 0 ∣ b'1 ∣ ⋯ 0 ∣ b'k ∣ ⋯ 1 ∣ b 'm
]
而用矩阵表示就要简单得多 ( 0) 变换前基向量组 B = I ,要把选定的基变量对应的向量组变换 B → I ,进行行变换即左乘 (−1 ) , B(−1 ) B = I 对应增广矩阵进行行变换 B
B−1 [ N
即为
B( 0) b ]= I
先用系数矩阵表示,增广矩阵为
[
a 1,1 ⋯ a 1, t ⋯ a1, n 1 ⋮ ⋱ a k , 1 ⋯ a k ,t ⋯ a k , n 1 ⋮ ⋱ a m , 1 ⋯ a n ,t ⋯ a m , n 1
∣ b1 ∣ ∣ bk ∣ ∣ bm
]
通过行变换可得 a ' ij , b ' i 是变化后的新元素
B−1 B−1 b ]= I −1 由观察易知初始单位矩阵的位置在迭代运算过后,就是 B 的位置。 −1 P 所以在运算过程中可以有选定的基向量 ,而 B−1 就是很多后续运算的关键 t 直接写出 B
[ B−1 N
a 1t ⋯ 0 a kt ⋮ 1 −1 B = 0 ⋯ + ⋯ 0 a kt ⋮ a 0 ⋯ − 1t ⋯ 1 a kt 1 ⋯ −
目标函数 约束条件 非负条件
max z =C B X B + C N X N =C B X B + C N1 X N1+ C S1 X S1 BX B + NX N = BX B + N 1 X N1 + S 2 X S2=b X B , X N ≥0
(2)确定基可行解,基可行解用非基可行解表示 −1 −1 −1 X B= B b − B N 1 X N1− B S 2 X S2 相应的把 X B 代入,目标函数变为 z =C B B−1 b +( C N1−C B B−1 N 1 ) X N1 +( C S2−C B B−1 I ) X S2