持续爆肝......
线性规划の概念
线性规划(即 Linear Programming,简记 LP,又称线规)是了运筹学中数学规划的一个重要分支。在解决实际问题时,需要把问题归结成一个线性规划数学模型,关键及难点在于选适当的决策变量建立恰当的模型,这直接影响到问题的求解。
线性规划问题的目标函数及约束条件均为线性函数;约束条件记为 \(\rm s.t.\)(即 subject to,中译“使服从;使遭受;受……管制”)。目标函数可以是求最大值,也可以是求最小值,约束条件的不等号可以是小于号也可以是大于号。
一般的线规标准型为
\[\textsf{(目标函数)}\max z=\sum_{j=1}^nc_jx_j\qquad(1) \\ \text{s.t.}\textsf{(约束条件)}\begin{cases} \displaystyle \sum_{j=1}^na_{ij}x_j=b_i&i=1,2,\cdots,m \\[2ex] x_j\ge 0&j=1,2,\cdots,n \end{cases} \]其中 \((1)\) 式即目标函数,\(x_j\) 被称为决策变量,\(\rm s.t.\) 中的几个不等式是问题的约束条件,注意到目标函数和约束条件均为线性,因此这类问题被称为线性规划。
可行解与最优解:在满足 \(\rm s.t.\) 的解 \(x=(x_1,x_2,\cdots,x_n)\) 称为线规问题的可行解,而使 \((1)\) 达到最大值的可行解叫做最优解。
可行域:所有可行解 \(x\) 构成的集合,记作 \(\R^n\).
二维线性规划の解法
对于二维线规问题,一般通用方法是图解法,如有一个这样的线规问题:
\[\max z=4x_1+3x_3 \\ \text{s.t.}\begin{cases} 2x_1+x_2\le 10 \\[2ex] x_1+x_2\le 8 \\[2ex] x_2\le 7 \\[2ex] x_1,x_2\ge 0 \end{cases} \]对于每一个固定的 \(z\),使目标函数值等于 \(z\) 的点构成的直线称为目标函数等位线,当 \(z\) 变动时,我们得到一族平行直线,同时,所有线性约束条件对 \(x_1,x_2\) 的刻画,实际上就是半平面的东西了,因此最优解就是用目标函数等位线切约束条件的半平面交所获交点的横纵坐标。
如图,\(z=12\) 即等位线,而涂黄区域即半平面交,不难得知 \(x=(2,6)\) 为最优解。
高维下の线规
以下结论可以推广到一般的线性规划问题,区别只在于空间的维数:
- 可行域 \(\R^n\) 可能会出现多种情况。\(\R^n\) 可能是空集也可能是非空集合,当 \(\R^n\) 非空时,它必定是若干个半平面的交集(除非遇到空间维数的退化). \(\R^n\) 既可能是有界区域, 也可能是*区域;
- 在 \(\R^n\) 非空时,线性规划既可以存在有限最优解,也可以不存在有限最优解(其目标函数值*);
- 若线性规划存在有限最优解,则必可找到具有最优目标函数值的可行域 \(\R^n\) 的 “顶点”;
超平面:不难发现,在 \(n\) 维空间中满足 \(\displaystyle \sum_{j=1}^na_jx_j=b\) 的点集一定是一个“平面”,它相当于是 \(\Vec a\cdot\Vec x=b\),即所有满足 \(\Vec x\) 在 \(\Vec a\) 方向上的投影长度为 \(b\) 的解集。
半空间、多胞形与多面体:满足 \(\displaystyle \sum_{j=1}^na_jx_j\ge b\) 或 \(\displaystyle \sum_{j=1}^na_jx_j\le b\) 的点集被称为一个半空间,可以想象,不等号的两个方向的两个半空间其实是由一个超平面所区分开。若干半空间交集被称为多胞形,而有界的多胞形又被称为多面体。
线规の一些模型
归约为线规
下有规划问题
\[\min\sum_{i=1}^n|x_i| \\ \text{s.t.}\;A\Vec x=b \]其中 \(\Vec x=\begin{bmatrix}x_1&x_2&\cdots&x^n\end{bmatrix}^T\).
事实上,对于任意 \(x_i\),存在 \(u_i,v_i\;\text{s.t.}\;x_i=u_i-v_i,|x_i|=u_i+v_i\). 因此我们就将原问题转化为了
\[\min\sum_{i=1}^n(u_i+v_i) \\ \text{s.t.}\begin{cases} A(\Vec u-\Vec v)=b \\[2ex] u_i,v_i\ge 0&i=1,2,\cdots,n \end{cases} \]这就是一般线规了。
指派问题?费用流!
分配 \(n\) 人做 \(n\) 份工作,第 \(i\) 个人做第 \(j\) 份工花费时间是 \(c_{ij}\),应当如何分配使得总费时最少?
实际上就是要我们解决这样一个线规问题:记 \(x_{ij}=1\) 表示第 \(i\) 人做工作 \(j\),反之为 \(0\),那么
\[\min\sum_{i=1}^n\sum_{j=1}^nc_{ij}x_{ij} \\ \text{s.t.}\begin{cases} \displaystyle\sum_{j=1}^nx_{ij}=1&i=1,2,\cdots,n \\[2ex] \displaystyle\sum_{i=1}^nx_{ij}=1&j=1,2,\cdots,n \\[2ex] x_{ij}\in [0,1]\cap \N \end{cases} \]不难看出,它实际上是一个最小费用最大流问题,该怎么做就怎么做。
原始问题和对偶问题
大板块