【數學建模算法】(4)整數規劃的基本概念和常規算法:分枝定界法

之前的三節我們討論了關于線性規劃的相關知識,在實際問題中,比如運輸問題,線性規劃的變量有一個隱藏的要求——整數,而Matlab中的線性規劃算法算出的最優變量一般不會是整數,那么我們有什么辦法求出符合整數條件的變量呢,這一節我們就來聊聊線性規劃的特殊情況,整數規劃。

整數規劃的定義

規劃中的變量(部分或全部)限制為整數時,稱為整數規劃。若在線性規劃模型中,變量限制為整數,則稱為整數線性規劃。目前所流行的求解整數規劃的方法,往往只適用于整數線性規劃。目前還沒有一種方法能有效地求解一切整數規劃。

整數規劃的分類

如不加特殊說明,一般指整數線性規劃。對于整數線性規劃模型大致可分為兩類:
1.變量全部為整數的,為完全整數規劃
2.變量部分限制為整數的,稱為混合整數規劃

整數規劃的特點

1.原線性規劃有最優解,當自變量限制為整數后,其整數規劃解出現下述情況:

(1)原線性規劃最優解全是整數,則整數規劃最優解與線性規劃最優解一致。

(2)整數規劃無可行解。
例1\min z=x_{1}+x_{2}
2 x_{1}+4 x_{2}=5, \quad x_{1} \geq 0, \quad x_{2} \geq 0
易知沒有能滿足限制條件的整數解。故若作為一個整數規劃問題,該問題無可行解。

(3)有可行解(也就是存在最優解),但最優解值變差。
例2 \min \quad z=x_{1}+x_{2}
2 x_{1}+4 x_{2}=6, \quad x_{1} \geq 0, \quad x_{2} \geq 0

其最優實數解為:
x_{1}=0, x_{2}=\frac{3}{2}, \min z=\frac{3}{2}
若限制整數:
x_{1}=1, x_{2}=1, \min z=2

2. 整數規劃最優解不能按照實數最優解簡單取整而獲得。

求解方法分類

整數規劃算法分類

下面將對整數規劃算法進行一一介紹。

分枝定界法

對有約束條件的最優化問題(其可行解為有限數)的所有可行解空間恰當地進行系統搜索,這就是分枝定界內容。

分枝:把全部可行解空間反復地分割為越來越小的子集,稱為分枝。
定界:并且對每個子集內的解集計算一個目標下界(對于最小值問題),這稱為定界。
剪枝:在每次分枝后,凡是界限超出已知可行解集目標值的那些子集不再進一步分枝,這樣,許多子集可不予考慮,這稱剪枝。
上面就是分枝定界法的一個主要流程,下面將用一個例題來詳細說明。

