0/1背包问题:设有4个物体,其重量分别为(4,7,5,3),价值为(40,42,25,12),背包容量W = 10.
将货物按单位重量价值排序得到:
物体编号 |
单位重量(W) |
单位价值(V) |
价值/重量(V/W) |
a |
4 |
40 |
10 |
b |
7 |
42 |
6 |
c |
5 |
25 |
5 |
d |
3 |
12 |
4 |
使用分支限界法求解:
1.初始界限的设定:
如果只取A得到(1,0,0,0),获得的价值为40,可以作为下界,即db = 40.如果包内放置的都是A价值的物品,则ub = W*(Va/Wa)= 10*10 = 100 .所以初始界限为:[40,100]
2.界限函数的设定:
解空间树中第i层的每个节点都代表对物品1→i做出的特定选择.这个选择由从根节点到该节点的路径唯一确定:左分支表示装入某物品,右分支表示不装入该物品.对于第i层某个节点,设包中以装入物品重量为w,获得价值为v,则包中剩余W-w与剩余下的物品的最大单位重量价值Vi+1/Wi+1的积,于是得到限界函数:
Ub = v + (W-w)*(Vi+1/Wi+1)
(1).根结点1,没有任何物品装包,包重和价值都为0,由限界函数算得1的目标函数值为100.
(2).将a装入包内,得包重4,包价值10,目标函数值为40+(10-4)*6 = 76,将结点2加入待处理表PT中;结点3没有将a加入,故其包重10,包价值0.目标函数值为10*6=60.将结点3加入PT中.
(3).在表PT中选取目标函数值取得极大的结点2优先进行搜索.
(4).在结点4,将物品2装入背包,因此,背包的重量为11,不满足约束条件,将结点4丢弃;在结点5,没有将物品2装入背包,因此,背包重量和获得的价值与结点2相同,目标函数值为40+(10-4)*5=70,将结点5加入表PT中.
(5).在PT中选择目标函数值取得极大的结点5优先进行搜索.
(6).在结点6,装入物品3,包重为9,价值为65,目标函数价值为65+(10-9)*4=69,将结点6加入PT中;在结点7,没有将物品3装入背包,因此包重及价值与结点5相同,目标函数值为40+(10-4)*4=64,将结点6加入PT表中.
(7).在PT中选取目标函数值取得极大的结点6优先进行搜索.
(8).在结点8,将物品d装入背包,得到包重为12,不满足约束条件,将结点8丢弃;在结点9,没有将物品4装入背包,因此背包重量和获得的价值与结点6相同,目标函数值为65.
(9).由于结点9是叶子结点,同事结点9的目标函数值是PT中的极大值,所以结点9对应的解就是问题的最优解,搜索结束.