Heuristiske søkemetoder I Lars Aurdal Intervensjonssenteret Lars.Aurdal@labmed.uio.no 14. september 2003
Plan Hva slags søkemetoder snakker vi om? Kombinatoriske strukturer. Sett. Lister. Grafer. Søkealgoritmer Tilbakenøsting ( Backtracking ). Tilbakenøsting med beskjæring ( Backtracking with pruning ). Tilbakenøsting med begrensningsfunksjoner ( Backtracking with bounding functions ). 1
Plan Eksempler: Tursekk-problemet (knapsack problem). Finn alle klikker i en graf. Reisende handelsmann (travelling salesman). 2
Hva slags søkemetoder snakker vi om? Vi skal fokusere på algoritmer som opererer på kombinatoriske strukturer. Slike strukturer er: Sett. Lister. Grafer. etc. 3
Hva slags søkemetoder snakker vi om? Algoritmer som opererer på kombinatoriske strukturer brukes grovt for å løse et av følgende problemer: Generere kombinatoriske strukturer. Telle kombinatoriske strukturer. Søke etter kombinatoriske strukturer. Søke etter optimale (ekstremale) kombinatoriske strukturer. 4
Sett Et (endelig) sett er en endelig samling objekter som kalles elementene i settet. Vi benytter klammeparenteser rundt mengden objekter i settet: { }. Skriver vi X = {1,3,7,9} mener vi at settet X består av elementene 1,3,7 og 9. Merk at sett ikke er ordnede strukturer slik at settene {1,3,7,9} og {7,1,9,3} er like. Vi skriver x X for å indikere at x er et element i X. 5
Sett Kardinalitet (eller størrelse) til et sett X, betegnet X er antall elementer i X. Eksempel: {1,3,7,9} = 4. For k et positivt heltall eller null sier vi at et k- sett er et sett med kardinalitet k. 0-settet er det (unike) tomme settet som ikke inneholder noen elementer. Det betegnes /0. 6
Sett Dersom X og Y er sett sier vi at X er et subsett av Y dersom alle elementer i X er inneholdt i Y. x X x Y Vi skriver dette X Y. Et k-subsett av Y er et subsett av Y med kardinalitet k. 7
Lister En (endelig) liste er en ordnet samling objekter som kalles elementene i listen. Vi benytter hakeparenteser rundt objektene i settet: [ ]. Skriver vi X = [1,3,7,9] mener vi at listen X består av elementene 1,3,7 og 9 i den rekkefølgen. Siden en liste er en ordnet struktur følger det at [1,3,1,9] [1,1,9,3]. Lengden av listen X er antall elementer (ikke nødvendigvis distinkte) i X. 8
Lister For n et positivt heltall eller null sier vi at et n- tuppel er en liste med lengde n. En tom liste er den (unike) listen som ikke inneholder noen elementer. Den betegnes [ ]. Er X en liste med lengde n betegnes elementene i X med X[0],X[1],...,X[n 1]. Det kartesiske produktet av settene X og Y, betegnet X Y, er settet av alle ordnede 2-tupler der første element hentes fra X og andre element fra Y. X Y = {[x,y] : x X og y Y } Dersom X = {1,3,7,9} og Y = {0,2} så er: {1,3,7,9} {0,2} = {[1,0],[1,2],[3,0], [3,2],[7,0],[7,2], [9,0],[9,2]} 9
Permutasjoner Dersom X et et endelig sett med kardinalitet n, så er en permutasjon av X en liste π med lengde n slik at hvert element i X opptrer en gang i π. Husk: Det finnes n! = n(n 1) 1 permutasjoner av et n-sett. For en positiv k < n, sies en k-permutasjon av X å være en liste π med lengde k slik at ikke noe element i X opptrer mer enn en gang i π. Det finnes: n! (n k)! = n(n 1) (n k+1) k-permutasjoner av et n-sett. 10
Grafer En graf består av et endelig sett ν av noder og et endelig sett ε av kanter slik at hver kant er et 2-subsett av noder. En graf betegnes gjerne med (ν,ε). Eksempel: ν = {0,1,2,3,4,5,6,7} ε = {{0,1},{0,2},{2,3},{1,3}, {0,4},{2,5},{1,6},{3,7}, {4,5},{4,6},{6,7},{5,7}} 0 2 4 5 6 7 1 3 11
Grafer En komplett graf er en graf der ε består av alle 2-subsett av ν. En node x sies å være del av en kant e dersom x e. Graden til en node x ν, betegnet deg(x), er lik antall kanter noden er en del av. En graf sies å være regulær med grad d dersom hver node har grad d. 12
Grafer, substrukturer En Hamilton-syklus er en vei langs kantene i en graf som går innom hver node nøyaktig en gang. I grafen under beskriver listen [0,2,3,7,5,4,6,1] en Hamilton-syklus. 0 2 4 6 5 7 1 3 13
Grafer, substrukturer En graf som inneholder en Hamilton-syklus sies a være en Hamilton-graf. Oppkalt etter Sir William Rowan Hamilton, 1805-1865, som oppfant en matematisk nøtt der en slik syklus langs kantene til et icosahedron var løsningen. Alle Platonske legemer 1 (også kalt regulære legemer), har en Hamilton-syklus (der hjørnene er noder). 1 All konvekse polyhedra med like sider dannet av kongruente, konvekse polygoner. Det finnes nøyaktig fem slike, en kube er et eksempel) 14
Grafer, substrukturer En klikk i en graf G = (ν,ε) er et subsett S ν slik at {x,y} ε for alle x,y S,x y. Evt.: En klikk i en graf G = (ν,ε) er en komplett subgraf av G. Vi betrakter det tomme sett /0 som en klikk, videre betrakter vi enhver node x ν som en klikk. En klikk er en maksimal klikk dersom den ikke er en subgraf av en større klikk. Klikken(e) med størst kardinalitet i en graf kalles maksimum klikken(e). 15
Grafer, substrukturer 16
Grafer En graf (ν,ε) er en vektet graf dersom det finnes en vekt-funksjon: assosiert med den. w : ε R Vekten av en substruktur i grafen er summen av vektene langs kantene i denne substrukturen Det å finne en Hamilton-syklus med minste vekt i en graf er kjent som reisende handelsmann problemet ( travelling salesman problem ). 17
Tilbakenøsting (backtracking) Tilbakenøsting er en rekursiv metode for trinnvis å bygge opp mulige løsninger på kombinatoriske problemer. Utfører uttømmende søk, det vil si at alle løsninger genereres. Vil alltid finne den (eller de) optimale løsningen(e). Skal også betrakte metoder (såkalt pruning ) for å begrense antallet løsninger som betraktes. 18
Tursekk-problemet ( knapsack problem ) Du skal på fjelltur og vil bære maksimalt 20 kg i sekken. Du har gjort klart et stort utvalg utstyr. Du kjenner vekten på hver gjenstand. Du har assosiert en faktor med hver gjenstand som beskriver hvor viktig denne gjenstanden er for gjennomføringen av turen. Hvordan skal du velge gjenstander slik at vekten blir under 20 kg, men samtidig slik at summen av viktighetsfaktorene blir maksimal? Sagt på en annen måte, hvordan skal du få med deg flest mulig viktige ting, under forutsetning av at du ikke vil bære mer enn 20 kg. 19
Tursekk-problemet ( knapsack problem ) Du har: En liste P med gevinster, [p 0, p 1,..., p n 1 ]. En liste W med vekter, [w 0,w 1,...,w n 1 ]. Et mål M. Finn nå det n-tuppel X, [x 0,x 1,...,x n 1 ] der x i {0,1} slik at: P = n 1 i=0 p i x i blir maksimal under forutsetning av at: n 1 w i x i M i=0 20
Tilbakenøsting (backtracking) Prøv alle mulige n-tupler. Finn det n-tuppel som gir maksimal P under forutsetning av at summen av vektene W i holdes innenfor grensen M. Det finnes i alt 2 n slike n-tupler som må prøves. En enkel metode for å generere alle n-tupler består i først å velge en verdi for x 0, så en verdi for x 1 etc. 21
Tilbakenøsting (backtracking), pseudokode Require: l {X,W,P,OptP,OptX er globale} 1: if l = n then 2: if n 1 i=0 w ix i M then 3: CurP n 1 i=0 p ix i 4: if CurP > OptP then 5: OptP CurP 6: OptX [x 0,x 1,...,x n 1 ] 7: end if 8: end if 9: else 10: x l 1 11: backtrack(l + 1) 12: x l 0 13: backtrack(l + 1) 14: end if 22
Tilbakenøsting (backtracking) Tilstandsrommet blir seende ut som følger: [] [1] [0] [1,1] [1,0] [0,1] [0,0] [1,1,1] [1,1,0] [1,0,1] [1,0,0] [0,1,1] [0,1,0] [0,0,1] [0,0,0] 23
Tilbakenøsting (backtracking) Denne algoritmen genererer de 2 n binære n- tuplene i omvendt leksikografisk rekkefølge. Det tar tid Θ(n) tid å sjekke hver løsning X slik at total tid blir Θ(n2 n ). Ikke praktisk brukbar ved n > 40. Ikke alle n-tupler er mulige, vi skal se enkle modifikasjoner som tar hensyn til dette senere. 24
Tilbakenøsting (backtracking) >> P=[122 2 144 133 52 172 169 50 11 87 127 31 10 132 59]; >> W=[63 1 71 73 24 79 82 23 6 43 66 17 5 65 29]; >> Cap=324; >> >> tic;[optp1,optx1,r1]=backtrack1(1,zeros(1,length(w)),w,p,0,[],... Cap,0),t1=toc optp1 = 676 optx1 = Columns 1 through 12 0 1 1 0 1 1 1 1 0 1 0 0 Columns 13 through 15 0 0 0 r1 = 32768 t1 = 8.5700 >> B1P=sum(optX1.*P) B1P = 676 >> B1W=sum(optX1.*W) B1W = 323 >> 25
Generell tilbakenøsting Vi generaliserer den grunnleggende algoritmen. I mange kombinatoriske problemer kan løsningen uttrykkes som en liste X = [x 0,x 1,...] der hver x i velges fra et endelig mulighets-sett P i. Elementene x i defineres en etter en etter hvert som tilstandsrommet traverseres. Tilbakenøstingsalgoritmen betrakter derfor alle medlemmene av settet P 0 P 1 P i for hver i = 0,1,2,... Lengden til listen X er den samme som dybden til den tilsvarende noden i tilstandsrom-treet. 26
Generell tilbakenøsting Gitt en partiell løsning X = [x o,x 1,...,x l 1 ] så vil randbetingelsene i optimaliseringsproblemet begrense de mulige verdiene for x l til subsettet C l P l som vi kaller et valg-sett. kalles beskjæring av til- Beregning av C l standsrom-treet. Dersom y P l \C l så vil nodene i subtreet med rotnode [x o,x 1,...,x l 1,y] ikke tas i betraktning av tilbakenøstingsalgoritmen. Vi sier da at dette subtreet er blitt beskåret. 27
Generell tilbakenøsting, pseudokode Require: l {X er global} 1: if [x 0,x 1,...,x l 1 ] mulig løsning then 2: process it 3: end if 4: compute C l 5: for x : x C l do 6: x l x 7: backtrack(l + 1) 8: end for 28
Generell tilbakenøsting I den første versjonen av tilbakenøstingsalgoritmen brukte vi ikke beskjæing i det hele tatt. Effektivt er det det samme som å sette C l = {0, 1} i den generelle tilbakenøstingsalgoritmen. I praksis må vi begrense C l for at tilbakenøsting skal ha verdi. 29
Generell tilbakenøsting I tursekk-problemet består en enkel beskjæringsstrategi i å beregne følgende: l 1 w i x i M i=0 Dersom l n 1 og vi setter så blir: CurW = l 1 w i x i i=0 C l = { {1,0} dersom CurW + wl M {0} ellers 30
Generell tilbakenøsting Require: l,curw {X,W,P,OptP,OptX,C l er globale} 1: if l = n then 2: if n 1 i=0 p ix i > OptP then 3: OptP n 1 i=0 p ix i 4: OptX [x 0,...,x n 1 ] 5: end if 6: end if 7: if l = n then 8: C l /0 9: else 10: if CurW + w l M then 11: C l {1,0} 12: else 13: C l {0} 14: end if 15: end if 16: for x : x C l do 17: x l x 18: backtrack( l + 1,CurW + w l x l ) 19: end for 31
Generell tilbakenøsting >> P=[122 2 144 133 52 172 169 50 11 87 127 31 10 132 59]; >> W=[63 1 71 73 24 79 82 23 6 43 66 17 5 65 29]; >> Cap=324; >> >> tic;[optp2,optx2,r2]=backtrack2(1,0,zeros(1,length(w)),w,p,0,[],... Cap,0),t2=toc optp2 = 676 optx2 = Columns 1 through 12 0 1 1 0 1 1 1 1 0 1 0 0 Columns 13 through 15 0 0 0 r2 = 16502 t2 = 4.9925 >> B2P=sum(optX2.*P) B2P = 676 >> B2W=sum(optX2.*W) B2W = 323 >> 32
Generell tilbakenøsting, alle klikker I grafen under er klikkene (med mer enn en node): {0,1},{0,6},{1,2},{1,5},{1,6}, {2,4},{2,3},{3,4},{5,6},{0,1,6}, {1,5,6} og {2,3,4}. De maksimale klikkene er: {0,1,6},{1,2}, {1,5,6} og {2,3,4}. 0 1 2 6 5 4 3 Problemet vi tar for oss nå er det å finne alle klikkene. 33
Generell tilbakenøsting, alle klikker Må først definere hva en partiell løsning er. En liste X = [x 0,x 1,...,x l 1 ] av noder er en partiell løsning dersom {x 0,x 1,...,x l 1 } er en klikk. X = [3,4] er en partiell løsning fordi {3,4} er en klikk. X = [4,5] er ikke en partiell løsning fordi {4,5} ikke er en klikk. 0 1 2 6 5 4 3 34
Generell tilbakenøsting, alle klikker Hvordan beregne C l? La S l 1 = {x 0,...,x l 1 } og la C 0 = ν. Da er valgsettet C l gitt ved: C l = {v ν\s l 1 : {v,x} ε, x S l 1 } = {v C l 1 \{x l 1 } : {v,x l 1 } ε} 35
Generell tilbakenøsting, alle klikker Valgsettet C l gitt ved: C l = {v ν\s l 1 : {v,x} ε, x S l 1 } = {v C l 1 \{x l 1 } : {v,x l 1 } ε} 0 1 2 6 5 4 3 S={} C0={0,1,2,3,4,5,6} S0={0} S0={1} S0={2} S0={3} S0={4} S0={5} S0={6} C1={1,6} C1={0,2,5,6} S1={0,1} S1={0,6} S1={1,0} S1={1,2} S1={1,5} S1={1,6} C2={6} C2={1} C2={6} C2={6} C2={0,5} S2={0,1,6} S2={0,6,1} S2={1,0,6} S2={1,5,6} S2={1,6,0} S2={1,6,5} 36
Generell tilbakenøsting, alle klikker Problem: En algoritme basert på denne definisjonen av C l vil generere hver klikk k! ganger, en gang for hver mulig rekkefølge av nodene. For å løse dette problemet innfører vi en < ordning av nodene ν, og lister dem etter denne ordningen. Det vil si at vi tenker på ν som en ordnet liste: der v 0 < v 1 < v 2...v n 1. ν = [v o,v 1,v 2,...,v n 1 ] 37
Generell tilbakenøsting, alle klikker Vi hadde følgende definisjon for C l : C l = {v ν\s l 1 : {v,x} ε, x S l 1 } = {v C l 1 \{x l 1 } : {v,x l 1 } ε} Med de nye definisjonene får vi: C l = {v C l 1 : {v,x l 1 } ε og v > x l 1 }. 38
Generell tilbakenøsting, begrensningsfunksjoner Bruk av begrensningsfunksjoner er en mer sofistikert metode for beskjæring. Definisjoner: La pro(x) være gevinsten assosiert med en mulig løsning X. For en partiell løsning X = [x 0,x 1,...,x l 1 ] definerer vi P(X) som den maksimale gevinsten assosiert med løsningene som er barn av X i tilstandsromtreet. P(X) er altså den maksimale verdien av pro(x ) over alle mulige løsninger X = [x 0,x 1,...,x n 1 ] der x i = x i for 0 i l 1. Dersom X = [ ] blir altså P(X) den optimale gevinsten for hele problemet. 39
Generell tilbakenøsting, begrensningsfunksjoner P(X) kan beregnes eksakt bare ved å traversere hele subtreet med rot i X. For å unngå dette benytter vi begrensningsfunksjoner. En begrensningsfunksjon er en reell funksjon B, definert på settet av noder i tilstandsrommet. For enhver mulig partiell løsning X tilfredsstiller B følgende relasjon: B(X) P(X) Med andre ord er B(X) en øvre begrensning på gevinsten ved enhver mulig løsning som er et barn av rotnoden X. 40
Generell tilbakenøsting, begrensningsfunksjoner En begrensningsfunksjon kan brukes for beskjære tilstandsromtreet. å Anta at vi på et punkt i tilbakenøstingsalgoritmen har en partiell løsning X = [x 0,x 1,...,x l 1 ]. Anta at OptP er den nåværende maksimale gevinsten. Dersom nå B(X) OptP har vi at: P(X) B(X) OptP Dermed vet vi at ingen barn av X i tilstandsromtreet kan forbedre den nåværende kjente OptP. Dermed kan hele dette subtreet beskjæres. 41
Generell tilbakenøsting, begrensningsfunksjoner B(X) kan betraktes som en approksimasjon til P(X). Vi vil at B(X) skal ha følgende egenskaper: B(X) må være enkel å beregne. Så lik P(X) som mulig. Disse to egenskapene står i motsetning til hverandre. P(X) er for eksempel selv en begrensningsfunksjon, men er generelt vanskelig å beregne. 42
Generell tilbakenøsting med begrensningsfunksjon, pseudokode Require: l {X, OptP, OptX er globale} {pro( ) og B( ) er eksterne funksjoner} 1: if [x 0,x 1,...,x l 1 ] er en mulig løsning then 2: P pro([x 0,x 1,...,x l 1 ]) 3: if P > OptP then 4: OptP P 5: OptX [x 0,x 1,...,x l 1 ] 6: end if 7: end if 8: Beregn C l 9: B B([x 0,x 1,...,x l 1 ]) 10: for x C l do 11: if B OptP then 12: return 13: end if 14: x l x 15: backtrack(l + 1) 16: end for 43
Generell tilbakenøsting med begrensningsfunksjon, tursekk-problemet Betrakte et relatert problem, det såkalte rasjonale tursekk-problemet ( rational knap-sack ). Dette problemet er definert som følger: En liste P med gevinster, [p 0, p 1,..., p n 1 ]. En liste W med vekter, [w 0,w 1,...,w n 1 ]. Et mål M. Finn nå det n-tuppel X, [x 0,x 1,...,x n 1 ] der x i velges i intervallet [0,1] slik at: P = n 1 i=0 p i x i blir maksimal under forutsetning av at: n 1 w i x i M i=0 44
Generell tilbakenøsting med begrensningsfunksjon, tursekk-problemet Gevinsten i den rasjonale versjonen av tursekkproblemet vil alltid overstige eller være lik gevinsten i den heltallige versjonen av problemet. Vi spesifiserer nå en algoritme for å finne den maksimale gevinsten i den rasjonale versjonen av problemet. Denne algoritmen blir så grunnlaget for å definere en begrensningsfunksjon. 45
Det rasjonale tursekk-problemet, pseudokode Require: [p 0, p 1,..., p n 1 ],[w 0,w 1,...,w n 1 ],M 1: permuter slik at p 0 /w o p 1 /w 1 p n 1 /w n 1 2: i 0,P 0,W 0 3: for j 0 to n 1 do 4: x j 0 5: end for 6: while W < M og i < n do 7: if W + w i M then 8: x i 1 9: W W + w i 10: P P+ p i 11: i i+1 12: else 13: x i (M W)/w i 14: W M 15: P P+x i p i 16: i i+1 17: end if 18: end while 46
Generell tilbakenøsting med begrensningsfunksjon, tursekk-problemet B(X) defineres nå ved: B(X) = = l 1 i=0 l 1 p i x i + rknap(p l,..., p n,w l,...,w n,m i=0 w i x i ) l 1 p i x i + rknap(p l,..., p n,w l,...,w n,m CurW) i=0 Dermed er altså B(X) lik summen av: Gevinsten fra objektene 0,1,...,l 1, pluss gevinsten fra de resterende objektene slik at målet M nås: M CurW men der faktorene x i kan være rasjonale. 47
Generell tilbakenøsting med begrensningsfunksjon, tursekk-problemet Dersom vi i del 2 av definisjonen av B(X) over hadde begrenset hver x i til å være enten 0 eller 1 ville vi effektivt beregnet P(X). Det at x i, l i n kan være rasjonale gjør at vi kan få en større gevinst, altså B(X) P(X), så B er en begrensningsfunksjon. B er dessuten enkel å beregne. 48
Generell tilbakenøsting med begrensningsfunksjon, tursekk-problemet Pseudokoden som følger implementerer tilbakenøsting for tursekk-problemet. Merk at vi i denne pseudokoden forutsetter at objektene er sortert i synkende rekkefølge etter deres gevinst-vekt forhold, det vil si: p 0 w 0 p 1 w 1 p n 1 w n 1 Derfor er første linje i pseudokoden for beregningen av begrensningsfunksjonen ikke nødvendig. 49
Generell tilbakenøsting med begrensningsfunksjon, tursekk-problemet, pseudokode Require: l,curw {X,OptX,OptP,C l, l = 0,1,... er globale} {B( ) er ekstern} 1: if l = n then 2: if n 1 i=0 p ix i > OptP then 3: OptP n 1 i=0 p ix i 4: OptX [x 0,x 1,...,x n 1 ] 5: end if 6: end if 7: if l = n then 8: C l /0 9: else 10: if CurW + w l M then 11: C l {1,0} 12: else 13: C l {0} 14: end if 15: end if 16: B l 1 i=0 p ix i +B(p l,..., p n,w l,...,w n,m CurW) 50
17: for x C l do 18: if B OptP then 19: return 20: end if 21: x l x 22: backtrack(l + 1,CurW + w l x l ) 23: end for 51
Generell tilbakenøsting med begrensningsfunksjon, tursekk-problemet >> P=[122 2 144 133 52 172 169 50 11 87 127 31 10 132 59]; >> W=[63 1 71 73 24 79 82 23 6 43 66 17 5 65 29]; >> Cap=324; >> >> tic;[optp3,optx3,r3]=backtrack3(1,0,zeros(1,length(w)),w,p,0,[],... Cap,0,0),t3=toc optp3 = 676 optx3 = Columns 1 through 12 1 1 1 1 0 0 1 1 0 1 0 0 Columns 13 through 15 0 0 0 r3 = 20 t3 = 0.0599 >> ratio=p./w; >> [ratio,index]=sort(ratio); >> index=fliplr(index); >> P=P(index); >> W=W(index); >> B3P=sum(optX3.*P) B3P = 676 >> B3W=sum(optX3.*W) B3W = 323 >> 52
Reisende handelsmann-problemet ( travelling salesman problem ) Du er handelsmann og reiser fra by til by og selger produktene dine. Du skal ut på en ny reise og skal besøke et forhåndsbestemt antall byer. Du kjører bil så bensinutgiftene for å reise mellom to byer er proporsjonal med avstanden mellom byene. Du vil besøk hver by bare en gang. I hvilken rekkefølge skal du besøke byene for å få lavest mulig bensinkostnader? 53
Reisende handelsmann-problemet Du har: komplett graf med n noder, G = (V,E). En kostfunksjon, cost: E Z +. Finn nå en Hamilton-syklus X i G slik at: blir minimal. cost(x) = cost(e) e E(X) 54
Reisende handelsmann-problemet La V = {0,1,...,n 1} være nodene i grafen G. For enkelhets skyld definerer vi: cost(x, y) = cost({x, y}) dersom x y. Vi definerer også: cost(x,y) = dersom x = y. 55
Reisende handelsmann-problemet Husk at en Hamilton-syklus kan representeres som en permutasjon av V, for eksempel: X = [x 0,x 1,...,x n 1 ] For enkelhets skyld antar vi at syklusen starter og slutter i node 0. Syklusen 25103462 kan derfor representeres ved 7-tuplene: [0,3,4,6,2,5,1] eller [0,1,5,2,6,4,3] 56
Reisende handelsmann-problemet, pseudokode Require: l,x,c {x, OptX, OptC er globale} 1: if l = n then 2: C cost([x 0,x 1,...,x n 1 ]) 3: if C < OptC then 4: OptC C 5: OptX [x 0,x 1,...,x n 1 ] 6: end if 7: end if 8: if l = 0 then 9: C l {0} 10: else 11: if l = 1 then 12: C l {1,2,...,n 1} 13: else 14: C l C l 1 \{x l 1 } 15: end if 16: end if 57
17: for x C l do 18: x l x 19: tsp(l + 1,x,C ) 20: end for 58
Heuristiske søkemetoder I: Foreløpig pensum Pensum er innholdet i disse transparentene. Transparentene finnes (.ps og.pdf format) på adressen: http://www.idi.ntnu.no/ lau/ Disse transparentene er i sterk grad basert på boken: Combinatorial Algorithms, Generation, Enumeration and Search av Donlad Kreher og Douglas R. Stinson, CRC Press 1999, ISBN 0-8493-3988-X. 59
Heuristiske søkemetoder I: Matlab-funksjoner. Alle MATLAB-funksjonene finnes på adressen: http://www.idi.ntnu.no/ lau/ Merk at filen README inneholder ferdige sekvenser av kommandoer som kan limes rett inn i MATLAB for å teste de ulike algoritmene. 60
Heuristiske søkemetoder I: Øvingsoppgaver Oppgave 1: Endelige sett. 1. Hva er et endelig sett? 2. Er settene X = {1,5,12,8} og Y = {1,12,5,8} like? 3. Er settet K = {1,5,8} et subsett av settet M = {1,5,7,12}. 61
Heuristiske søkemetoder I: Øvingsoppgaver Oppgave 2: Endelige lister. 1. Hva er en endelig liste? 2. Er listene X = [1,5,12,8] og Y = [1,12,5,8] like? 3. Hvordan defineres det kartesiske produktet av settene A og B. 4. Anta at A = {3,9,6,4} og B = {3,5}. Hva er det kartesiske produktet av disse settene? 62
Heuristiske søkemetoder I: Øvingsoppgaver Oppgave 3: Permutasjoner. 1. Hva er en permutasjon? 2. Gitt at et sett inneholder n elementer, hvor mange permutasjoner finnes det av dette settet? 3. Hva er en k-permutasjon. 4. Gitt at et sett inneholder n elementer, hvor mange k-permutasjoner finnes det av dette settet? 63
Heuristiske søkemetoder I: Øvingsoppgaver Oppgave 4: Grafer. 1. Hvordan er en graf definert? 2. Gitt grafen G definert ved (ν,ε) der: og: ν = {a,k,c,v,b} ε = {{a,k},{a,c},{a,v}, {k,c},{b,c},{b,k}, {v,c}} Hvordan ser denne grafen ut? 3. Er denne grafen komplett? 4. Hvilken grad har noden a? Er denne grafen regulær? 5. Finnes det noen Hamilton-syklus i denne grafen. I så fall hvilken? 64
Heuristiske søkemetoder I: Øvingsoppgaver Oppgave 5: Grafer. 1. Hva er en klikk? 2. Hva er de maksimale klikkene i grafen definert i oppgave 4? 65
Heuristiske søkemetoder I: Øvingsoppgaver Oppgave 6: Tilbakenøsting. 1. Gi pseudokode for en tilbakenøstingsalgoritme som løser tursekk-problemet. 2. Gitt at vektene W er gitt ved W = [10,13,7,6], gevinstene P ved P = [22, 28, 24, 15] og at den maksimale kapasiteten M er M = 22. 3. Tegn tilstandsrommet for dette problemet. Indiker gevinst og vekt ved hver node. 4. Hva er den optimale verdien for X. 5. Indiker hvilke grener av treet som kan ekskluderes fra videre oppfølging på bakgrunn av at maksimal vekt allerede er overskredet. 66
Heuristiske søkemetoder I: Øvingsoppgaver Oppgave 7: Tilbakenøsting med begrensningsfunksjon 1. Hva er en begrensningsfunksjon og hvilke egenskaper må en slik funksjon ha? 2. Hva er forskjellen mellom tursekk-problemet og det rasjonale tursekk-problemet? 3. Sett opp et uttrykk for en begrensningsfunksjon for tursekk-problemet der løsningen på det tilsvarende rasjonale tursekk-problemet inngår. 4. Med utgangspunkt i det konkrete tursekkproblemet beskrevet i oppgave 6: Tegn det beskårne tilstandsromtreet etter anvendelse av begrensningsfunksjonen du beskrev over. 67