例3 求解下列整數規劃問題
\operatorname{Max} \quad z=40 x_{1}+90 x_{2}
\left\{\begin{array}{l}{9 x_{1}+7 x_{2} \leq 56} \\ {7 x_{1}+20 x_{2} \leq 70} \\ {x_{1}, x_{2} \geq 0}\end{array}\right.且為整數

1.假設整數規劃問題為A,對應的非整數規劃問題為B,從求解問題B開始。
得到最優解為:
x_{1}=4.8092, x_{2}=1.8168, z=355.8779
此時的z是問題A所能求得的目標函數值的上界,記為\overline{z},而x_{1}=0, x_{2}=0顯然是一個整數可行解,這時z=0,是問題A所能求得的目標函數的下界。將問題B的目標函數值設為z^{*},此時0 \leq z^{*} \leq 356

2.選x_{1}進行分枝,把可行集分成兩個子集:
x_{1} \leq[4.8092]=4, \quad x_{1} \geq[4.8092]+1=5
由于4與5之間無整數,所以兩個子集的整數解必與原可行集合整數解一致。這一步稱為分枝。對兩個子集分別進行規劃和求解。

設問題B_{1}
Max \quad z=40 x_{1}+90 x_{2}
\left\{\begin{array}{l}{9 x_{1}+7 x_{2} \leq 56} \\ {7 x_{1}+20 x_{2} \leq 70} \\ {0 \leq x_{1} \leq 4, x_{2} \geq 0}\end{array}\right.
最優解為:
x_{1}=4.0, x_{2}=2.1, z_{1}=349
設問題B_{2}
Max \quad z=40 x_{1}+90 x_{2}
\left\{\begin{array}{l}{9 x_{1}+7 x_{2} \leq 56} \\ {7 x_{1}+20 x_{2} \leq 70} \\ {x_{1} \geq 5, x_{2} \geq 0}\end{array}\right.
最優解為:
x_{1}=5.0, x_{2}=1.57, z_{1}=341.4

再定界:
0 \leq z^{*} \leq 349

3.對問題B_{1}再進行分枝得問題B_{1 1}B_{1 2}

設問題B_{1 1}
Max \quad z=40 x_{1}+90 x_{2}
\left\{\begin{array}{l}{9 x_{1}+7 x_{2} \leq 56} \\ {7 x_{1}+20 x_{2} \leq 70} \\ {0 \leq x_{1} \leq 4, 0\leq x_{2} \leq 2}\end{array}\right.
問題B_{1 2}
Max \quad z=40 x_{1}+90 x_{2}
\left\{\begin{array}{l}{9 x_{1}+7 x_{2} \leq 56} \\ {7 x_{1}+20 x_{2} \leq 70} \\ {0 \leq x_{1} \leq 4, x_{2} \geq 3}\end{array}\right.
他們的最優解為。
B_{11} : \quad x_{1}=4, x_{2}=2, z_{11}=340
B_{12} : \quad x_{1}=1.43, x_{2}=3.00, z_{12}=327.14
B_{1 2}剪枝,因為其得到的z已經不在第一輪的定界中了,綜合B_{2}得到新界:
340 \leq z^{*} \leq 341

4.對問題B_{2}再次分枝為B_{2 1}B_{2 2}

設問題B_{21}
Max \quad z=40 x_{1}+90 x_{2}
\left\{\begin{array}{l}{9 x_{1}+7 x_{2} \leq 56} \\ {7 x_{1}+20 x_{2} \leq 70} \\ {x_{1} \geq 5, 0 \leq x_{2} \leq 1}\end{array}\right.
設問題B_{22}
Max \quad z=40 x_{1}+90 x_{2}
\left\{\begin{array}{l}{9 x_{1}+7 x_{2} \leq 56} \\ {7 x_{1}+20 x_{2} \leq 70} \\ {x_{1} \geq 5, x_{2} \geq 2}\end{array}\right.
其最優解為:
B_{21}:x_{1}=5.44, x_{2}=1.00, z_{22}=308
B_{22}:無可行解
由于B_{21}所得出的解不在之前定界范圍內,所以B_{21}B_{22}均被剪枝。

5.綜上,得到最優解:
x_{1}=4, x_{2}=2, z^{*}=340

分枝定界法的一般步驟

從上述問題中可以總結出分枝定界法的一般步驟:

一。將要求解的整數規劃問題稱為問題A,對應的整數規劃問題稱為問題B,先對問題B進行求解,可能得到以下情況。
1.B無可行解,則A也定無可行解,計算終止,此題無可行解。
2.B有最優解,且最優解為整數解,此時計算終止,B的最優解同時也是A的最優解。
3.B有最優解,但最優解不是整數解,記下此時目標函數值為\overline{z}
一般來說,可代入各自變量的最小值獲得z的最小值\underline{z},得到初始定界:
\underline{z} \leq z^{*} \leq \overline{z}

二。迭代
1.分枝:在B的最優解中任選一個不符合整數條件的變量x_{j},其值為b_{j}\left[b_{j}\right]表示不大于b_{j}的最大整數,構造兩個約束條件:
x_{j} \leq\left[b_{j}\right] 和 \quad x_{j} \geq\left[b_{j}\right]+1
用這兩個分支分別替換問題B中對應變量的限制條件,不考慮整數條件求解兩個后繼問題。
2.定界:以每個后繼問題為一分枝標明求解的結果,與其它問題的解的結果中,找出最優目標函數值最大者作為新的上界,從已符合整數條件的各分支中,找出目標函數值為最大者作為新的下界。若無符合整數條件的結果則下界不變。
3.比較和剪枝:若各分支的最優目標函數有小于\underline{z}的,則直接剪掉這枝,若大于\overline{z}但不符合整數條件,則重復迭代步驟中的第一步,再選一個不符合整數條件的變量重復運算,直到得到z^{*}=\underline{z},則運算結束,得到最優整數解。

本節對整數規劃問題有了一個基本的論述并介紹了其中一個經典算法——分枝定界法。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容