MathLabs

应用与计算数学

线性规划

在线性约束条件下优化线性目标函数,并通过单纯形法高效求解。

直观从有限资源中榨取最大利润

设想一家小工厂用共享的机器工时和原材料生产两种产品。每种产品每单位带来不同的利润,而机器工时、原材料、仓储空间等每个约束都限制了可生产的数量。线性规划要问的是:在不违反任何约束的前提下,应该生产多少每种产品才能使总利润最大化?由于利润函数和每个约束都是直线(在更高维中是平坦的超平面),可行生产方案的集合构成一个凸多面体,而最优方案总是位于它的某个顶点上。

可以炸开以显示顶点、边和面的交互式三维多面体,代表线性规划问题的可行域。
把一个多面体炸开成它的顶点:对于一个线性规划问题,可行域正是这样一个多面体,而线性规划基本定理保证最优解位于这些顶点之一。

中学标准形式

定义: 线性规划的标准形式

标准形式的线性规划问题选择决策变量向量xx,以最大化线性目标函数cTxc^{\mathsf{T}}x,并满足线性不等式约束Ax≤bAx\le b和非负条件x≥0x\ge 0。这里cc是单位利润向量,AA是资源使用系数矩阵,bb是资源限制向量。

max⁡x  cTxsubject toAx≤b,  x≥0\max_{x} \; c^{\mathsf{T}} x \quad \text{subject to} \quad Ax \le b, \; x \ge 0

Ax≤bAx\le b的每一行代表一种有限资源:左边是生产方案xx消耗该资源的数量,右边bb是可用的数量。为每一行加入松弛变量s≥0s\ge 0,把每个不等式都变成等式Ax+s=bAx+s=b,这正是单纯形法实际处理的形式。

Ax+s=b,s≥0Ax + s = b, \qquad s \ge 0
求解线性规划问题的方法比较
方法搜索方式能扩展到多少变量最坏情况复杂度
图解法画出可行多边形,并让目标函数直线在其上滑动仅限2个变量(用三维图可到3个)不适用(可视化方法)
单纯形法从一个顶点走到相邻顶点,始终改进目标函数实践中可达数百到数千个变量理论上是指数级,但实践中很快
内点法穿过多面体内部朝最优点移动非常大规模的问题(数百万变量)多项式时间

大学基本定理与单纯形法

设可行域P={x:Ax≤b,x≥0}P=\{x : Ax\le b, x\ge 0\}非空且有界。若线性规划问题max⁡x∈PcTx\max_{x\in P} c^{\mathsf{T}}x存在最优值,则该最优值在PP的某个顶点(极点)处取得。

为什么成立?

目标函数是线性的,因此它的水平集是相互平行的超平面;当这样一个超平面在凸多面体上滑动时,它离开该区域前触及的最后一点总是一个顶点,而不会是某个面内部的点,因为内部的点总能沿着改进目标函数的方向再往前推进。

证明

由于PP是由有限个线性不等式定义的有界多面体,它只有有限个顶点v1,…,vkv_1,\ldots,v_k,而关于多面体的一个经典事实(闵可夫斯基定理)指出,PP的每个点都是这些顶点的凸组合:x=∑i=1kλivix=\sum_{i=1}^{k}\lambda_i v_i,其中λi≥0\lambda_i\ge 0且∑iλi=1\sum_i \lambda_i=1。

由于目标函数cTxc^{\mathsf{T}}x是线性的,在这样一个凸组合上求值就得到cTx=∑iλi(cTvi)≤(max⁡icTvi)∑iλi=max⁡icTvic^{\mathsf{T}}x=\sum_i \lambda_i\left(c^{\mathsf{T}}v_i\right)\le \left(\max_i c^{\mathsf{T}}v_i\right)\sum_i\lambda_i=\max_i c^{\mathsf{T}}v_i,这是因为每个λi≥0\lambda_i\ge 0且它们之和为11。

这表明每个可行的xx的目标函数值都不超过最佳顶点值max⁡icTvi\max_i c^{\mathsf{T}}v_i。但那个最佳顶点,记为vi∗v_{i^*},本身就是PP的一个可行点,因此它确实达到了这个上界:cTvi∗=max⁡x∈PcTxc^{\mathsf{T}}v_{i^*}=\max_{x\in P} c^{\mathsf{T}}x。于是线性规划问题的最优值就在顶点vi∗v_{i^*}处取得,命题得证。

