問題中許多量具有不可分割的性質(最優調度的車輛數、設置的銷售網點數......),或者問題的解必須滿足一些特殊的約束條件(滿足邏輯條件、順序......),需引入邏輯變量(0-1變量)以表示“是”與“非”。這類問題的模型均為整數規划模型。
純整數規划模型:僅由整數變量組成的模型
混合整數規划模型:普通的連續變量和整數變量同時出現的模型
如果把整數規划問題中變量的整數約束松弛為任意實數的約束,則對應的線性規划問題成為原問題的松弛問題。
求解整數規划問題比求解線性規划問題困難,至今尚無統一的有效算法。
分支定界法(Branch and Bound,簡稱B&B)
操作步驟有以下三步:
如圖可行域為OABCDE,設最優解在C處,此時Xr不是整數,我們就考慮從可行域中划分出不相交的兩部分(Sub1和Sub2),除去的部分要求包含最優解C而且不包含任何整數解的區域。
這樣用原來的目標函數,構造兩個子問題Sub1和Sub2。


1. 分支
由於這兩個子問題的可行域都是原線性規划問題的子集,這兩個子問題的最優解的目標函數值都不會比原線性規划問題的最優解的目標函數值大。
如果這兩個問題的最優解仍不是整數解,則繼續選擇一個非整數的變量,繼續講這個子問題分解為兩個更下一級的子問題。這個過程被稱為“分支”。
2. 定界
3. 比較和剪枝
每一次分支得到的子問題最優解的目標函數值,都小於或等於分之前的最優解的目標函數值。非整數解的最大值作為新的上界。
如果某一個子問題的最優解是整數解,就作為整數規划最優目標函數值的下界,多個子問題存在整數解時,取最大值。最后的下界為整數規划的最優解。
如果某一個子問題的解還不是整數解,但這個非整數解的目標函數值已經小於這個下界,那么這個子問題就不必再進行分支。
確定整數解的目標函數值上下界不斷更新,“剪除”目標函數值小於下界的分支的過程,稱為定界。

例如:

解得X=(5/3 , 8/3)^T , Z = 44/3
我們就可以把它分成X1≤1和X2≥2兩個分支。
1. 深探法
對LP2進行深探,LP2不滿足整數解條件,對LP2的分支LP3和LP4進行深探,發現是滿足的。
在對LP1的另一個分支LP5深探。LP5滿足整數解條件,比較目標函數值之后,LP5的解是最優解。

2. 廣探法
由於LP1的分支LP2不符合整數解要求,而另一分支LP3符合,進行剪枝即可,沒有必要對LP2分支。

3. 混探法
(先廣探,再找一枝看似有希望的分支進行深探)
圖的遍歷算法中,有兩個基本搜索算法:
-
深度優先搜索DFS(深探法)
-
廣度優先搜索BFS(廣探法)
DFS算法計算所需內存較小,搜索到最優解計算次數的期望值較大。
BFS搜索到最優解計算次數的期望值較小,但所需內存空間很大。
不管是深探法、廣探法、還是混探法都不能避免最優解在搜遍所有節點后才確定的情況。但是一個好的分支定界搜索算法可以在平均意義下提高算法的搜索效率。
指派問題與匈牙利法

指派問題模型為一個0-1規划模型。

標准的指派問題是一類特殊的整數規划問題,又是特殊的0-1規划問題和特殊的運輸問題。匈牙利解法的關鍵是利用了指派問題最優解的性質:若從指派問題系數矩陣的某行(或某列)各元素分別減去一個常數k,得到新的矩陣與原矩陣有相同的最優解。
對於指派問題,由於系數矩陣均為非負,故若能載系數矩陣中找到n個不同行和不同列的0元素(獨立的0元素),則對應的指派方案總費用為0,從而一定是最優的。
例題:

1. 減去最小數
費用矩陣每行減去該行的最小數,使最小數變0
費用矩陣每列減去該列的最小數,使最小數變0
即:先對行操作,

再對列操作,

2. 試分配
先找0最少的行,給0畫圈,划去與圈同行以及同列的0
再找0最少的列,給0畫圈,划去與圈同行以及同列的0
不斷進行以上這組操作,直到所有的0被圈掉或划掉。
就得到:

- 無O行打√
- 新打√行找0,對有0列打√
- 新打√列找O,對有O行打√
反復2和3,直到打不出√。最后,對無√行划橫線,有√列划豎線,構成覆蓋零的最少直線

3. 匈牙利法:找覆蓋0的最少直線(直線數與圈數相符)
令𝜽 為未覆蓋數中最小者(此例中𝜽是1)
1. 未覆蓋數 統一減去𝜽
2. 單線覆蓋數保持不變
3. 雙線覆蓋數統一加上𝜽
(打√ 行減𝜽 ,打√ 列加𝜽 )
得到:

對這個新的費用矩陣用圈0划0,使用匈牙利法.

得到:
於是,可以安排:甲——B;乙——C;丙——D;丁——E;戊——A
總費用最小為:5+7+6+6=28。
