Razveji in omeji

RAČUNALNIŠTVO IN INFORMACIJSKE TEHNOLOGIJE
OSNOVE ALGORITMOV
NIKOLA GUID
Fakulteta za elektrotehniko,
računalništvo in informatiko
Maribor, 2011
Kazalo
6 Razveji-in-omeji
6-1
6.1 Problem trgovskega potnika . . . . . . . . . . . . . . . . . . . . . . 6-2
6.2 Iskanje najkrajše poti med mestoma . . . . . . . . . . . . . . . . . 6-8
Poglavje
6
Razveji-in-omeji
Razveji-in-omeji (branch and bound) je izboljšana metoda vračanja (sestopanja),
ki začne preverjanje pri najbolj obetavnih možnostih. Metoda najde optimalno
rešitev.
Strategija razveji-in-omeji potrebuje v primerjavi z vračanjem še dve stvari:
• način, ki omogoča določitev ocene stanja pri vsakem vozlišču v drevesu
prostora stanj, in
• vrednost najboljše rešitve.
Če obe informaciji poznamo, lahko ocenimo stanja z vrednostjo najboljše rešitve.
Če ocena stanja ni boljša od najboljše rešitve, vozlišče ni obetavno in ga ne razvijamo dalje. To je osnovna ideja strategije razveji-in-omeji
Razveji in omeji išče rešitev problema korakoma kot strategija vračanja. Za
razliko od vračanja tu pregledujemo drevo stanj v širino. Osnovna operacija je
razvoj vozlišča. Prvi del imena je strategija razveji-in-omeji dobila, zato ker najprej razveji tekoče vozlišče. Sinovi tekočega vozlišča morajo v seznam čakajočih
vozlišč. Vsako čakajoče vozlišče je opremljeno z informacijo o stanju rešitve v
tekočem trenutku. Informacijo imenujemo oceno stanja, ki nam pomaga omejiti razvijanje (od tod izvira drugi del imena strategije razveji-in-omeji). Vozlišča,
ki imajo slabšo oceno od ocene optimalne poti (včasih od ocene poti do ciljnega
vozlišča), ne razvijamo in s tem prihranimo na času reševanja.
6-2
6.1 Problem trgovskega potnika
6.1
Problem trgovskega potnika
Dan je graf G = (V, E) z matriko povezav C. Krožna pot v grafu je pot, ki začne
v nekem vozlišču in se tam tudi konča, pri čemer vsako vozlišče obiščemo natanko
enkrat. Zanima nas najkrajša krožna pot, tj. Hamiltonov cikel. S tem problemom
se sreča trgovski potnik, poštar, voznik dostavnega vozila, itd.
Brez izgube splošnosti lahko predpostavimo, da začne trgovski potnik svojo
pot v vozlišču 1. Ker sme trgovski potnik v vsako vozlišče samo po enkrat, ima v
vozlišču 1 na izbiro n−1 drugih vozlišč, nato n−2 itd. Tako je vseh Hamiltonovih
ciklov (n − 1)!.
Naj bo matrika povezav v polnem grafu s 4 vozlišči:


∞ 5 11 4
 3 ∞ 6 2 

C=
(6.1)
 1 8 ∞ 7 .
6 4 9 ∞
Pri razveji-in-omeji razvijamo samo obetavna vozlišča, ki pa jih določimo s
primerno oceno (estimation). Ena izmed idej določanja ocen je naslednja:
Ker mora trgovski potnik obiskati vsa vozlišča natanko enkrat, poiščemo v
vsaki vrstici povezavo z najmanjšo ceno in jo odštejemo od vseh ostalih cen možnih
povezav tega vozlišča. Rečemo, da smo matriko reducirali. Cene povezav z
vrednostjo ∞ se ne spremenijo.




4
∞ 5 11 4
∞ 1 7 0



2 
 3 ∞ 6 2 ⇒ 1 ∞ 4 0 
(6.2)



1
1 8 ∞ 7
0 7 ∞ 6 
4
6 4 9 ∞
2 0 5 ∞
V vseh vrsticah smo že odšteli najmanjše vrednosti. Sledi še redukcija po
stolpcih, ko odštejemo najmanjšo vrednost stolpca od vseh že reduciranih vrednosti po vrsticah.

0
0
4
0


∞ 1 7 0
∞ 1 3 0
 1 ∞ 4 0 
 1 ∞ 0 0



 0 7 ∞ 6 ⇒ 0 7 ∞ 6
2 0 5 ∞
2 0 1 ∞




