23
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 f Bound to determine which branches can be worked on and which do not need work 1

Branch & Bound - University of Calgarypages.cpsc.ucalgary.ca/.../ta/433/w11/bb-01knapsack.pdf · 2011-02-12 · Tyson Kendon © 2007 1 Branch & Bound • Another technique for optimization,

  • 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