23. 大规模规划(二)Dantzig-Wolfe 分解

Dantzig-Wolfe 分解

考虑如下的线性规划问题

\[\begin{align*} \min \quad &c^T_1x_1+c^T_2x_2 \\ \text{a.t.} \quad &D_1x_1+D_2x_2=b_0\\ &F_1x_1=b_1\\ &F_2x_2=b_2\\ &x_1,x_2\geq 0. \end{align*} \]

假设\(x_1\)\(x_2\)分别为维度\(n_1\)\(n_2\)的向量,\(b_0,b_1,b_2\)的维度分别\(m_0, m_1, m_2\)。这说明\(x_1\)要满足\(m_1\)个约束,\(x_2\)要满足\(m_2\)个约束,\(x_1\)\(x_2\)同时满足\(m_0\)个约束。上式中的\(D_1,D_2,F_1,F_2\)是相适应维度的矩阵。

问题重写

在这一部分,我们先改写原问题,通过增加变量约束使得等式约束的个数减少。对于\(i=1,2\), 定义

\[P_i = \{x_i\geq 0\mid F_ix_i=b_i\}, \]

并且假设\(P_1\)\(P_2\)非空,那么上述的问题可以改写为

\[\begin{align*} \min \quad &c^T_1x_1+c^T_2x_2 \\ \text{a.t.} \quad &D_1x_1+D_2x_2=b_0\\ &x_1\in P_1 \\ &x_2\in P_2. \end{align*} \]

对于\(i=1,2\),令\(x_i^j,\,j\in J_i\)\(P_i\)中的极点,令\(w_i^k,\, k\in K_i\)\(P_i\)的极射线的完全集。具体定义可回看对偶理论(五),并由该节的resolution定理可知\(P_i\)中任意元素\(x_i\)都可以表示为

\[x_i=\sum_{j\in J_i}\lambda _i^jx_i^j+\sum_{k\in K_i}\theta_i^kw_i^k, \]

其中系数\(\lambda_i^j\)\(\theta_i^k\)为非负且满足\(\sum_{j\in J_i}\lambda^j_i=1,\,i=1,2\)

那么这时候问题就变为了

称这个问题为master问题。它等价于最初提出的问题并且它是一个标准型的问题。等式约束\((6.11)-(6.13)\)也可表示为

分解算法

注意,最初的问题有\(m_0+m_1+m_2\)个约束,而master问题仅有\(m_0+2\)个约束。但是需要关注的是,master问题中的变量个数可能会非常大,因为极点和极射线的个数一般是变量和约束的指数倍。由于在master问题中变量个数可能会非常大,因此我们考虑使用修正的单纯形法(revised simplex method),因为在每一次的迭代中仅仅牵扯到\(m_0+2\)个基本变量。

假设目前有一个master问题的基本可行解,以及其相对应的基矩阵\(B\)。我们假设存在\(B^{-1}\),以及对偶变量\(p^T=c^T_BB^{-1}\)。由于约束的个数为\(m_0+2\),因此\(p\)的维数也为\(m_0+2\)。记\(p\)的前\(m_0\)个元素为\(q\),它为约束\((6.11)\)所对应的对偶变量。另外两个元素记为\(r_1\)\(r_2\),分别为约束\((6.12)\)\((6.13)\)所对应的对偶变量。综上,有\(p=(q,r_1,r_2)\)

为了确定目前的基本可行解是否是最优的,我们需要计算不同变量的判断数,并且检查其中是否存在负值。目标函数中变量\(\lambda_i^j\)的系数为\(c^T_ix^j_1\),因此,\(\lambda_1^j\)的判断数为

类似的,变量\(\theta_1^k\)在目标函数中系数为\(c^T_1w^k_1\),因此它的判断数为

下面要说明的是分解算法中很关键的一个思路,我们并不是去计算所有变量\(\lambda_1^j\)\(\theta_1^k\)的判断数,而是构造如下的线性规划问题