(6.3)
Vse odštete vrednosti seštejemo in uporabimo kot oceno o:
o = 4 + 2 + 1 + 4 + 0 + 0 + 4 + 0 = 15.
(6.4)
V polnem grafu je ocena o tudi vrednost optimalne poti. Torej preostane nam
samo določitev te poti.
6-3
6.1 Problem trgovskega potnika
Predpostavimo, da trgovski potnik začne svojo pot v vozlišču 1. Iz 1 lahko
nadaljuje pot v 2, 3 ali 4, tako da imamo naslednje delne poti
(1, 2), (1, 3), (1, 4).
Ko izberemo npr. pot (1,2), trgovski potnik ne sme iti iz vozlišča 1 k drugim
vozliščem; torej ne sme iti v vozlišče 3 in 4, zato poti (1,3) in (1,4) postavimo na
∞. Prav tako trgovski potnik pride v vozlišče 2 le iz vozlišča 1. Zato sta tudi
povezavi (3,2) in (4,2) prepovedani, kar dosežemo s postavitvijo teh povezav na
∞. Z drugimi besedami smo v reducirani matriki C postavili vse elemente prve
vrstice in drugega stolpca na ∞.
Ob tem se lahko zgodi, da preoblikovano matriko lahko dodatno reduciramo.
Če element c12 , ki ustreza ceni povezave (1,2), ni nič, ga odštejemo v prvi vrstici
in morda popravimo še kakšen stolpec ali vrstico. Odštete vrednosti prištejemo
že dobljeni oceni spodnje meje in dobimo oceno o za novo vozlišče.
Povejmo to splošneje. Naj bo vozlišče i drevesa stanj, ki ga razvijamo, in
vozlišče j eden od njegovih sinov. Naj bo (i, j) povezava, ki povezuje vozlišče i
z vozliščem j. Označimo s C = (clk ) reducirano matriko v vozlišču i in z o(i)
pripadajočo oceno. Reducirano matriko B = (blk ), ki pripada paru (i, j), dobimo
z:
1.
blk = clk ,
za vse l 6= i and k 6= j
bik = ∞,
za vse k 6= j
blj = ∞,
za vse l 6= i
blk = clk ,
l = i and k = j
(6.5)
2. Reduciraj matriko B. r(j) naj bo vsota vrednosti odštetih elementov. Ocena
o(j) za vozlišče j je:
o(j) ← o(i) + r(j).
(6.6)
3. Če je j list, oceni prištejemo še dolžino povezave iz zadnjega vozlišča poti v
vozlišče 1.
Opišimo postopek metode razveji-in-omeji. Poiščimo vozlišče i, ki ima ceno
(1,i) v reducirani matriki C enako 0. To vozlišče razvijemo v celoti in dobimo
omejitev, ki je enaka ceni poti 1 → i → j. Nato razvijemo vozlišče j, ki izhaja iz
vozlišča i in ki ima najmanjšo ceno. Pri razvoju imamo tri možnosti:
1. Na nekem nivoju reševanja problema je dobljena ocena večja od dobljene
ocene do sedaj razvitega vozlišča. Razvoj končamo, saj ne vodi k optimalni
rešitvi.
6-4
6.1 Problem trgovskega potnika
2. Vozlišče smo razvili do konca in dobljena ocena je manjša od do sedaj izračunane najmanjše ocene. Dosedanjo rešitev in oceno zavržemo in na njeno
mesto postavimo pravkar najdeno oceno.
3. Vozlišče smo razvili do konca in dobljena ocena je enaka do sedaj dobljeni
optimalni oceni. Našli smo še eno potencialno rešitev in jo shranimo v
množico rešitev.
Zgled 6.1. Kompletna metoda razveji-in-omeji. Celoten postopek metode
razveji-in-omeji na danem zgledu kaže slika 6.1.
Slika 6.1: Drevo reševanja trgovskega potnika z metodo razveji-in-omeji.
1. Vozlišče a v drevesu na sliki 6.1.
Izhajajmo iz reducirane matrike C (enačba 6.3), ki ima oceno o(a) = 15
(enačba 6.4). Povezava (1,4) ima vrednost 0, zato bomo razvili najprej
vozlišče 4. Sledil bo razvoj vozlišča 2, saj ima povezava (1,2) vrednost 1.
Na koncu bomo razvili še vozlišče 3, saj je vozlišče 3 najmanj obetavno
(povezava (1,3) ima vrednost 3).
2. Vozlišče b v drevesu na sliki 6.1.
Določimo reducirano matriko B,

∞
 1

 0
2
ki pripada paru (1, 4):

∞ ∞ 0
∞ 0 ∞ 

