论文阅读笔记,个人理解,如有错误请指正,感激不尽!仅是对文章进行梳理,细节请阅读参考文献。该文分类到Machine learning alongside optimization algorithms。
01 Column Generation
列生成 (Column Generation) 算法在组合优化领域有着非常广泛的应用,是一种求解大规模问题 (large-scale optimization problems) 的有效算法。在列生成算法中,将大规模线性规划问题分解为主问题 (Master Problem, MP) 和定价子问题 (Pricing Problem, PP)。算法首先将一个MP给restricted到只带少量的columns,得到RMP。求解RMP,得到dual solution,并将其传递给PP,随后求解PP得到相应的column将其加到RMP中。RMP和PP不断迭代求解直到再也找不到检验数为负的column,那么得到的RMP的最优解也是MP的最优解。如下图所示:
关于列生成的具体原理,之前已经写过很多详细的文章了。还不熟悉的小伙伴可以看看以下:
02 Column Selection
在列生成迭代的过程中,有很多技巧可以用来加快算法收敛的速度。其中一个就是在每次迭代的时候,加入多条检验数为负的column,这样可以减少迭代的次数,从而加快算法整体的运行时间。特别是求解一次子问题得到多条column和得到一条column相差的时间不大的情况下(例如,最短路中的labeling算法)。
而每次迭代中选择哪些column加入?是一个值得研究的地方。因为加入的columns不同,最终收敛的速度也大不一样。一方面,我们希望加入column以后,目标函数能尽可能降低(最小化问题);另一方面,我们希望加入的column数目越少越好,太多的列会导致RMP求解难度上升。因此,在每次的迭代中,我们构建一个模型,用来选择一些比较promising的column加入到RMP中:
- Let ℓ \ell ℓ be the CG iteration number
- Ω ℓ \Omega_{\ell} Ωℓ the set of columns present in the RMP at the start of iteration ℓ \ell ℓ
- G ℓ \mathcal{G}_{\ell} Gℓ the generated columns at this iteration
- For each column p ∈ G ℓ p \in \mathcal{G}_{\ell} p∈Gℓ, we define a decision variable y p y_p yp that takes value one if column p p p is selected and zero otherwise
为了最小化所选择的column,每选择一条column的时候,都会发生一个足够小的惩罚 ϵ \epsilon ϵ。最终,构建column selection的模型 (MILP) 如下:
大家发现没有,如果没有 y p y_p yp和约束(8)和(9),那么上面这个模型就直接变成了下一次迭代的RMP了。
假设 ϵ \epsilon ϵ足够小,这些约束目的是使得被选中添加到RMP中的column数量最小化,也就是这些 y p = 1 y_p=1 yp=1的columns。那么在迭代 ℓ \ell ℓ中要添加到RMP的的column为:
总体的流程如下图所示:
03 Graph Neural Networks
在每次迭代中,通过求解MILP,可以知道加入哪些column有助于算法速度的提高,但是求解MILP也需要一定的时间,最终不一定能达到加速的目的。因此通过机器学习的方法,学习一个MILP的模型,每次给出选中的column,将是一种比较可行的方法。
在此之前,先介绍一下Graph Neural Networks。图神经网络(GNNs)是通过图节点之间的信息传递来获取图的依赖性的连接模型。与标准神经网络不同,图神经网络可以以任意深度表示来自其邻域的信息。
给定一个网络 G = ( V , E ) G=(V,E) G=(V,E),其中 V V V是顶点集而 E E E是边集。每一个节点 v ∈ V v \in V v∈