分支限界法解決01背包問題


1. 問題描述

設有n個物體和一個背包,物體i的重量為wi價值為pi ,背包的載荷為M, 若將物體i(1<= i <=n)裝入背包,則有價值為pi . 目標是找到一個方案, 使得能放入背包的物體總價值最高.

設N=3, W=(16,15,15),   P=(45,25,25), C=30(背包容量)

2. 隊列式分支限界法

可以通過畫分支限界法狀態空間樹的搜索圖來理解具體思想和流程

每一層按順序對應一個物品放入背包(1)還是不放入背包(0)

步驟:

用一個隊列存儲活結點表,初始為空

A為當前擴展結點,其兒子結點B和C均為可行結點,將其按從左到右順序加入活結點隊列,並舍棄A。

按FIFO原則,下一擴展結點為B,其兒子結點D不可行,舍棄;E可行,加入。舍棄B

C為當前擴展結點,兒子結點F、G均為可行結點,加入活結點表,舍棄C

擴展結點E的兒子結點J不可行而舍棄;K為可行的葉結點,是問題的一個可行解,價值為45

當前活結點隊列的隊首為F, 兒子結點L、M為可行葉結點,價值為50、25

G為最后一個擴展結點,兒子結點N、O均為可行葉結點,其價值為25和0

活結點隊列為空,算法結束,其最優值為50

注:活結點就是不可再進行擴展的節點,也就是兩個兒子還沒有全部生成的節點

 3. 優先隊列式分支限界法

3.1 以活結點價值為優先級准則

步驟:

用一個極大堆表示活結點表的優先隊列,其優先級定義為活結點所獲得的價值。初始為空。

由A開始搜索解空間樹,其兒子結點B、C為可行結點,加入堆中,舍棄A。

B獲得價值45,C為0. B為堆中價值最大元素,並成為下一擴展結點。

B的兒子結點D是不可行結點,舍棄。E是可行結點,加入到堆中。舍棄B。

E的價值為45,是堆中最大元素,為當前擴展結點。

E的兒子J是不可行葉結點,舍棄。K是可行葉結點,為問題的一個可行解價值為45。

繼續擴展堆中唯一活結點C,直至存儲活結點的堆為空,算法結束。

算法搜索得到最優值為50,最優解為從根結點A到葉結點L的路徑(0,1,1)。

3.2 以限界函數為優先級准則

應用貪心法求得近似解為(1, 0, 0, 0),獲得的價值為40,這可以作為0/1背包問題的下界。

如何求得0/1背包問題的一個合理的上界呢?考慮最好情況,背包中裝入的全部是第1個物品且可以將背包裝滿,則可以得到一個非常簡單的上界的計算方法:

b=W×(v1/w1)=10×10=100。於是,得到了目標函數的界[40, 100]。

所以我們定義限界函數為:

再來畫狀態空間樹的搜索圖:

步驟:

在根結點1,沒有將任何物品裝入背包,因此,背包的重量和獲得的價值均為0,根據限界函數計算結點1的目標函數值為10×10=100;

在結點2,將物品1裝入背包,因此,背包的重量為4,獲得的價值為40,目標函數值為40 + (10-4)×6=76,將結點2加入待處理結點表PT中;在結點3,沒有將物品1裝入背包,因此,背包的重量和獲得的價值仍為0,目標函數值為10×6=60,將結點3加入表PT中;

在表PT中選取目標函數值取得極大的結點2優先進行搜索;

在結點4,將物品2裝入背包,因此,背包的重量為11,不滿足約束條件,將結點4丟棄;在結點5,沒有將物品2裝入背包,因此,背包的重量和獲得的價值與結點2相同,目標函數值為40 + (10-4)×5=70,將結點5加入表PT中;

在表PT中選取目標函數值取得極大的結點5優先進行搜索;

在結點6,將物品3裝入背包,因此,背包的重量為9,獲得的價值為65,目標函數值為65 + (10-9)×4=69,將結點6加入表PT中;在結點7,沒有將物品3裝入背包,因此,背包的重量和獲得的價值與結點5相同,目標函數值為40 + (10-4)×4=64,將結點6加入表PT中;

在表PT中選取目標函數值取得極大的結點6優先進行搜索;

在結點8,將物品4裝入背包,因此,背包的重量為12,不滿足約束條件,將結點8丟棄;在結點9,沒有將物品4裝入背包,因此,背包的重量和獲得的價值與結點6相同,目標函數值為65;

由於結點9是葉子結點,同時結點9的目標函數值是表PT中的極大值,所以,結點9對應的解即是問題的最優解,搜索結束。

總結:

剪枝函數給出每個可行結點相應的子樹可能獲得的最大價值的上界。

如這個上界不會比當前最優值更大,則可以剪去相應的子樹。

也可將上界函數確定的每個結點的上界值作為優先級,以該優先級的非增序抽取當前擴展結點。由此可快速獲得最優解。

 


免責聲明!

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



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