7 ∞ ∞ 
0 1 ∞
(6.7)
Redukcija matrike 6.7 nam da redukcijski člen r(b) = 0 in ocena o(b) =
o(a) + r(b) = 15 (enačba 6.6). Izhajamo iz redukcijske matrike (enačba 6.7).
6-5
6.1 Problem trgovskega potnika
Razvijmo vozlišče 4, ki ima dva sinova: vozlišče 2 in vozlišče 3. Povezava
(4,2) ima vrednost 0, (4,3) pa vrednost 1, zato bomo najprej razvili vozlišče
2.
3. Vozlišče c (vozlišče 2) v drevesu na sliki 6.1.
Poiščimo matriko B, ki pripada najprej paru (4, 2):


∞ ∞ ∞ 0
 1 ∞ 0 ∞ 


 0 ∞ ∞ ∞ 
∞ 0 ∞ ∞
(6.8)
Redukcija matrike 6.8 nam vrne redukcijski člen r(c) = 0 in ocena o(c) =
o(b) + r(c) = 15 (enačba 6.6).
4. Iz vozlišča 2 (vozlišče c) gremo lahko samo še v vozlišče 3 (vozlišče d) v
drevesu na sliki 6.1.
Razvijmo vozlišče 2, ki ima enega sina - vozlišče 3. Poiščimo matriko B, ki
pripada paru (2, 3):


∞ ∞ ∞ 0
 ∞ ∞ 0 ∞ 


(6.9)
 0 ∞ ∞ ∞ 
∞ 0 ∞ ∞
Redukcija matrike 6.9 nam vrne redukcijski člen r(d) = 0 in ocena o(d) =
o(c)+r(d) = 15 (enačba 6.6). Ker je vozlišče 3 (d) list drevesa, moramo oceni
prišteti še dolžino od vozlišča 3 do vozlišča 1 (c31 = 1): o(d) = o(d) + c31 =
15 + 1 = 16.
5. Vozlišče e v drevesu na sliki 6.1.
Vrnimo se v vozlišče b. Izhajamo iz reducirane matrike (enačba 6.7). Poiščimo
matriko B, ki pripada paru (4, 3):


∞ ∞ ∞ 0
 1 ∞ ∞ ∞ 


(6.10)
 0 7 ∞ ∞ 
∞ ∞ 1 ∞
Matriko 6.10 reducirajmo:



∞ ∞ ∞ 0
0


1 
 1 ∞ ∞ ∞ ⇒



0 7 ∞ ∞
0
∞ ∞ 1 ∞
1

∞ ∞ ∞ 0
0 ∞ ∞ ∞ 

0 7 ∞ ∞ 
∞ ∞ 0 ∞
6-6
6.1 Problem trgovskega potnika

0
7
0
0


∞ ∞ ∞ 0
∞ ∞ ∞ 0
 0 ∞ ∞ ∞ 
 0 ∞ ∞ ∞



 0 7 ∞ ∞ ⇒ 0 0 ∞ ∞
∞ ∞ 0 ∞
∞ ∞ 0 ∞




Redukcijski člen matrike 6.10 je r(e) = 1 + 1 + 7 = 9. Ocena o(e) =
o(b) + r(e) = 15 + 9 = 24 (enačba 6.6), kar je več od tekoče ocene 16, zato
poti 1 → 4 → 3 ne razvijamo dalje.
6. Vozlišče f v drevesu na sliki 6.1.
Vrnimo se na začetek (vozlišče a) in razvijmo pot 1 → 2. Izhajamo iz
reducirane matrike (enačba 6.3). Poiščimo matriko B, ki pripada paru (1, 2):


∞ 1 ∞ ∞
 1 ∞ 0 0 


 0 ∞ ∞ 6 
2 ∞ 1 ∞
Matriko 6.11 reducirajmo:

1
∞ 1 ∞ ∞

0  1 ∞ 0 0
0  0 ∞ ∞ 6
1
2 ∞ 1 ∞

(6.11)


∞ 0 ∞ ∞



⇒ 1 ∞ 0 0 

 0 ∞ ∞ 6 
1 ∞ 0 ∞
Redukcijski člen matrike 6.11 je r(f ) = 1 + 1 = 2. Ocena o(f ) = o(a) +
r(f ) = 15 + 2 = 17 (enačba 6.6), kar je več od tekoče ocene 16, zato poti
1 → 2 ne razvijamo dalje.
7. Vozlišče g v drevesu na sliki 6.1.
Vrnimo se na začetek (vozlišče a) in razvijmo pot 1 → 3. Izhajamo iz
reducirane matrike (enačba 6.3). Poiščimo matriko B, ki pripada paru (1, 3):