\[\begin{align*} \min\quad &(c^T_1-q^TD_1)x_1 \\ \text{s.t.}\quad & x_1\in P_1, \end{align*} \]

然后用单纯形法求解这个问题的解。这个问题称为第一个子问题 (first subproblem)

有三种可能性需要考虑:

  1. 如果这个问题的最优解为\(-\infty\),则说明单纯形法为我们提供了一个极射线\(w_1^k\)使得\((c_1^T-q^TD_1)w_1^k < 0\)(存在一个可以无限使得目标函数值下降的方向)。在这种情况下,变量\(\theta_1^k\)的判断数为负值,那么我们就可以使\(\theta_1^k\)相对应的列进入master问题中的基矩阵,其中列为

\[\begin{bmatrix} D_1w_1^k\\ 0\\ 0 \end{bmatrix}。 \]

  1. 如果子问题的最优解是有限的,并且小于\(r_1\),那么说明存在极点\(x_1^j\)满足\((c^T_1-q^TD_1)x_1^j < r_1\),因此,变量\(\lambda_1^j\)的判断数是负值。那么我们就可以使\(\lambda_1^k\)相对应的列进入master问题中的基矩阵,其中列为

\[\begin{bmatrix} D_1x_1^k\\ 0\\ 0 \end{bmatrix}。 \]

  1. 如果子问题的最优值是有限的且不小于\(r_1\),这说明对所有极点\(x_1^j\)都有\((c^T_1-q^TD_1)x_1^j \geq r_1\),而对所有的极射线\(w_1^k\)都有\((c^T_1-q^TD_1)w_1^k \geq 0\)。在这种情况,\(\lambda_1^j\)\(\theta_1^k\)的判断数都为非负。

类似的,可以使用上述的方法检查变量\(\lambda_2^j\)\(\theta_2^k\)的判断数。此时的,第二个子问题

\[\begin{align*} \min\quad &(c^T_1-q^TD_1)x_2 \\ \text{s.t.}\quad & x_2\in P_2. \end{align*} \]

综上,我们可以总结 Dantzig-Wolfe 分解算法

Dantzig-Wolfe 分解算法步骤

  1. 已知\(m_0+2\)个极点以及\(P_1\)\(P_2\)的极射线。另外已知master问题的一个基本可行解,以及其对应的基矩阵的逆\(B^{-1}\)和对偶变量\(p^T=(q,r_1,r_2)^T=c^T_BB^{-1}\)
  2. 构造如前面所述的两个子问题,如果第一个子问题的最优值不小于\(r_1\)且第一个问题的最优值不小于\(r_2\),那么说明master问题的变量的判断数都是非负的,也即得到了master问题的最优解,算法停止。
  3. 如果第i个子问题的最优值为\(-\infty\),那么说明存在极射线\(w_i^k\)使得变量\(\theta_i^k\)的判断数为负值,那么这个变量可以称为master问题的进基变量。
  4. 如果第i个子问题的最优值是有限的且其值小于\(r_i\),则说明存在极点\(x_i^j\)使得变量\(\lambda_i^j\)的判断数为负值,那么这个变量可以称为master问题的进基变量。
  5. 选定了进基变量,然后确定进基矩阵的列,使用修正的单纯形法并且更新\(B^{-1}\)\(p\)

方法的适用性

注意,上面提到的是存在两个子问题的过程,但是很显然我们可以将其推广到存在t个子问题的问题,如原问题为

事实上,当\(t=1\)时,这个方法仍然可用,考虑问题

\[\begin{align*} \min\quad &c^Tx \\ \text{s.t.}\quad &Dx=b_0 \\ &Fx=b\\ &\ \ \ x\geq 0, \end{align*} \]

定义多面体\(P=\{x\geq 0\mid Fx=b\}\)。类似的,仍然可以使用Dantzig-Wolfe 分解算法。注意,在前面的叙述过程中我们要求问题中的约束都是标准形式,子问题的可行域也是标准形式的。但是,这并不是必须的,只需要满足resolution定理能够应用就可以。

