之前的三節我們討論了關于線性規劃的相關知識,在實際問題中,比如運輸問題,線性規劃的變量有一個隱藏的要求——整數,而Matlab中的線性規劃算法算出的最優變量一般不會是整數,那么我們有什么辦法求出符合整數條件的變量呢,這一節我們就來聊聊線性規劃的特殊情況,整數規劃。
整數規劃的定義
規劃中的變量(部分或全部)限制為整數時,稱為整數規劃。若在線性規劃模型中,變量限制為整數,則稱為整數線性規劃。目前所流行的求解整數規劃的方法,往往只適用于整數線性規劃。目前還沒有一種方法能有效地求解一切整數規劃。
整數規劃的分類
如不加特殊說明,一般指整數線性規劃。對于整數線性規劃模型大致可分為兩類:
1.變量全部為整數的,為完全整數規劃。
2.變量部分限制為整數的,稱為混合整數規劃。
整數規劃的特點
1.原線性規劃有最優解,當自變量限制為整數后,其整數規劃解出現下述情況:
(1)原線性規劃最優解全是整數,則整數規劃最優解與線性規劃最優解一致。
(2)整數規劃無可行解。
例1![]()
易知沒有能滿足限制條件的整數解。故若作為一個整數規劃問題,該問題無可行解。
(3)有可行解(也就是存在最優解),但最優解值變差。
例2
其最優實數解為:
若限制整數:
2. 整數規劃最優解不能按照實數最優解簡單取整而獲得。
求解方法分類
下面將對整數規劃算法進行一一介紹。
分枝定界法
對有約束條件的最優化問題(其可行解為有限數)的所有可行解空間恰當地進行系統搜索,這就是分枝與定界內容。
分枝:把全部可行解空間反復地分割為越來越小的子集,稱為分枝。
定界:并且對每個子集內的解集計算一個目標下界(對于最小值問題),這稱為定界。
剪枝:在每次分枝后,凡是界限超出已知可行解集目標值的那些子集不再進一步分枝,這樣,許多子集可不予考慮,這稱剪枝。
上面就是分枝定界法的一個主要流程,下面將用一個例題來詳細說明。
例3 求解下列整數規劃問題
1.假設整數規劃問題為
,對應的非整數規劃問題為
,從求解問題
開始。
得到最優解為:
此時的是問題
所能求得的目標函數值的上界,記為
,而
顯然是一個整數可行解,這時
,是問題
所能求得的目標函數的下界。將問題
的目標函數值設為
,此時
。
2.選
進行分枝,把可行集分成兩個子集:
由于4與5之間無整數,所以兩個子集的整數解必與原可行集合整數解一致。這一步稱為分枝。對兩個子集分別進行規劃和求解。設問題
最優解為:
設問題
最優解為:
再定界:
3.對問題
再進行分枝得問題
和
,
設問題
問題
他們的最優解為。
將剪枝,因為其得到的
已經不在第一輪的定界中了,綜合
得到新界:
4.對問題
再次分枝為
和
。
設問題
設問題
其最優解為:
無可行解
由于所得出的解不在之前定界范圍內,所以
,
均被剪枝。
5.綜上,得到最優解:
分枝定界法的一般步驟
從上述問題中可以總結出分枝定界法的一般步驟:
一。將要求解的整數規劃問題稱為問題
,對應的整數規劃問題稱為問題
,先對問題
進行求解,可能得到以下情況。
1.無可行解,則
也定無可行解,計算終止,此題無可行解。
2.有最優解,且最優解為整數解,此時計算終止,
的最優解同時也是
的最優解。
3.有最優解,但最優解不是整數解,記下此時目標函數值為
。
一般來說,可代入各自變量的最小值獲得的最小值
,得到初始定界:
二。迭代
1.分枝:在的最優解中任選一個不符合整數條件的變量
,其值為
以
表示不大于
的最大整數,構造兩個約束條件:
用這兩個分支分別替換問題中對應變量的限制條件,不考慮整數條件求解兩個后繼問題。
2.定界:以每個后繼問題為一分枝標明求解的結果,與其它問題的解的結果中,找出最優目標函數值最大者作為新的上界,從已符合整數條件的各分支中,找出目標函數值為最大者作為新的下界。若無符合整數條件的結果則下界不變。
3.比較和剪枝:若各分支的最優目標函數有小于的,則直接剪掉這枝,若大于
但不符合整數條件,則重復迭代步驟中的第一步,再選一個不符合整數條件的變量重復運算,直到得到
,則運算結束,得到最優整數解。
本節對整數規劃問題有了一個基本的論述并介紹了其中一個經典算法——分枝定界法。