Large-Scale Linear Optimization

本文介绍大规模线性规划问题的求解思想。内容主要来源自 《Introduction to Linear Optimization》Chapter 6.

Delayed column generation

考虑一个非退化的线性规划的标准问题:

(1)mincTxs.t.Ax=b,x0

假如说矩阵 ARm×n 的列数非常大,即 nm,这时候我们无法把所有的列都放入内存执行计算。但是,注意到问题只有 m 个基变量,也就是说我们只需要找到 n 列中特定的 m 列,就可以完成单纯型法的迭代,找到最优解了!

我们可以先随便选取一组基变量进行计算, 接着我们就要去找 entering variable,找进基变量的准则是 reduced cost c¯j=cjcBTB1Aj<0。当然,一般会选择 c¯j 最小的指标 j 进基,这就归结于问题:

minc¯j=cjcBTB1Aj

对于一些具有特殊结构的线性规划,只要如上的问题可以轻松解决,即找到进基指标 j 和相应的列 Aj,那么原问题就可以得到高效地求解!

注:矩阵 B 可以借助 revised simplex 方法进行迭代,因此计算量也是小的。

下料问题是一个经典的、可以使用列生成算法来求解的问题。

Cutting-stock problem

下料问题由Kantorovich在1939年提出,是一个 NP-Hard 问题。

假设一个造纸厂生产长度为 W 的纸,然而,m 个顾客需要的是 bi 卷长度为 wi<W 的纸(i=1,,m)。那么,造纸厂最少需要多少卷纸来满足顾客的需求呢?

为了解决这个问题,用一个列向量 Aj=[aij]m×1 表示一卷长度为 W 的纸是如何切割成若干个长度为 wi 的纸的,其中 aij 表示第 j 种切法中切出长度为 wi 的纸的数量。这样的话,对于一个向量 [a1j,a2j,,amj]T ,它成为一种可行的切法的充要条件是满足:

AjTw=i=1maijwiW,aijN

令列分块矩阵 A=[Aj]1×nRm×n 表示所有可行的切割方法,注意到切法 n 可能非常大,这会给问题带来困难。

下料问题归结为一下优化问题:

minj=1nxjs.t.j=1naijxjbi,i=1,2,,mxj0,xjN,j=1,2,,n

决策变量 xj 表示第 j 种切割方法执行的数量。这是一个整数规划问题,把整数条件放松掉,我们求解一个线性规划问题能轻松得到原整数规划问题的一个上界。(向上取整即可),于是其线性松弛可以表示为:

minj=1nxjs.t.j=1naijxj=bi,i=1,2,,mxj0,j=1,2,,n

注意到 nm,可行的切割方案数是非常大的,所以,这里可以使用 delayed column generation 的思想。不妨初始化设置 B=Im×m,接下来解优化问题:

min1cBTB1Ajs.t.[w1,,wm]AjW,aijN,i=1,,m

找到合适的进基变量和对应的列 Aj. 这里的目标函数是变量 xj 在单纯型表中的系数。

注意到这里是一个整数规划问题,但是可以用动态规划算法以伪多项式的时间内求解。

接下来用 revised simplex 更新矩阵 B. 迭代到上述问题的最优值大于等于0的时候,原问题达到最优,单纯型迭代停止。这样我们就解决了一个整数规划的线性松弛问题。

最后,对线性松弛最优解向上取证,可得: IP-optimal cost LP-optimal cost + m. 在 m 较小的时候,这是一个良好的近似解。

Cutting-plane method

列生成算法针对的是线性规划中列数特别多的情况,而切平面方法针对的是约束条件特别多的情况。这两种方法的联系可以理解为,列生成针对的是原问题,而切平面解决的是对偶问题:

(2)maxpTbs.t.pTAcT

注意到,如果 Am×n 的列数 n 非常大时,上述问题的约束条件非常之多,使得单纯型法的基变量个数也非常多。

类似地,我们没有必要同时考虑所有的约束条件,如果我们考虑一个子集上的:

maxpTbs.t.pTAici,iI

计算出的最优值 p¯ 是问题(2)的可行解,那么 p¯ 就一定是(2)的最优解!

如果不可行,那么,求解

mincipTAi

找到一组使 p¯ 不可行的约束条件和对应的 Ai ,继续迭代就可以了。因此,cutting-plane method 能否应用归结于如上问题是否能高效求解!

加入新的约束条件时,用对偶单纯型法继续迭代。

对原问题执行列生成等价于对对偶问题执行切平面!

Dantzig-Wolfe decomposition

考虑如下的线性规划:

(3)minc1x1+c2x2 s.t. D1x1+D2x2=b0F1x1=b1F2x2=b2x1,x20

假设 b0,b1,b2 的维度分别是 m0,m1,m2,对于 m1,m2m0 的情况,可以设计恰当的分解算法来高效求解。

定义多面体

Pi={xFix=bi}

于是原问题可以写成:

(4)minc1x1+c2x2 s.t. D1x1+D2x2=b0x1P1,x2P2

根据 Minkowski-Weyl 定理,一个 polyhedron 可以由若干个极点和极线构成,于是可以把 x1,x2 改写成:

xi=jJiλijxij+kKiθikwik,jJiλij=1,λij,θik0i=1,2

其中 Ji,Ki 分别表示 P1,P2 的极点集,极线集。代入原问题,可得:

(DW-MP)minjJ1λ1jc1x1j+kK1θ1kc1w1k+jJ2λ2jc2x2j+kK2θ2kc2w2k s.t. jJ1λ1jD1x1j+kK1θ1kD1w1k+jJ2λ2jD2x2j+kK2θ2kD2w2k=b0jJ1λ1j=1jJ2λ2j=1λij0,θik0,i,j,k.

