完全形法的主要思想是,从一个初始基本可行解开始,迭代改进可行解,直到达到最优。
基本概念
对于线性规划的标准形式:
mins.t.fAxx≡cx=b≥0
通过变换行,使其前 m 行线性无关,对矩阵A的分割,得到基矩阵 B 与非基矩阵 N:
m×nA=(P1,P2,...,Pm,Pm+1,...,Pn)=(B,N)
同样对C、x进行划分得到(CB,CN) (xB,xN)
初始基本可行解
取一个基本可行解
x(0)=(B−1b0),B−1b≥0
其目标函数值为
f0=cx(0)=(CB,CN)(B−1b0)=CBB−1b(1)
进基变量、出基变量
通过将基向量中的值与非基向量中的值位置进行替换,以改进基本可行解
(PB1,...,PBr,...,PBm,PN1,...,PNk,...,PNn−m)
将基向量 PBr 与非基向量 PNk 位置进行变换,则称 PBr 为出基向量,PNk 为进基向量。对于同样位置的 xBr 称为出基变量,xNk 称为进基变量。
单纯形法
单纯形法从一个初始可行解开始,通过选取出基向量与进基向量以迭代改进可行解,不停迭代直到达到最优解,所以需要解决三个问题:
- 确定进基的下标 Nk
- 确定出基的下标 Br
- 确定进基变量的值,(出基变量被人为设定为0)
确定进基变量/向量的下标
根据等式约束,可得:
Ax(B,N)(xBxN)BxB+NxNxB=b=b=b=B−1b−B−1NxN(2)
目标函数值为:
f=cx=CBxB+CNxN=CB(B−1b−B−1NxN)=CBB−1b−(CBB−1N−CN)xN=f0−j∈R∑(CBB−1Pj−Cj)xj,R={N1,N2,...,Nn−m}=f0−j∈R∑(zj−cj)xj将式 (2) 代入将矩阵相减与向量内积写为对应分量相减相乘累加因为 CBB−1Pj 都已知,是常量,以 zj 代换
目标函数的值只与 xN 有关(xB 的影响隐含在 xN 的变化中),为了改进目标函数的值,需要使 ∑j∈R(zj−cj)xj 在满足约束的情况下最大。
此时考虑两种情况:
- ∀j,zj−cj≤0 因为 xj≥0 所以此时已经最大,即目标函数值已经最小,达到最优,停止迭代。
- ∃j,zj−cj>0 取 zk−ck=j∈Rmax{zj−cj},PNk 与xk进基。
只改变了xk的值,而其他变量仍然人工设置为0,
此时目标函数值为:
f=f0−(zk−ck)xk(3)
此时 xB 的值变为:
xB=B−1b−B−1PNkxk
令 bˉ=B−1b,yk=B−1PNk={y1k,...,ym−nk},上式又可以写为:
xB=bˉ−ykxk(4)
确定进基变量的值与出基向量/变量的下标
为了使目标函数(式(3))最小,因为 zl−ck 的值确定,所以需要让 xk 在满足约束的情况下最大,即,保证 xB=bˉ−ykxk≥0,其中 bˉ≥0。
根据式(4),此时考虑两种情况:
- ∀i,yik≤0 无论 xk 取什么值,都能保证 xB≥0,即 xk 可以取任意值
- ∃i,yik>0 需要使 bˉi−yikxk≥0 即 xk≤yikbˉi 为了使 xk 最大且满足约束,取 xk=min{yikbˉi∣y>0} 若设最小的 yikbˉi 下标为 r,xk=yrkbˉr,同时 r 也是出基向量/变量的下标。
此时新的基本可行解(保证可行可通过证明基矩阵仍然线性无关,证明略)为:
x=(xB1,...,xBr−1,0,xBr+1,...,xBm,0,...,0,xk,...,0)