Upload
vuhuong
View
219
Download
0
Embed Size (px)
Citation preview
Tyson Kendon © 2007 1
Branch & Bound
• Another technique for optimization, this time as an and-tree
• Guaranteed to provide the globally optimum solution to a problem, but may need to go through many states taking up time and space
• Use a function fBound to determine which branches can be worked on and which do not need work
1
Tyson Kendon © 2007 2
0-1 Knapsack Problem (as GA)
c = (2,4,1,1)
p = (10,12,2,1)
pi/ci = (5,3,2,1)
2
Tyson Kendon © 2007 3
Search Control 1
• Change any nodes that can change to yes (if there is more than one chose left-most)
• Otherwise choose the node with the highest fBound
• Choose the xi to work on where i is smallest
3
Tyson Kendon © 2007 4
Branch & Bound
(!, !, !, !) ?Bound = 16
1 x Item 1 10 profit, 2 cost
.5 x Item 2 6 profit, 2 cost
Env:Maxsol = 0
S0
4
Tyson Kendon © 2007 5
Branch & Bound
(!, !, !, !) ?Bound = 16
Env:Maxsol = 0
S0
(0, !, !, !) ?Bound = 12
(1, !, !, !) ?Bound = 16
5
Tyson Kendon © 2007 6
Branch & Bound(!, !, !, !) ?
Bound = 16 Env:Maxsol = 0
S1
(0, !, !, !) ?Bound = 12
(1, !, !, !) ?Bound = 16
(1, 0, !, !) ?Bound = 13
(1, 1, !, !) ?Bound = 16
6
Tyson Kendon © 2007 7
(1, 1, !, !) ?Bound = 16
Branch & Bound(!, !, !, !) ?
Bound = 16 Env:Maxsol = 0
S2
(0, !, !, !) ?Bound = 12
(1, !, !, !) ?Bound = 16
(1, 0, !, !) ?Bound = 13
(1, 1, !, !) yesBound = 16
7
Tyson Kendon © 2007 8
Branch & Bound(!, !, !, !) ?
Bound = 16 Env:Maxsol = 0
S3
(1, 1, !, !) yesBound = 16
(0, !, !, !) ?Bound = 12
(1, !, !, !) ?Bound = 16
(1, 0, !, !) ?Bound = 13
(1, 0, 0, !) ?Bound = 11
(1, 0, 1, !) ?Bound = 13
8
Tyson Kendon © 2007 9
Branch & Bound(!, !, !, !) ?
Bound = 16 Env:Maxsol = 0
S4
(1, 1, !, !) yesBound = 16
(0, !, !, !) ?Bound = 12
(1, !, !, !) ?Bound = 16
(1, 0, !, !) ?Bound = 13
(1, 0, 0, !) ?Bound = 11
(1, 0, 1, !) ?Bound = 13
(1, 0, 1, 0) ?Bound = 12
(1, 0, 1, 1) ?Bound = 13
9
Tyson Kendon © 2007 10
Branch & Bound(!, !, !, !) ?
Bound = 16 Env:Maxsol = 0
S5
(1, 1, !, !) yesBound = 16
(0, !, !, !) ?Bound = 12
(1, !, !, !) ?Bound = 16
(1, 0, !, !) ?Bound = 13
(1, 0, 0, !) ?Bound = 11
(1, 0, 1, !) ?Bound = 13
(1, 0, 1, 0) ?Bound = 12
(1, 0, 1, 1) ?Bound = 13
(1, 0, 1, 0) yesBound = 12
Env:Maxsol = 12
10
Tyson Kendon © 2007 11
Branch & Bound(!, !, !, !) ?
Bound = 16 Env:Maxsol = 12
S6
(1, 1, !, !) yesBound = 16
(0, !, !, !) ?Bound = 12
(1, !, !, !) ?Bound = 16
(1, 0, !, !) ?Bound = 13
(1, 0, 0, !) ?Bound = 11
(1, 0, 1, !) ?Bound = 13
(1, 0, 1, 0) ?Bound = 12
(1, 0, 1, 1) ?Bound = 13
(1, 0, 1, 0) yesBound = 12
(0, !, !, !) yesBound = 12
11
Tyson Kendon © 2007 12
Branch & Bound(!, !, !, !) ?
Bound = 16 Env:Maxsol = 12
S7
(1, 1, !, !) yesBound = 16
(0, !, !, !) ?Bound = 12
(1, !, !, !) ?Bound = 16
(1, 0, !, !) ?Bound = 13
(1, 0, 0, !) ?Bound = 11
(1, 0, 1, !) ?Bound = 13
(1, 0, 1, 0) ?Bound = 12
(1, 0, 1, 1) ?Bound = 13
(1, 0, 1, 0) yesBound = 12
(0, !, !, !) yesBound = 12
(1, 0, 0, !) yesBound = 11
12
Tyson Kendon © 2007 13
Branch & Bound(!, !, !, !) ?
Bound = 16 Env:Maxsol = 12
S8
(1, 1, !, !) yesBound = 16
(0, !, !, !) ?Bound = 12
(1, !, !, !) ?Bound = 16
(1, 0, !, !) ?Bound = 13
(1, 0, 0, !) ?Bound = 11
(1, 0, 1, !) ?Bound = 13
(1, 0, 1, 0) ?Bound = 12
(1, 0, 1, 1) ?Bound = 13
(1, 0, 1, 0) yesBound = 12
(0, !, !, !) yesBound = 12
(1, 0, 0, !) yesBound = 11
(1, 0, 1, 1) yesBound = 13
Env:Maxsol = 13
13
Tyson Kendon © 2007 14
Search Control 2
• Change any nodes that can change to yes (if there is more than one chose left-most)
• Otherwise choose the node with the highest fBound
• Choose the xi to work on where pi/ci is highest
14
Tyson Kendon © 2007 15
Branch & Bound
(!, !, !, !) ?Bound = 16
Env:Maxsol = 0
S0
(!, 0, !, !) ?Bound = 13
(!, 1, !, !) ?Bound = 12
15
Tyson Kendon © 2007 16
Branch & Bound(!, !, !, !) ?
Bound = 16 Env:Maxsol = 0
S1
(!, 0, !, !) ?Bound = 13
(!, 1, !, !) ?Bound = 12
(0, 0, !, !) ?Bound = 3
(1, 0, !, !) ?Bound = 13
16
Tyson Kendon © 2007 17
Branch & Bound(!, !, !, !) ?
Bound = 16 Env:Maxsol = 0
S2
(1, 0, !, !) ?Bound = 13
(!, 0, !, !) ?Bound = 13
(!, 1, !, !) ?Bound = 12
(0, 0, !, !) ?Bound = 3
(1, 0, 0, !) ?Bound = 11
(1, 0, 1, !) ?Bound = 13
17
Tyson Kendon © 2007 18
Branch & Bound(!, !, !, !) ?
Bound = 16 Env:Maxsol = 0
S3
(1, 0, !, !) ?Bound = 13
(!, 0, !, !) ?Bound = 13
(!, 1, !, !) ?Bound = 12
(0, 0, !, !) ?Bound = 3
(1, 0, 0, !) ?Bound = 11
(1, 0, 1, !) ?Bound = 13
(1, 0, 1, 0) ?Bound = 12
(1, 0, 1, 1) ?Bound = 13
18
Tyson Kendon © 2007 19
Branch & Bound(!, !, !, !) ?
Bound = 16 Env:Maxsol = 0
S4
(1, 0, !, !) ?Bound = 13
(!, 0, !, !) ?Bound = 13
(!, 1, !, !) ?Bound = 12
(0, 0, !, !) ?Bound = 3
(1, 0, 0, !) ?Bound = 11
(1, 0, 1, !) ?Bound = 13
(1, 0, 1, 0) ?Bound = 12
(1, 0, 1, 1) ?Bound = 13
(1, 0, 1, 0) yesBound = 12
Env:Maxsol = 12
19
Tyson Kendon © 2007 20
Branch & Bound(!, !, !, !) ?
Bound = 16 Env:Maxsol = 12
S5
(1, 0, !, !) ?Bound = 13
(!, 0, !, !) ?Bound = 13
(!, 1, !, !) ?Bound = 12
(0, 0, !, !) ?Bound = 3
(1, 0, 0, !) ?Bound = 11
(1, 0, 1, !) ?Bound = 13
(1, 0, 1, 0) ?Bound = 12
(1, 0, 1, 1) ?Bound = 13
(1, 0, 1, 0) yesBound = 12
(0, 0, !, !) yesBound = 3
20
Tyson Kendon © 2007 21
Branch & Bound(!, !, !, !) ?
Bound = 16 Env:Maxsol = 12
S6
(1, 0, !, !) ?Bound = 13
(!, 0, !, !) ?Bound = 13
(!, 1, !, !) ?Bound = 12
(0, 0, !, !) ?Bound = 3
(1, 0, 0, !) ?Bound = 11
(1, 0, 1, !) ?Bound = 13
(1, 0, 1, 0) ?Bound = 12
(1, 0, 1, 1) ?Bound = 13
(1, 0, 1, 0) yesBound = 12
(0, 0, !, !) yesBound = 3
(1, 0, 0, !) yesBound = 11
21
Tyson Kendon © 2007 22
Branch & Bound(!, !, !, !) ?
Bound = 16 Env:Maxsol = 12
S7
(1, 0, !, !) ?Bound = 13
(!, 0, !, !) ?Bound = 13
(!, 1, !, !) ?Bound = 12
(0, 0, !, !) ?Bound = 3
(1, 0, 0, !) ?Bound = 11
(1, 0, 1, !) ?Bound = 13
(1, 0, 1, 0) ?Bound = 12
(1, 0, 1, 1) ?Bound = 13
(1, 0, 1, 0) yesBound = 12
(0, 0, !, !) yesBound = 3
(1, 0, 0, !) yesBound = 11
(1, 0, 1, 1) yesBound = 13
Env:Maxsol = 13
22
Tyson Kendon © 2007 23
Branch & Bound(!, !, !, !) ?
Bound = 16 Env:Maxsol = 13
S8
(1, 0, !, !) ?Bound = 13
(!, 0, !, !) ?Bound = 13
(!, 1, !, !) ?Bound = 12
(0, 0, !, !) ?Bound = 3
(1, 0, 0, !) ?Bound = 11
(1, 0, 1, !) ?Bound = 13
(1, 0, 1, 0) ?Bound = 12
(1, 0, 1, 1) ?Bound = 13
(1, 0, 1, 0) yesBound = 12
(0, 0, !, !) yesBound = 3
(1, 0, 0, !) yesBound = 11
(1, 0, 1, 1) yesBound = 13
(!, 1, !, !) yesBound = 12
23