基本定理使我们可以把最优值的搜索限制在PP的有限个顶点上,但当约束很多时,逐个直接检查所有顶点太慢了。单纯形法则是从一个顶点出发,沿着能严格增大目标函数的边反复移动到相邻顶点,只有当没有相邻顶点更优时才停止——此时所有的检验数(reduced cost)都非负,当前顶点被证明是最优的。

对于原始问题max⁡{cTx:Ax≤b,x≥0}\max\{c^{\mathsf{T}}x : Ax\le b, x\ge 0\},定义对偶问题min⁡{bTy:ATy≥c,y≥0}\min\{b^{\mathsf{T}}y : A^{\mathsf{T}}y\ge c, y\ge 0\}。那么(弱对偶性)对任意原始可行的xx和对偶可行的yy都有cTx≤bTyc^{\mathsf{T}}x\le b^{\mathsf{T}}y,并且(强对偶性)若原始问题存在最优解x∗x^{*},则对偶问题存在最优解y∗y^{*}且cTx∗=bTy∗c^{\mathsf{T}}x^{*}=b^{\mathsf{T}}y^{*}成立。

为什么成立?

对偶性表明,原始的最大化问题与对偶的最小化问题是同一个数值的两种视角:对偶变量yy充当资源的价格,弱对偶性说明在任何有效定价下,任何可行的生产方案所获得的收益都不会超过它所使用资源的价值,而强对偶性则说明在最优点处,最佳生产方案与最便宜的有效定价恰好相等。

证明

(弱对偶性。)设xx为原始问题的任意可行点(Ax≤bAx\le b、x≥0x\ge 0),yy为对偶问题的任意可行点(ATy≥cA^{\mathsf{T}}y\ge c、y≥0y\ge 0)。由于x≥0x\ge 0和ATy≥cA^{\mathsf{T}}y\ge c,用非负向量xx乘以该不等式仍保持方向不变:cTx≤(ATy)Tx=yTAxc^{\mathsf{T}}x\le \left(A^{\mathsf{T}}y\right)^{\mathsf{T}}x=y^{\mathsf{T}}Ax。由于y≥0y\ge 0和Ax≤bAx\le b,类似的论证给出yTAx≤yTb=bTyy^{\mathsf{T}}Ax\le y^{\mathsf{T}}b=b^{\mathsf{T}}y。把这两个不等式连起来,对任意可行对都有cTx≤bTyc^{\mathsf{T}}x\le b^{\mathsf{T}}y成立,这就是弱对偶性。

(强对偶性。)对原始问题运行单纯形法,直到它在具有最优基矩阵BB的最优基本可行解x∗x^{*}处终止,此时xB∗=B−1bx^{*}_B=B^{-1}b成立,且所有非基变量的检验数都非负——这个终止条件等价于定义y∗T=cBTB−1y^{*\mathsf{T}}=c_B^{\mathsf{T}}B^{-1},可以验证它满足ATy∗≥cA^{\mathsf{T}}y^{*}\ge c和y∗≥0y^{*}\ge 0,即y∗y^{*}是对偶可行的。

代入后,原始问题的最优值为cTx∗=cBTxB∗=cBTB−1b=y∗Tb=bTy∗c^{\mathsf{T}}x^{*}=c_B^{\mathsf{T}}x^{*}_B=c_B^{\mathsf{T}}B^{-1}b=y^{*\mathsf{T}}b=b^{\mathsf{T}}y^{*}。结合弱对偶性(总有cTx∗≤bTy∗c^{\mathsf{T}}x^{*}\le b^{\mathsf{T}}y^{*}成立),这里的等号迫使y∗y^{*}也是对偶最优解,因此cTx∗=bTy∗c^{\mathsf{T}}x^{*}=b^{\mathsf{T}}y^{*}成立,强对偶性得证。

大学实际应用与典型例题

线性规划是各行各业决策软件的基础:航空公司求解具有数百万变量的机组排班和机队分配线性规划问题,炼油厂以最低成本调配原油以满足产品规格,电信公司为最大化吞吐量而对网络流量进行路由,投资组合经理在风险限制下在资产间分配资本——所有这些都是在线性约束下最大化或最小化线性目标函数的实例。

例题: 两种产品的利润最大化

