Large scale linear optimization

同步发文在 知乎本文介绍大规模线性规划问题的求解思想。内容主要来源自 《Introduction to Linear Optimization》Chapter 6.Delayed column generation考虑一个非退化的线性规划的标准问题:min⁡cTxs.t.Ax=b,x≥0(1)\begin{array}{cl} \min & c^T x \\ \text{s.t.} & Ax = b, x \geq 0\end{array}\tag{1}mins.t.​c
摘要由CSDN通过智能技术生成

同步发文在 知乎

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

Delayed column generation

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

min ⁡ c T x s.t. A x = b , x ≥ 0 (1) \begin{array}{cl} \min & c^T x \\ \text{s.t.} & Ax = b, x \geq 0 \end{array}\tag{1} mins.t.cTxAx=b,x0(1)

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

我们可以先随便选取一组基变量进行计算, 接着我们就要去找 entering variable,找进基变量的准则是 reduced cost c ˉ j = c j − c B T B − 1 A j < 0 \bar{c}_j = c_j - c_B^T B^{-1} A_j < 0 cˉj=cjcBTB1Aj<0。当然,一般会选择 c ˉ j \bar{c}_j cˉj 最小的指标 j j j 进基,这就归结于问题:

min ⁡    c ˉ j = c j − c B T B − 1 A j \min \;\bar{c}_j = c_j - c_B^T B^{-1} A_j mincˉj=cjcBTB1Aj

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

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

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

Cutting-stock problem

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

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

为了解决这个问题,用一个列向量 A j = [ a i j ] m × 1 A_j = [a_{ij}]_{m \times 1} Aj=[aij]m×1 表示一卷长度为 W W W 的纸是如何切割成若干个长度为 w i w_i wi 的纸的,其中 a i j a_{ij} aij 表示第 j j j 种切法中切出长度为 w i w_i wi 的纸的数量。这样的话,对于一个向量 [ a 1 j , a 2 j , … , a m j ] T [a_{1j}, a_{2j}, \dots, a_{mj}]^T [a1j,a2j,,amj]T ,它成为一种可行的切法的充要条件是满足:

A j T w = ∑ i = 1 m a i j w i ≤ W , a i j ∈ N A_j^T {w} =\sum_{i=1}^m a_{ij} w_i \leq W, \quad a_{ij} \in \mathrm{N} AjTw=i=1maijwiW,aijN

令矩阵 A = [ A j ] 1 × n ∈ R m × n A=[A_j]_{1\times n} \in \mathrm{R}^{m\times n} A=[Aj]1×nRm×n 表示所有可行的切割方法,注意到 n n n 可能非常大,这会给问题带来困难。

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

min ⁡    ∑ j = 1 n x j s.t.    ∑ j = 1 n a i j x j ≥ b i ,      i = 1 , 2 , … , m   x j ≥ 0 ,      x j ∈ N ,      j = 1 , 2 , … , n \begin{aligned} \min \;& \sum_{j=1}^n x_j \\ \text{s.t.} \;& \sum_{j=1}^n a_{ij}x_j \geq b_i, \;\; i =1, 2, \dots, m \\ & \: x_j \geq 0, \;\; x_j \in \mathbb{N}, \;\; j = 1, 2, \dots, n \end{aligned} mins.t.j=1nxjj=1naijxjbi,i=1,2,,mxj0,xjN,j=1,2,,n

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

min ⁡    ∑ j = 1 n x j s.t.    ∑ j = 1 n a i j x j = b i ,      i = 1 , 2 , … , m   x j ≥ 0 ,      j = 1 , 2 , … , n \begin{aligned} \min \;& \sum_{j=1}^n x_j \\ \text{s.t.} \;& \sum_{j=1}^n a_{ij}x_j = b_i, \;\; i =1, 2, \dots, m \\ & \: x_j \geq 0, \;\; j = 1, 2, \dots, n \end{aligned} mins.t.j=1nxjj=1naijxj=bi,i=1,2,,mxj0,j=1,2,,n

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

min ⁡    1 − c B T B − 1 A j s.t.    [ w 1 , … , w m ] A j ≤ W , a i j ∈ N \begin{aligned} \min \;& 1 - c_B^T B^{-1} A_j \\ \text{s.t.} \;& [w_1, \dots, w_m] A_j \leq W, \quad a_{ij} \in \mathbb{N} \\ \end{aligned} mins.t.1cBTB1Aj[w1,,wm]AjW,aijN

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

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

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

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

Cutting-plane method

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

max ⁡ p T b

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值