本文介绍大规模线性规划问题的求解思想。内容主要来源自 《Introduction to Linear Optimization》Chapter 6.
考虑一个非退化的线性规划的标准问题:
假如说矩阵 的列数非常大,即 ,这时候我们无法把所有的列都放入内存执行计算。但是,注意到问题只有 个基变量,也就是说我们只需要找到 列中特定的 列,就可以完成单纯型法的迭代,找到最优解了!
我们可以先随便选取一组基变量进行计算, 接着我们就要去找 entering variable,找进基变量的准则是 reduced cost 。当然,一般会选择 最小的指标 进基,这就归结于问题:
对于一些具有特殊结构的线性规划,只要如上的问题可以轻松解决,即找到进基指标 和相应的列 ,那么原问题就可以得到高效地求解!
注:矩阵 可以借助 revised simplex 方法进行迭代,因此计算量也是小的。
下料问题是一个经典的、可以使用列生成算法来求解的问题。
下料问题由Kantorovich在1939年提出,是一个 NP-Hard 问题。
假设一个造纸厂生产长度为 的纸,然而, 个顾客需要的是 卷长度为 的纸()。那么,造纸厂最少需要多少卷纸来满足顾客的需求呢?
为了解决这个问题,用一个列向量 表示一卷长度为 的纸是如何切割成若干个长度为 的纸的,其中 表示第 种切法中切出长度为 的纸的数量。这样的话,对于一个向量 ,它成为一种可行的切法的充要条件是满足:
令列分块矩阵 表示所有可行的切割方法,注意到切法 可能非常大,这会给问题带来困难。
下料问题归结为一下优化问题:
决策变量 表示第 种切割方法执行的数量。这是一个整数规划问题,把整数条件放松掉,我们求解一个线性规划问题能轻松得到原整数规划问题的一个上界。(向上取整即可),于是其线性松弛可以表示为:
注意到 ,可行的切割方案数是非常大的,所以,这里可以使用 delayed column generation 的思想。不妨初始化设置 ,接下来解优化问题:
找到合适的进基变量和对应的列 . 这里的目标函数是变量 在单纯型表中的系数。
注意到这里是一个整数规划问题,但是可以用动态规划算法以伪多项式的时间内求解。
接下来用 revised simplex 更新矩阵 . 迭代到上述问题的最优值大于等于0的时候,原问题达到最优,单纯型迭代停止。这样我们就解决了一个整数规划的线性松弛问题。
最后,对线性松弛最优解向上取证,可得: IP-optimal cost LP-optimal cost + . 在 较小的时候,这是一个良好的近似解。
列生成算法针对的是线性规划中列数特别多的情况,而切平面方法针对的是约束条件特别多的情况。这两种方法的联系可以理解为,列生成针对的是原问题,而切平面解决的是对偶问题:
注意到,如果 的列数 非常大时,上述问题的约束条件非常之多,使得单纯型法的基变量个数也非常多。
类似地,我们没有必要同时考虑所有的约束条件,如果我们考虑一个子集上的:
计算出的最优值 是问题(2)的可行解,那么 就一定是(2)的最优解!
如果不可行,那么,求解
找到一组使 不可行的约束条件和对应的 ,继续迭代就可以了。因此,cutting-plane method 能否应用归结于如上问题是否能高效求解!
加入新的约束条件时,用对偶单纯型法继续迭代。
对原问题执行列生成等价于对对偶问题执行切平面!
考虑如下的线性规划:
假设 的维度分别是 ,对于 的情况,可以设计恰当的分解算法来高效求解。
定义多面体
于是原问题可以写成:
根据 Minkowski-Weyl 定理,一个 polyhedron 可以由若干个极点和极线构成,于是可以把 改写成:
其中 分别表示 的极点集,极线集。代入原问题,可得:
这个问题叫做 Dantzig-Wolfe master problem。注意到这个等价的问题只有 个约束条件,当 比较大的时候,它很好地降低了单纯型法的存储规模!但是呢,它的列数非常大(变量个数很多),一个多面体的极点、极线的个数是阶乘级别的;幸运的是,我们能够使用列生成的思想去解决它。
首先我们没有必要同时考虑那么多个极点和极限,先只取一个很小的子集,构成一个 restricted master problem(RMP)。
设 DW-RMP 的对偶最优解是 ,变量 的 reduced cost 是 ,变量 的 reduced cost 是 . 接下来我们要去检验这些变量的检验数是否小于0,这归结于一个更小规模的线性规划问题:
这个问题叫做 Dantzig-Wolfe subproblem (DW-SP),子问题用来检验最优性!
如果最优值是 ,我们能找到一条极线使得 ,这说明 应该进基。
又或者最优值小于 ,也就是能找到一个极点 使得 ,这说明 应该进基。如果算出的最优值不小于 ,说明达到最优了~~!
对另一组问题也是类似的:
列生成在 DW 分解中扮演着非常重要的作用,把求解一个大问题分解成若干个小问题,使计算得到了简化。
这个方法可以推广到多个可分离变量上:
甚至当 的时候:
依然可以定义 ,再利用 的极点、极线来简化问题。当然,DW 分解并不拘泥于等式约束,只要约束条件的“较难”的一部分能够表达成 polyhedron 的形式即可。
经验上,DW 分解在迭代的一开始效果比较好,但是最优值的提升可能逐渐变慢,所以经常提前终止并输出一个次优解。
此外,在迭代的过程中,我们还能逐步更新问题的上界和下界。
DW-RMP 输出原问题的一个上界。
Benders 分解借用的是 cutting-plane 的思想。
对如下的优化问题:
其中 是一个 polyhedron。鉴于 是关联(coupling)着的,问题的难度会变大。如果确定了 能方便地计算出 ,那么就可以用 Benders 分解来使问题得到简化。
这里的 还可以是整数变量, 是连续取值的。 确定了,求 就是一个简单的线性规划了。
首先,改写为关于 的优化问题:
式(6)称为 BD-Master Problem,其中:
根据假定(原问题关于 困难而关于 容易),给出 ,计算 是一件轻松的事情。但是,我们还得从对偶问题来计算 ,注意到右侧的对偶问题的可行域是与 无关的。记右侧这个对偶问题为 BD-Subproblem。
记多面体 ,如果 是空集,那么,由线性规划的弱对偶性,原问题无解(不可行)或者最优值无界。以下假设 是非空的。
式(6)可以改写为:
分别表示 的极点、极线组成的集合。注意到 Master Problem 的约束条件非常多。式(7)的最优值和式(5)是一样的。
令 ,取一个 开始迭代,如果对偶子问题无上界,那么这意味着原问题无解,解对偶子问题能得到一条极线 ,将 加入到 ,这样的 对于原始的问题(5)是不可行的!
导致了一个 Benders feasibility cut.
现在假定对偶子问题是有界的,那么说明 是式(5)的可行解,于是我们能得到原始问题的一个上界 ;同时,解 relaxed master problem:
可以得到一个下界 ,如果 ,那么迭代停止,输出最优解。如果 ,就要向 BD-RMP 添加 Benders optimality cut,在计算用对偶子问题计算 的时候,得到的极点 加入到 ,继续迭代即可。
Benders 分解解决的是一类具有特殊形式的规划问题,大规模随机规划刚好具有这样的形式。
Scenario 的个数 一般很大,而第一阶段的决策 确定下来之后,每个 的计算是若干个小的子问题。
令:
问题化为关于 的:
本文总结了求解大规模线性规划问题的算法思路。