一家工厂每周生产xx和yy单位的两种产品,获得利润z=3x+5yz=3x+5y。生产受到x≤4x\le 4、2y≤122y\le 12和3x+2y≤183x+2y\le 18的限制,且满足x,y≥0x,y\ge 0。求使zz最大化的xx和yy的值。

解答

约束x≤4x\le 4直接限制了xx,2y≤122y\le 12意味着y≤6y\le 6,而3x+2y≤183x+2y\le 18是起作用的资源约束;结合x,y≥0x,y\ge 0,这四条直线切出一个五边形,顶点为(0,0)(0,0)、(4,0)(4,0)、(4,3)(4,3)、(2,6)(2,6)和(0,6)(0,6)。

根据基本定理,线性目标函数z=3x+5yz=3x+5y在这个有界可行多边形上的最大值在这五个顶点之一处取得,因此只需在每个顶点计算zz:z(0,0)=0z(0,0)=0、z(4,0)=12z(4,0)=12、z(4,3)=3(4)+5(3)=27z(4,3)=3(4)+5(3)=27、z(2,6)=3(2)+5(6)=36z(2,6)=3(2)+5(6)=36和z(0,6)=30z(0,6)=30。

最大值为z=36z=36,在顶点(x,y)=(2,6)(x,y)=(2,6)处取得,这恰好是约束2y≤122y\le 12和3x+2y≤183x+2y\le 18相交的点,证实了在最优点处两种资源都被完全使用。

例题: 从对偶问题中读取资源价格

对于前一个例子中的工厂,假设管理层想知道约束3x+2y≤183x+2y\le 18多一个单位资源的边际价值——也就是说,该资源再多一个单位能带来多少额外利润。请利用对偶问题,在不从头重新求解整个线性规划的情况下求出这个边际价值(影子价格)。

解答

在x≤4x\le 4、2y≤122y\le 12、3x+2y≤183x+2y\le 18、x,y≥0x,y\ge 0下最大化z=3x+5yz=3x+5y的对偶问题,是在y1+3y3≥3y_1+3y_3\ge 3、2y2+2y3≥52y_2+2y_3\ge 5、y1,y2,y3≥0y_1,y_2,y_3\ge 0下最小化min⁡ w=4y1+12y2+18y3\min\, w=4y_1+12y_2+18y_3,其中y1,y2,y3y_1,y_2,y_3分别是附加在约束x≤4x\le 4、2y≤122y\le 12、3x+2y≤183x+2y\le 18上的对偶价格。

根据强对偶性,对偶问题的最优值等于之前求得的原始问题最优值w∗=z∗=36w^{*}=z^{*}=36。在最优顶点(x,y)=(2,6)(x,y)=(2,6)处,只有约束2y≤122y\le 12和3x+2y≤183x+2y\le 18是紧的(约束x≤4x\le 4是松弛的,因为x=2<4x=2<4),因此互补松弛性迫使松弛约束的对偶价格为零:y1=0y_1=0。

在y1=0y_1=0的情况下,剩余的对偶约束变为3y3≥33y_3\ge 3和2y2+2y3≥52y_2+2y_3\ge 5,求解两个起作用的对偶等式3y3=3 and 2y2+2y3=53y_3=3 \text{ and } 2y_2+2y_3=5得到y3=1 and y2=1.5y_3=1 \text{ and } y_2=1.5:约束3x+2y≤183x+2y\le 18的影子价格为y3=1y_3=1,意味着该资源再多一个单位会使最大利润增加约11。

在目标函数为z=3x+5yz=3x+5y、可行顶点为(0,0)(0,0)、(4,0)(4,0)、(4,3)(4,3)、(2,6)(2,6)、(0,6)(0,6)的工厂例子中,哪个顶点使zz取得最大值?

根据线性规划基本定理,如果一个具有有界非空可行域的线性规划问题存在最优解,那么该最优解总能在哪里找到?

弱对偶性对原始最大化线性规划及其对偶最小化线性规划保证了什么?

一家航空公司需要为航班分配成本最低的机组组合,同时满足人员配置规则和值勤时长限制。这个问题是哪种技术的典型实例?

参考文献

  1. George B. Dantzig (1963). Linear Programming and Extensions
  2. Dimitris Bertsimas, John N. Tsitsiklis (1997). Introduction to Linear Optimization