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.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM