线性规划小记
线性规划小记
线性规划问题(LP 问题)
有 \(n\) 个变量 \(x_1,x_2,\dots,x_n\)
存在若干个线性的限制,形如 \(\sum_{i}a_ix_i\leq v\),其中 \(a_i,v\) 均为常数
求最大化目标线性函数 \(\max \sum_i b_ix_i\)
这里变量的取值范围为实数
对于取值范围为整数的问题称为 ILP 问题,其为 NPC 问题
标准型
最大化:\(\sum_i c_ix_i\)
满足约束:\(\sum_{j}a_{i,j}x_j\leq b_i,i\in[1,m]\\x_j\geq 0,j\in[1,n]\)
能简单的用矩阵的语言描述它
松弛型
最大化:\(\sum_{j=1}^nc_jx_j\)
满足约束:\(x_{i+n}=b_i-\sum_{j=1}^na_{i,j}x_j,i\in[1,m]\\x_j\geq 0,j\in[1,n+m]\)
全幺模矩阵
这样的矩阵做 LP 问题,中间的所有结果一定是整数
在矩阵的行、列中均选取一个大小为 \(k\) 的子集
构成的大小为 \(k\times k\) 的方阵的行列式为 \(-1,0,1\)
网络流问题对应 LP 问题的矩阵均是全幺模矩阵
单纯形算法
单纯形法的基本思想是,通过变量的代换,实现在解空间内沿着边界朝目标函数增大的方向移动
其核心操作是转轴(pivot)操作
基变量:在松弛型不等式左边的所有变量
非基变量:在松弛型不等式右边的所有变量
线性规划的一组基变量和非基变量就包含着一组基本解:
即所有基变量的值取右侧的常数项,所有非基变量的值取 \(0\),在单纯形算法中我们只考虑基本解
pivot
选择一个基变量 \(x_B\) 和一个非基变量 \(x_N\),将他们互换(称 \(x_B\) 为换入变量,\(x_n\) 为换入变量 )
具体来说:
并且将目标函数即其他限制条件中的 \(x_N\) 全部替换成上式,则做到了互换基变量与非基变量
值得一提的是我们当然应该保证 \(a_{i,N}\neq 0\)
容易发现 pivot 操作的复杂度为 \(O(nm)\)
simplex
该过程也是单纯性算法的主过程,核心思想是从一个基本解出发,经过一系列的 pivot 操作,达到最优解
我们只要选择适当的换入变量与换出变量,使得每次 pivot 均使目标函数增大,就能逐渐达到最优解
注意到我们需要保证 \(b_i\geq 0\),我们首先讨论有这个条件怎样完成 simplex 操作
-
找到一个 \(e\) 满足 \(c_e>0\)
特别的,如果不存在这样的 \(e\),那么 simplex 操作结束 -
找到下标 \(l\) 满足 \(a_{l,e}>0\),并最小化 \(\dfrac{b_l}{a_{l,e}}\)
特别的,如果不存在这样的 \(l\),那么该线性规划是无界的 -
对 \(e,l\) 进行 pivot 操作
如果初始时 \(b_i\geq 0\),可以证明,在 pivot 操作后一定有 \(b_i\geq 0\)
考虑我们如何解决开始时 \(b_i<0\) 的情况,我们引入一个辅助线性规划:
最大化:\(-x_0\)
满足约束:\(x_{i+n}=b_i+x_0-\sum_{j=1}^na_{i,j}x_j,i\in[1,m]\\x_i\geq 0,i\in[0,n+m]\)
考虑如果原线性规划存在一个可行解 \((\hat x_1,\hat x_2,\dots,\hat x_{n+m})\),那么 \((0,\hat x_1,\hat x_2,\dots,\hat x_{n+m})\) 就是辅助线性规划的一组可行解
而由于我们需要最小化 \(x_0\),那么这个可行解就是辅助线性规划里的最优解
而由于 \(x_0=0\),我们得到这样的一组最优解后,可以直接将 \(x_0\) 去掉,将目标函数替换为原目标函数,即能将 \(b_i\) 变为非负数
我们容易构造出辅助线性规划的初始解,我们考虑将 \(x_0\) 作为换入变量,找到 \(b_i\) 最小值 \(b_l\),把 \(x_{l+n}\) 作为换出变量执行转轴操作即可
容易发现 \(b'\) 将非负,对辅助线性规划跑 simplex 即可
容易发现 simplex 的复杂度是指数的(,但实际运行情况很好(
过不去uoj板子,爬了
对偶
对于线性规划问题:
最小化:\(\sum_{j=1}^nc_jx_j\)
约束:\(\sum_{j=1}^na_{i,j}x_j\geq b_i,i\in [1,m]\)
其对偶问题为:
最大化:\(\sum_{i=1}^mb_iy_i\)
约束:\(\sum_{i=1}^ma_{i,j}y_i\leq c_j,j\in [1,n]\)
默认 \(x_i,y_i\geq 0\)
具体一点的理解是,原问题的限制变成了对偶问题的变量
-
弱对偶定理:对偶问题的解不大于原问题的解
-
强对偶定理:对偶问题的解等于原问题的解
定理在有解情况下成立 -
如果原问题最优解中条件 \(i\) 没有取到等号,那么对偶问题里 \(y_i=0\)