寻找初始解

为了开始分解算法,我们需要找到一个master问题的基本初始可行解。首先,我们先对多面体\(P_1\)\(P_2\)应用单纯形法中的第一阶段,找到两个多面体的极点\(x_1^1\)\(x_2^1\)。不妨设\(D_1x_1^1+D_2x_2^1\leq b\)(因为约束总是可以通过等价变换变成这种形式)。令\(y\)为维度为\(m_0\)的辅助变量,得到如下的辅助主问题

上述问题的一个基本可行解可这样得到:令\(\lambda_1^1=\lambda_2^1=1\), \(\lambda_i^j=0, j\not= 1\)以及\(\theta_i^k=0,\forall k\)\(y=b_0-D_1x_1^1-D_2x_2^1\)。那么现在我们就可以使用分解算法去求解这个辅助著问题。如果最优解为0,那么这个解提供给我们一个原主问题的基本可行解。

算法停止以及计算技巧

分解算法是修正的单纯形法的一个特殊情形,因此它能够保证会在有限步内停止。但是如果出现退化的情形,那么可能会需要应用一些反循环的方法,但是注意,这里Bland法并不适用,因为在这里我们入基变量的选择有针对的选择方式。

在实际应用中,加速子问题的运算的一个技巧是将上一次子问题的最优解设为下一次子问题求解的初始解。在实际应用中,分解算法一般不会比修正的单纯形法快,但是它的优点在于它极大的减少了数据储存。假设存在t个子问题,每一个有\(m_1\)个约束。那么修正的单纯形法的存储需要\(O((m_0+tm_1)^2)\),而分解算法需要\(O((m_0+t)^2)+O(m_1^2)\)

最优值的边界

分解算法可能需要很长时间才能停止,尤其是对于一些大型问题来说。下面将会叙述最优值的上届和下届,而这个界可以被用来停止算法。

定理: 假设master问题是可行的并且它的最优值\(x^*\)是有限的。令\(z\)为分解算法中某一可行解所对应的目标函数值,令\(r_i\)为第i个子问题中与类似\((6.12)\)\((6.13)\)约束相对应的对偶问题的变量,记\(z_i\)为第i个子问题的最优值,假设它是有限的,那么

\[z+\sum_i (z_i-r_i)\leq z^*\leq z. \]

证:

显然\(z^*\leq z\)成立,最优值必然小于等于一个任意可行解的目标函数值。下面证结论的左半部分。

我们在这里证明子问题个数为2的情况,一般情形的证明与之类似。master问题的对偶问题是

假设我们有一个master问题的基本可行解,且它所对应的目标函数值为\(z\),令\((q,r_1,r_2)\)为相对应的单纯形乘子。它是对偶问题的一个基本可行解且目标函数值为

\[q^Tb_0+r_1+r_2=z. \]

由于第一个子问题的最优值\(z_1\)是有界的,那么

因此,利用\(z_1\)替换\(r_1\),再结合\(q\),上式满足对偶问题中的前两个约束。类似的对\(z_2\)也有同样的结论。综上可知\((q,z_1,z_2)\)是对偶问题的一个可行解,它的目标函数值\(q^Tb_0+z_1+z_2\),根据弱对偶可知,它不大于\(z^*\),因此

\[\begin{align*} z^*&\geq q^Tb_0+z_1+z_2 \\ &=q^Tb_0+r_1+r_2+(z_1-r_1)+(z_2-r_2) \\ &=z+(z_1-r_1)+(z_2-r_2), \end{align*} \]

证毕。

参考文献: Introduction to Linear Optimization by Dimitris Bertsimas & John N. Tsitsiklis.

posted @ 2020-06-28 20:12  优化小木  阅读(4546)  评论(0)    收藏  举报