本文先解决一个约束下线性问题求解极值的理论推导过程,其余的拓展在后面的文章中介绍。
一个极值问题
对于下述问题,我们怎么搞定它。
s.t.Ax=b;m个约束;
x⩾0;共m+n个变量;
稍微详细描述一下上面的问题,如下:
s.t.⎡⎣⎢⎢⎢A11A21...Am1A12A22...Am2............A1nA2n...Amn⎤⎦⎥⎥⎥∗⎡⎣⎢⎢⎢x1x2...xn⎤⎦⎥⎥⎥=⎡⎣⎢⎢⎢b1b2...bm⎤⎦⎥⎥⎥
x1⩾0;x2⩾0,...,xm+n⩾0
变形
若是约束为大于等于0,也是可以直接按照等式处理的(线性问题的最值出现在边界上,故可将不等式化为等式)
假设 A=[B,N]
其中 {
B=[P1,P2,...,Pm]为基矩阵N=[Pm+1,Pm+2,...,Pm+n]为非基矩阵
假设 x=[xBxN]
其中 {
xB=[x1,x2,...,xm]为基向量xN=[xm+1,xm+2,....,xm+n]为非基向量
其中,基向量由约束系数矩阵中列向量线性无关的列对应的变量组成。
假设 cT=[cTB,cTN]
则由 Ax=b
可得 [B,N]∗[xBxN]=b=B∗xB+N∗xN
得到 xB=B−1(b−N∗xN)=B−1b−B−1N∗xN
将目标函数变形:
f(x)=cT∗x=[cTB,cTN]∗[xBxN]=cTB∗xB+cTN∗xN
带入 xB 得到:
=cTB∗(B−1b−B−1N∗xN)+cTN∗xN
=cTB∗B−1b−cTB∗B−1N∗xN+cTN∗xN
=cTB∗B−1b+(CTN−cTB∗B−1N)∗xN
于是将问题变为如下形式:
s.t.xB=B−1(b−N∗xN)=B−1b−B−1N∗xN
x⩾0
上面的式子不方便计算和理解,再次对其进行表示。
假设四个式子表示如下:
f0=cTB∗B−1∗b 非基向量为0时,由基向量求得。
B−1∗b=b′=[b′1,b′2,...,b′m]
σN=CTN−CTBB−1N=[σm+1,σm+2,...,σm+n]
B−1N=⎡⎣⎢⎢⎢⎢⎢a′1,m+1a′2,m+1...a′m,m+1a′1,m+2a′2,m+2...a′m,m+2............a