解空间树的动态搜索 1.分支限界法首先确定一个合理的限界函数,并根据限界 函数确定目标函数的界[down,up]: 2.然后按照广度优先策略遍历问题的解空间树,在某一分 支上,依次搜索该结点的所有孩子结点,分别估算这些 孩子结点的目标函数的可能取值(对最小化问题,估算 结点的down,对最大化问题,估算结点的up)。 3.如果某孩子结点的目标函数值超出目标函数的界,则将 其丢弃(从此结点生成的解不会比目前已得的更好), 否则加入活动表等待处理
解空间树的动态搜索 1. 分支限界法首先确定一个合理的限界函数,并根据限界 函数确定目标函数的界[down, up]; 2. 然后按照广度优先策略遍历问题的解空间树,在某一分 支上,依次搜索该结点的所有孩子结点,分别估算这些 孩子结点的目标函数的可能取值(对最小化问题,估算 结点的down,对最大化问题,估算结点的up)。 3. 如果某孩子结点的目标函数值超出目标函数的界,则将 其丢弃(从此结点生成的解不会比目前已得的更好), 否则加入活动表等待处理
0/1背包的分支限界法过程 问题描述 容量w=10 物品 重(w) 价() 价重(vhw) 1 4 40 10 2 7 42 6 3 5 25 5 4 3 12 4
0/1背包的分支限界法过程 问题描述 物品 重(w) 价(v) 价/重(v/w) 1 4 40 10 2 7 42 6 3 5 25 5 4 3 12 4 容量w=10
3分析:问题的解可表示为元向量{X,2,…X,}, x∈{0,1},则可用子集树表示解空间,在树中做广 度优先搜索。 Φ约束条件:∑wx≤W i三 $目标函数:V=max∑y,x ·下界Vb=40(1,0,0,0)一贪心思想; 目标函数的界: ·上界Vb=0+(O)×(y/w) [40,100] =0+(10-0)×10=100: φ限界函数: ub=Y+(W-w)×(+/w,+) 前个物品获得的价值 剩余容量全部装入物品+1, 最多能够获得的价值
分析:问题的解可表示为n元向量{x1 , x2 , ... xn }, xi{0,1},则可用子集树表示解空间, 在树中做广 度优先搜索。 约束条件: 目标函数: • 下界Vdb=40 (1, 0, 0, 0)—贪心思想; • 上界Vub=0+(W-0)×(v1 /w1 ) =0+(10-0)×10=100; 限界函数: ( ) ( ) = + − i+1 wi+1 ub v W w v w x W n i i i =1 = = n i i i V v x 1 max 目标函数的界: [40, 100] 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 2 4 8 9 10 11 12 13 14 15 5 6 7 3 前i个物品获得的价值 剩余容量全部装入物品i+1, 最多能够获得的价值
b=v+(W-w)×(y+1/w,+1) 3分支限界法求解0/1背包问题: 目标函数范围:[40,100] wF(4,7,5,3) (40,42,25,12) w=0,y=0 ub=100 v/w,=(10,6,5,4) X1=1 X=0 2 3 PT={2,3} w=4,=40 w=0,y=0 ub=76 ub=60 X2=1 x2=0 4 5 w=11 w=4,=40 无效解 ub=70 PT={5,3} X31 &3=0 6 7 w=9,=65 w=4,=40 ub=69 ub=64 PT={6,7,3} X=1 X4=0 8 × 9 w=12 w=9,=65 V=65 无效解 ub=65 PT=9,7,3} X=(1,0,1,0)
分支限界法求解0/1背包问题: × w=0, v=0 ub=100 w=4, v=40 ub=76 w=0, v=0 ub=60 w=11 w=4, v=40 ub=70 w=9, v=65 ub=69 w=4, v=40 ub=64 w=12 w=9, v=65 ub=65 2 3 4 5 6 7 8 9 × 1 PT={2, 3} 无效解 PT={5, 3} PT={6, 7, 3} 无效解 x1=1 x1=0 x2=1 x2=0 x3=1 x3=0 x4=1 x4=0 PT={9, 7, 3} V=65 X=(1, 0, 1, 0) 目标函数范围:[40, 100] wi=(4, 7, 5, 3) vi= (40, 42, 25, 12) vi /wi=(10, 6, 5, 4) ( ) ( ) = + − i+1 wi+1 ub v W w v
0-1背包问题 算法的思想 首先,要对输入数据进行预处理,将各物品依其单位重量 价值从大到小进行排列。 在下面描述的优先队列分支限界法中,结点的优先级由已 装袋的物品价值加上剩下的最大单位重量价值的物品装满剩余 容量的价值和。 算法首先检查当前扩展结点的左儿子结点的可行性。如果 该左儿子结点是可行结点,则将它加入到子集树和活结点优 先队列中。当前扩展结点的右儿子结点一定是可行结点,仅 当右儿子结点满足上界约束时才将它加入子集树和活结点优 先队列。当扩展到叶结点时为问题的最优值
0-1背包问题 算法的思想 首先,要对输入数据进行预处理,将各物品依其单位重量 价值从大到小进行排列。 在下面描述的优先队列分支限界法中,结点的优先级由已 装袋的物品价值加上剩下的最大单位重量价值的物品装满剩余 容量的价值和。 算法首先检查当前扩展结点的左儿子结点的可行性。如果 该左儿子结点是可行结点,则将它加入到子集树和活结点优 先队列中。当前扩展结点的右儿子结点一定是可行结点,仅 当右儿子结点满足上界约束时才将它加入子集树和活结点优 先队列。当扩展到叶结点时为问题的最优值