以下内容全是口胡,请谨慎观看 ——From ATP
什么是线性规划?
参见高中数学必修五第三章
根据ATP的理解。。。线性规划就是设出一些变量,给出一些对于变量取值的限制,同时给出一个与这些变量相关的目标函数,要求在满足限制的前提下最大化或最小化目标函数。
举个例子:设有变量 x1,x2,x3 ,那么下面这一坨东西:
Maxmize 5∗x1+2∗x2−3∗x3
满足约束:
2∗x1+3∗x3≤5
3∗x2−4∗x3≤8
4∗x1−2∗x2≤7
x1,x2,x3≥0
就是一个线性规划啦。。(上面那一坨东西是ATP随便打上去的有没有解就不一定了= =)
形式化地,设 x 为n维列向量代表设定的变量,
我们在这里仅讨论线性规划的标准型。线性规划的标准型表示如下:
Maxmize Cx
S.T. Ax≤B,x≥0
但是很多时候好像遇到的线性规划并不是标准型?难道它们不能做吗。。。其实并不是,在大多数情况下,不是标准型的线性规划都可以通过做一些适当的转化表示成标准型。比如……
目标函数要求最小化( Minmize )?
似乎可以把所有系数取反,求得答案以后再反回来?
在某些情况下,下面提到的“对偶定理”会更加好用。首先线性规划的限制应该都是大于等于或者小于等于这种形式的(不然计算机怎么搞出“无限接近”这种类型的答案来= =),但是在标准型里面限制都要求是小于等于,如果遇到别的符号?
如果是带“ ≥ ”的限制,直接把所有系数取反就可以;而如果是带“=”的限制,例如 a=b ,我们可以转化成 a≤b 和 b≤a 两个限制。
总之通过类似这样的变换我们可以把任意的线性规划转化为标准型,并且它们的最优解都是不变的。
求解线性规划——单纯形算法
求解线性规划最常用的算法是单纯形算法。它的理论时间复杂度是指数级别的。。但是跑得奇快无比啊并且也基本上卡不掉。。所以放心大胆用就是了。。
单纯形算法的几何意义很多地方都有解释。。但是这里ATP主要解释它在代数方面的原理。
首先,为了对线性规划使用单纯形算法,我们需要把线性规划转化为“松弛型”,也就是说把所有的不等式变为等式。以下都用m来表示限制个数,n来表示变量个数。
为了做到这一点,我们对于每一个形如 ∑i=1nAk,ixi≤Bk 的限制增加一个叫做“基变量”的东西,把它称作