线性规划
线性规划
一般形式:给定一堆实数变量 \(x_n\),有若干个是等式或者不等式的线性限制,有一个线性函数作为目标函数,要求最大/小化目标函数的值。
称两个同为最大化的线性规划是等价的,当且仅当,对于前者的一个可行解及其值 \(v\),后者存在一个可行解,值也为 \(v\)。反之亦然。
称一个最大化一个最小化的是等价的,当且仅当,对于前者的一个可行解及其值 \(v\),后者存在一个可行解,值为 \(-v\)。反之亦然。
标准型:
最大化,限制都是小于等于,并且每个变量都有非负限制。
若为最小化,先添加负号。若有相等限制,转成两个不等限制。若有大于等于限制,加负号。若有变量 \(x_i\) 没有非负限制,令 \(x_i=x_i'-x_i''\),并且令 \(x_i',x_i''\ge 0\)。
写出来就是
如果我们记 \(x,b,c\) 是列向量,\(A\) 是 \(m\times n\) 的系数矩阵,那么可以写成
松弛型:
最大化,限制都是等于,每个变量有非负限制。
我们以标准型为基础。对于小于等于的限制 \(\sum b_ix_i\le c_i\),我们添加松弛变量 \(s_j=c_i-\sum b_ix_i,s_j\ge 0\)。
一些例子
最大流问题:
费用流问题:
单纯形算法
TODO。
对偶
对于一个标准型,我们定义它的对偶线性规划问题为
或者,写成
我们先证明,对偶问题的任意一个可行解 \(y\) 得到的值大于等于原问题的任意一个可行解 \(x\)。
那么接下来我们只要找到一组得到的值相等的 \(x,y\) 即可。
这个过程可以通过单纯形算法的过程证明,我们略过。
我们现在可以通过机械的方式,把系数写成矩阵再转置,以此来构造对偶问题。但这样往往会破坏对偶后的问题的一些形式,所以我们这里从另外一个角度,介绍一种对偶的方法。
我们针对一般形式入手,不妨假设求的是最大,最小是同理的。
先把每个不等式转化成小于等于的形式,等式把所有项移到左侧,然后给每个式子设一个元 \(\lambda_i\),对于不等式,要求 \(\lambda_i \le0\),对于等式,没有额外要求。
然后把 \(\lambda_i\) 和对应的式子的左侧相乘,加到目标函数 \(f(x_j)\) 上,把 \(x_j\) 当成主元整理,然后要求每个 \(x_j\) 前的系数 \(=0\)。我们就完成了对偶,对偶后的目标函数是把加完后的函数中 \(x_j\) 及系数去掉之后的结果。
为什么是对的呢?你考虑我们相当于是给每个小于等于的式子乘了一个非正数,把式子变成了大于等于,然后你想象把这一堆不等式加到 \(f(x_j)=f(x_j)\) 这个等式上,你就得到了 \(f(x_j)\le\dots\)。然后你再令系数都是 0,就得到了目标函数。本质上是对不等式加加减减凑出来目标函数的系数。

浙公网安备 33010602011771号