Løsningsforslag: Deloppgave om heuristiske søkemetoder, ALGKON 2003, ordinær eksamen 14. september 2003 Deloppgave a 50-års jubileet for simulert størkning: I juni 1953 publiserte fire amerikanske fysikere, deriblant en av atombombens fedre, Edward Teller, artikkelen Equation of State Calculations by Fast Computing Machines (fritt oversatt til norsk Tilstandsligningsberegninger med Hurtige Regnemaskiner) i det anerkjente tidsskriftet The Journal of Chemical Physics (fritt oversatt til norsk Journal for Kjemisk Fysikk). Denne artikkelen handler om hvordan man kan bruke datamaskiner til å beregne hvordan elementærpartikler i et aller annet stoff vil organisere seg seg imellom for å minimere kreftene som virker mellom partiklene. I denne artikkelen framsetter de fire fysikerne grunnlaget for den algoritmen som senere er blitt kjent som simulert størkning (engelsk: simulated annealing). Man kan spørre seg hvorfor en algoritme som i dag brukes i alt fra kretskortutlegg til flytrafikkplanlegging har sitt utspring i en artikkel om en slik problemstilling. Forklar og utred hvilken fysisk analogi simulert størkning er basert på. Svar kort og konsist. Løsningsforslag deloppgave a Som oppgaveteksten angir dreier Tellers artikkel seg om hvordan elementærpartikler ordnes innbyrdes i en lavenergi likevektstilstand. For at elementærpartikler skal kunne finne slike lavenergi likevektstilstander må enorme antall av dem finne sin respektive plass i en kompleks struktur. Den optimale konfigurasjonen representerer egentlig en løsning på et gigantisk optimaliseringsproblem der alle disse elementærpartiklene har funnet sin plass i forhold til alle de andre. 1
Et godt eksempel på en slik struktur finner man i en diamant. En diamant er en mer eller mindre perfekt ordning av karbonatomer i en helt spesiell innbyrdes (krystall-)struktur. For at en slik struktur skal oppstå må karbonatomene først være utsatt for svært høyt trykk og temperatur og befinne seg i en tilstand der de flyter rundt hverandre innbyrdes. I denne tilstanden vil atomene prøve et utall innbyrdes konstellasjoner og etterhvert organisere seg i små grupper som har optimal innbyrdes konfigurasjon. I denne fasen er temperaturen ennå så høy at en gruppe atomer som har funnet en gunstig innbyrdes konstellasjon fortsatt ofte vil brytes opp for å danne nye konstellasjoner. Med tiden faller trykk og temperatur og atomene vil etterhvert flyte mindre fritt innbyrdes. I denne fasen vil gruppene av atomer med perfekt innbyrdes konfigurasjon vokse. Samtidig vil det bli mindre og mindre sannsynlig at slike gunstige konstellasjoner brytes opp. Dette fortsetter inntil temperaturen er så lav at den innbyrdes konfigurasjonen ikke lenger endres. Dersom denne prosessen skjer under gunstige trykk- og temepraturforhold vil store diamanter kunne oppstå. Simulert størkning er en iterativ optimaliseringsalgoritme som simulerer denne prosessen. Ved hjelp av en temperaturparameter T som reduseres etter hver iterasjon (typisk etter en geometrisk formel T n+1 = αt n ) tillater man først at algoritmen forkaster tilsynelatende gunstige løsninger til fordel for mer uheldige løsninger. Etterhvert som T avtar gjøres denne sannsynligheten mindre. Dette skjer ved at en ny løsning Y genereres og at forskjellen i optimalitet P(Y) P(X) mellom Y og en eksisterende løsning X beregnes. P er her en funksjon som måler en løsnings optimalitet. Dersom den nye løsningen er mer optimal (P(Y) > P(X)) velges den nye løsningen Y foran den gamle X. Dersom den nye løsningen er mindre optimal enn den gamle (P(Y) P(X)) velges allikevel den nye løsningen med sannsynlighet proporsjonal med: exp[ P(Y) P(X) ] T Denne sannsynligheten er illustrert i figur 1. For høy T vil sannsynligheten for å velge en ny løsning Y som er mindre gunstig enn den eksisterende løsningen X være relativt høy. Etterhvert som T avtar vil denne sannsynligheten avta. Effekten av denne strategien er at algoritmen først hopper vilkårlig rundt i løsningsrommet mens den leter etter gunstige løsninger. Sannsynligheten for å forlate en gunstig løsning til fordel for en dårligere løsning vil i denne fasen være høy. Etterhvert som T faller vil denne sannsynligheten avta og istedet for å hoppe fra løsning til løsning vil algoritmen nå mer systematsik eksplorere nabolaget til hver løsning. 2
P 1 (P(Y) P(X))/T 0 Figur 1: Sannsynligheten for valg av en ny løsning Y gitt en eksisterende løsning X. Deloppgave b I denne oppgaven skal vi ta for oss det såkalte tilfredsstillbarhetsproblemet (engelsk: satisfiability problem). Dette problemet omtales ofte som SAT-problemet. Steven Skiena, forfatter av boken The algorithm design manual, omtaler spøkefullt dette problemet som alle NP-komplette problemers mor. Problemet kan enkelt formuleres som følger: Anta gitt en boolsk funksjon F på såkalt konjunktiv normal form. Dersom vi, for eksempel, betrakter en slik funksjon av 10 boolske variable x 0,x 1,...,x 9 kan F være gitt ved: F(x) = ( x 2 x 7 x 9 ) (x 3 x 5 ) (x 0 x 1 x 3 x 6 x 8 x 9 )... (x 4 x 5 ) der x i og x i betegner en variabel og dens inverse verdi respektive. Symbolene og betegner logisk ELLER og OG respektive. SAT-problemet består nå i å finne verdier for x 0,x 1,...,x 9 slik at F evaluerer til SANN (TRUE). For endel særtilfeller finnes effektive algoritmer for å løse dette problemet, men i sin generelle form er dette et svært komplisert problem. I en del situasjoner krever man ikke at F skal evaluere til SANN, men at et så stort som mulig antall av delleddene (ledd av typen ( x 2 x 7 x 9 ) ) i F skal være 3
SANNE. Hvordan vil du løse denne siste typen problem ved hjelp av simulert størkning? Forklar løsningsstrategien din og gi pseudokode for den algoritmen du foreslår. NB: Dette problemet kan løses på mange måter. Vi ber om en enkel løsning som illustrerer at du har forstått simulert størkning algoritmen, ikke en spesielt sofistikert løsning på denne varianten av SAT-problemet. Løsningsforslag deloppgave b Løsningsstrategien vår er som følger: 1. La en løsning X være et binært n-tuppel X = [x 0,x 1,...,x n 1 ]. Dersom element i i X er 0 betyr dette at den tilsvarende variabelen x i er 0 (det vil si USANN). Er element i i X lik 1 er den tilsvarende variabelen x i lik 1 (det vil si SANN). Universet består av alle slike n-tupler og inneholder 2 n mulige løsninger. 2. Velg et vilkårlig binært n-tuppel. Dette er vår oprinnelige løsning X. Dette er også vår opprinnelige beste løsningx opt. 3. La oss anta at vi har gitt funksjonen N X =countterms(x,f) som tar som input et slikt binært n-tuppel X samt definisjonen av funksjonen F, teller hvor mange av delleddene i definisjonen av den boolske funksjonen F som er tilfredsstilte (SANNE) og returnerer dette antallet i variabelen N X. Vi leter altså etter den X som gjør N X størst mulig (dersom N X er lik antall delledd i F vil naturligvis F selv evaluere til SANN). 4. Benytt N X =countterms(x,f) til å beregne N X assosiert med X. Dette er vår opprinnelige N opt. 5. Anta at funksjonen Y =newx(x) er gitt. Denne tar en løsning X og returnerer en nabo Y til denne løsningen. Med X s nabo mener vi her en løsning Y der ett element i n-tuplet som definerer X har byttet verdi fra 0 til 1 eller omvendt. Dette tilsvarer at den korresponderende variabelen inverteres. Nabolagssøkestrategien vår er derfor svært enkel, velg kort og godt en ny løsning der en enkelt vilkårlig variabel har byttet verdi. Hver løsning X får dermed n naboer. 6. Heuristikken vår blir derfor ganske enkelt å utføre dette nabolagssøket. 7. Benytt N Y =countterms(y,f) til å beregne N Y assosiert med den nye løsningen Y. 4
8. Dersom N Y > N X settes X = Y og N X = N Y. (Merk at vi her krever at N Y er større enn N X, dette er et maksimeringsproblem). 9. Dersom også N Y > N opt settes X opt = Y og N opt = N Y. 10. Dersom N Y N X settes allikevel X = Y og N X = N Y med sannsynlighet proporsjonal med exp[ N Y N X T ]. 11. Oppdater temperaturen i tråd med nedkjølingsstrategien. 12. Iterer inntil maksimalt anall iterasjoner er nådd. I tillegg til dette kommer selvfølgelig endel initialisering etc. Vi trenger også funksjonen urand som returnerer et tilfeldig tall uniformfordelt i intervallet [0, 1]. Dette er vist i pseudokoden i figur 2. Merk at det selvfølgelig finnes mange varianter av denne og lignende strategier. 5
Require: F,i max,t 0,α {countterms(, ), urand er eksterne} 1: i 0 2: X en vilkårlig løsning fra universet 3: X opt X 4: N X countterms(x,f) 5: N opt N X 6: T T 0 7: α verdi i intervallet (0,1). 8: while i i max do 9: Y newx(x) 10: N Y countterms(y,f) 11: if N Y > N X then 12: X Y 13: N X N Y 14: if N Y > N opt then 15: X opt Y 16: N opt N Y 17: end if 18: else 19: tmp exp[ N Y N X T ] 20: if urand < tmp then 21: X Y 22: N X N Y 23: end if 24: end if 25: i i+1 26: T αt 27: end while 28: return(x opt ) Figur 2: Pseudokode for løsning av den gitte varianten av SAT-problemet. 6