这个问题叫做 Dantzig-Wolfe master problem。注意到这个等价的问题只有 m0+2 个约束条件,当 m1,m2 比较大的时候,它很好地降低了单纯型法的存储规模!但是呢,它的列数非常大(变量个数很多),一个多面体的极点、极线的个数是阶乘级别的;幸运的是,我们能够使用列生成的思想去解决它。

首先我们没有必要同时考虑那么多个极点和极限,先只取一个很小的子集,构成一个 restricted master problem(RMP)。

设 DW-RMP 的对偶最优解p=cBTB1=[qr1r2],变量 λ1j 的 reduced cost 是 (c1qD1)x1jr1,变量 θ1k 的 reduced cost 是 (c1qD1)w1k. 接下来我们要去检验这些变量的检验数是否小于0,这归结于一个更小规模的线性规划问题:

(DW-SP)min(c1qD1)x1 s.t. x1P1

这个问题叫做 Dantzig-Wolfe subproblem (DW-SP),子问题用来检验最优性

如果最优值是 ,我们能找到一条极线使得 (c1qD1)wik<0,这说明 θik 应该进基。

又或者最优值小于 r1 ,也就是能找到一个极点 xij 使得 (c1qD1)x1jr1<0,这说明 λij 应该进基。如果算出的最优值不小于 r1,说明达到最优了~~!

对另一组问题也是类似的:

(DW-SP)min(c2qD2)x2 s.t. x2P2,

列生成在 DW 分解中扮演着非常重要的作用,把求解一个大问题分解成若干个小问题,使计算得到了简化。

这个方法可以推广到多个可分离变量上:

minc1x1+c2x2++ctxt s.t. D1x1+D2x2++Dtxt=b0Fixi=bi,i=1,2,,t,x1,x2,,xt0.

甚至当 t=1 的时候:

mincx s.t. Dx=b0Fx=bx0

依然可以定义 P={xFx=b} ,再利用 P 的极点、极线来简化问题。当然,DW 分解并不拘泥于等式约束,只要约束条件的“较难”的一部分能够表达成 polyhedron 的形式即可。

经验上,DW 分解在迭代的一开始效果比较好,但是最优值的提升可能逐渐变慢,所以经常提前终止并输出一个次优解。

此外,在迭代的过程中,我们还能逐步更新问题的上界和下界。

DW-RMP 输出原问题的一个上界。

Stochastic programming and Benders decomposition

Benders 分解借用的是 cutting-plane 的思想。

对如下的优化问题:

(5)mincTx+fTy s.t. Ax+By=by0,xXRn

其中 X 是一个 polyhedron。鉴于 x,y 是关联(coupling)着的,问题的难度会变大。如果确定了 x 能方便地计算出 y,那么就可以用 Benders 分解来使问题得到简化。

这里的 x 还可以是整数变量,y 是连续取值的。x 确定了,求 y 就是一个简单的线性规划了。

首先,改写为关于 x 的优化问题:

(6)mincTx+z s.t. xXRn

式(6)称为 BD-Master Problem,其中:

z=z(x)=[minfTy s.t. Ax+By=b,y0]=[maxαT(bAx) s.t. BTαf]

根据假定(原问题关于 x 困难而关于 y 容易),给出 x,计算 g(x) 是一件轻松的事情。但是,我们还得从对偶问题来计算 g(x)注意到右侧的对偶问题的可行域是与 x 无关的。记右侧这个对偶问题为 BD-Subproblem。

记多面体 P={αBTαf},如果 P 是空集,那么,由线性规划的弱对偶性,原问题无解(不可行)或者最优值无界。以下假设 P 是非空的。

式(6)可以改写为:

(7)mincTx+z s.t. xXRnαiT(bAx)z,αiJPαjT(bAx)0,αjKP

JP,KP 分别表示 P 的极点、极线组成的集合。注意到 Master Problem 的约束条件非常多。式(7)的最优值和式(5)是一样的。

JP=KP=,取一个 x0 开始迭代,如果对偶子问题无上界,那么这意味着原问题无解,解对偶子问题能得到一条极线 w0,将 w0 加入到 KP,这样的 x0 对于原始的问题(5)是不可行的!

w0 导致了一个 Benders feasibility cut.

现在假定对偶子问题是有界的,那么说明 x0 是式(5)的可行解,于是我们能得到原始问题的一个上界 UB=cTx0+z(x0);同时,解 relaxed master problem:

mincTx+z s.t. xXRnαiT(bAx)z,αiJPαjT(bAx)0,αjKP

可以得到一个下界 LB,如果 LB=UB,那么迭代停止,输出最优解。如果 UBLB,就要向 BD-RMP 添加 Benders optimality cut,在计算用对偶子问题计算 z(x0) 的时候,得到的极点 v0 加入到 JP,继续迭代即可。

Benders 分解解决的是一类具有特殊形式的规划问题,大规模随机规划刚好具有这样的形式。 mincTx+α1fTy1+α2fTy2++αKfTyK s.t. Ax=bB1x+Dy1=d1B2x+Dy2=d2BKx+DyK=dKx,y1,,yk0

Scenario 的个数 K 一般很大,而第一阶段的决策 x 确定下来之后,每个 yk 的计算是若干个小的子问题。

令:

zω(x)=[minfyω s.t. Bωx+Dyω=dωyω0.]=[maxpω(dωBωx) s.t. pωDf]

问题化为关于 x 的:

mincx+w=1Kαωzω(x) s.t. Ax=bx0.

Summary

本文总结了求解大规模线性规划问题的算法思路。

updatedupdated2023-01-262023-01-26