∞ ∞ 3 ∞
 1 ∞ ∞ 0 


 0 7 ∞ 6 
2 0 ∞ ∞
Matriko 6.12 reducirajmo:

∞ ∞ 3 ∞
3

0  1 ∞ ∞ 0
0  0 7 ∞ 6
2 0 ∞ ∞
0



∞ ∞ 0 ∞



⇒ 1 ∞ ∞ 0 

 0 7 ∞ 6 
2 0 ∞ ∞
(6.12)
6.1 Problem trgovskega potnika
6-7
Redukcijski člen matrike 6.12 je r(g) = 3. Ocena o(g) = o(a) + r(g) =
15 + 3 = 18 (enačba 6.6), kar je več od tekoče ocene 16, zato poti 1 → 3 ne
razvijamo dalje. Torej optimalna pot je pot 1 → 4 → 2 → 3 → 1, katere
vrednost je enaka 15, kar je sicer manj od ocene o(d) = 16. ♦
6-8
6.2 Iskanje najkrajše poti med mestoma
6.2
Iskanje najkrajše poti med mestoma
Želimo poiskati najkrajšo pot med mestoma s (izhodišče) in g (cilj). Dan je
zemljevid poti, kjer so označene tudi razdalje med mesti. Zemljevid predstavimo
z grafom, kjer vozlišča pomenijo mesta in povezave med vozlišči ceste med mesti
(slika 6.2a).
b
5
s
2
a
2
g
2
a)
s
5
2
a
2
a
b
5
b)
5
2
s
b
5
2
g
4
c)
Slika 6.2: a) Graf, ki ponazarja povezave med mesti, b) Razvoj vozlišča s, c)
Razvoj vozlišča a.
Iz mesta s lahko gremo v mesto a in v mesto b. To na grafu na sliki 6.2b
pomeni, da smo razvili vozlišče s, tj. poiskali oba njegova naslednika. Razdalja od
s do a je enaka 2, razdalja od s do b pa 5. V metodi razveji-in-omeji najprej razvijemo vozlišče z manjšo oceno, ki v našem primeru pomeni razdaljo od izhodišča s
do tekočega vozlišča. Tako razvijemo vozlišče a, ki ima enega naslednika, tj. vozlišče g. Skupna dolžina poti s → a → g je enaka 4. Razdalja od s do vozlišča b je
enaka 5, kar pa je več kot razdalja poti s → a → g. To pomeni, da skozi vozlišče
b ne more obstajati krajša pot do cilja g, kot je pot s → a → g. Zato nima smisla
razvijati vozlišča b in proceduro končamo, saj smo našli optimalno pot, ki je pot
s → a → g z vrednostjo 4.
Prikažimo delovanje procedure RAZVEJI-IN-OMEJI na malo obširnejšem zgledu.
6.2 Iskanje najkrajše poti med mestoma
6-9
Zgled 6.2. Dan je zemljevid v obliki grafa (slika 6.3). Vse možne poti med
mestom s in g (brez ciklov) ponazarja drevo na sliki 6.4. Vozlišče s je koren
drevesa. Vozlišča brez naslednikov so listi, ki so lahko mrtva vozlišča (dead
nodes) ali ciljna vozlišča (goal nodes). V našem primeru je mrtvo vozlišče vozlišče 4, ciljno vozlišče pa vozlišče g. Vrednosti na povezavah pomenijo razdalje
med pari vozlišč. Vrednost ob listu drevesa pomeni razdaljo od mesta v listu do
mesta s ali obratno.
Slika 6.3: Graf, ki ponazarja povezave med mesti.
Slika 6.4: Drevo poti, ki ga tvorimo iz grafa na sliki 6.3.
Če nobeno vozlišče v grafu ne obiščemo dvakrat, ne moremo imeti več kot
n − 1 nivojev v drevesu, kjer je n število vozlišč v grafu (na sliki 6.3 je n = 6).
6.2 Iskanje najkrajše poti med mestoma
6-10
Delovanje procedure RAZVEJI-IN-OMEJI prikazujejo slike 6.5, 6.6 in 6.7.
1. Razvijemo vozlišče s (slika 6.5a). Dobimo sinova 1 in 2. Pot do vozlišča 1
je dolga 4, do 2 pa 2.
2. Razvijemo vozlišče, ki ima manjšo vrednost, tj. vozlišče 2 (slika 6.5b). Dobimo dva sinova: vozlišče 1 in g. Do vozlišča 1 je razdalja 5, do vozlišča g
pa 14. Našli smo pot 1 → 2 → g, ki pripelje do cilja. Čeprav smo našli
pot do cilja, ne odnehamo, saj še ne vemo, da je ta pot optimalna. Tako
moramo razviti še vse delne poti, katerih razdalja je manjša od d = 14.
3. Najmanjšo vrednost ima pot s → 1 (vrednost poti je 4). Razvoj vozlišča 1
(slika 6.5c) nam da vozlišči 2 (vrednost poti je 7) in 3 (vrednost poti je 8).
4. Sledi razvijanje vozlišča 1 (slika 6.5d) z vrednostjo 5. Dobimo vozlišče 3
(vrednost 9).
5. Razvijamo vozlišče 2 in dobimo pot do cilja g z vrednostjo 19 (slika 6.5e).
Ta pot je daljša od že znane poti do cilja, zato je zapremo.
6. Razvijamo vozlišče 3 z vrednostjo 8 (slika 6.5f). Dobimo dva sinova 4 (vrednost 9) in g (vrednost 11). Vozlišče g z vrednostjo poti 11 se razvija pred
vozliščem g z vrednostjo poti 14. Od tega trenutka razvijamo še samo delne
poti, katerih razdalja je manjša od 11.
6.2 Iskanje najkrajše poti med mestoma
Slika 6.5: Reševanje procedure RAZVEJI-IN-OMEJI (1. del).
6-11
6-12
6.2 Iskanje najkrajše poti med mestoma
7. Razvijemo vozlišče 3 z vrednostjo 9 (slika 6.6a). Dobimo dva sinova 4 (vrednost 10) in g (vrednost 12). Pot do g ni zanimiva in jo zapremo.
8. Sledi razvoj vozlišča 4 z vrednostjo 9 (slika 6.6b). To vozlišče je mrtvo
vozlišče (nima naslednikov), zato ga zapremo.
s
4
2
1
2
4
3
3
2
12
1
3
1
4
9
g
19
x
12
3
g
14
x
4
g
11
3
3
1
4
10
a)
g
12
x
s
4
2
1
2
4
3
3
2
12
g
19
x
1
4
9
12
3
1
3
g
11
g
14
x
4
3
1
4
10
3
g
12
x
b)
Slika 6.6: Reševanje procedure RAZVEJI-IN-OMEJI (2. del).
6-13
6.2 Iskanje najkrajše poti med mestoma
9. Na koncu poskušamo še enkrat razviti vozlišče 4 z vrednostjo 10 (slika 6.7.
To vozlišče je mrtvo (nima naslednikov) in ga zapremo. Vse poti so sedaj
daljše od poti s → 1 → 3 → g. Zato je ta pot optimalna pot. Samo pot
lahko rekonstruiramo s sledenjem kazalcev oce(g) do s.
s
4
2
1
2
4
3
3
2
12
g
19
x
1
4
9
12
3
1
3
g
11
g
14
x
4
3
1
4
10
3
g
12
x
Slika 6.7: Reševanje procedure RAZVEJI-IN-OMEJI (3. del).
Literatura
Aho, A. V., Hopcroft, J. E., and Ullman, J. D. (1974). The Design and Analysis
of Computer Algorithms. Addison-Wesley, Reading.
Cormen, T. H., Leiserson, C. E., and Rivest, R. L. (2007). Introduction to Algorithms. Druga izdaja, MIT Press, Cambridge.
Horowitz, E., Sahni, S., and Rajasekaran, S. (1998). Computer Algorithms. Computer Science Press, New York.
Kleinberg, J. and Tardos, E. (2006). Algorithm Design. Parson Education, Inc.,
New York.
Kononenko, I. (1996). Načrtovanje podatkovnih struktur in algoritmov. Fakulteta
za računalništvo in informatiko, Ljubljana.
Kozak, J. (1997). Podatkovne strukture in algoritmi. Društvo matematikov, fizikov
in astronomov Slovenije, Ljubljana.
Levitin, A. (2007). The Design and Analysis of Algorithms. Druga izdaja, Pearson
Education, Inc., Boston.
Manber, U. (1989). Introduction to Algorithms. A Creative Approach. AddisonWesley, Reading.
Nilsson, N. J. (1980). Principles of Artificial Intelligence. Tioga.
Sedgewick, R. (2003).
Boston.
Algorithms in Java.
Third Edition. Addison-Wesley,
Vilfan, B. (1998). Osnovni algoritmi. Fakulteta za računalništvo in informatiko,
Ljubljana.