Et søkeproblem i seks deler
Et sykkelbud starter ved lageret, skal levere to pakker og avslutte ved kontoret. Før en algoritme kan hjelpe, må oppgaven gjøres om til et søkeproblem. Det har seks deler:
- et tilstandsrom (state space), alle tilstandene verden kan være i: her krysset budet står i og hvilke pakker som er levert;
- en starttilstand: ved lageret, ingen pakker levert;
- en måltest som sier om en tilstand er et mål: begge pakkene levert og budet ved kontoret;
- handlingene som er lov i hver tilstand: sykle til et nabokryss, eller levere en pakke ved riktig adresse;
- en overgangsmodell (transition model) som sier hvilken tilstand en handling fører til;
- en handlingskostnad (action cost) for hvert steg, her minutter.
Måltesten kan sjekke én bestemt tilstand, en liste av tilstander eller en egenskap som mange tilstander har.
En løsning er en sekvens av handlinger fra starttilstanden til en måltilstand. Kostnaden til en sti, stikostnaden (path cost), er summen av handlingskostnadene langs den. Begge begrepene står under handlingskostnad og stikostnad, og formelen er ƒstikostnad:
En løsning er optimal når ingen annen løsning har lavere stikostnad.
RegneeksempelFormuler et 2 × 3-glidebrett som søkeproblem og tell tilstandene.Vis løsningSkjul løsning
Steg 1. En tilstand er plasseringen av brikkene 1–5 og det tomme feltet i de seks rutene. Starttilstanden kan være 4 1 2 / 5 _ 3.
Steg 2. Handlingene flytter det tomme feltet opp, ned, til venstre eller til høyre, når det ikke står ved kanten. Overgangsmodellen bytter det tomme feltet med brikken i den retningen, og hver handling koster 1.
Steg 3. Måltesten sjekker om brettet er 1 2 3 / 4 5 _.
Steg 4. Det er måter å plassere fem brikker og ett tomt felt på. Bare halvparten, 360, kan nås fra en gitt start, fordi hvert trekk bevarer om antallet brikkepar i feil innbyrdes rekkefølge er et partall eller et oddetall. Søket kan derfor møte høyst 360 tilstander. Starten har fire par i feil rekkefølge og målet ingen, begge partall, så målet kan nås, fem trekk unna.
Formuleringen er en abstraksjon. Været, hvilken sykkel budet bruker og nøyaktig hvor i gata det står, er utelatt. En abstraksjon er god når hver abstrakt løsning kan gjøres om til en konkret, og når den er så enkel som mulig uten å miste noe som påvirker svaret. Fjerner vi for mye, finner algoritmen planer som ikke virker; tar vi med for mye, blir tilstandsrommet unødvendig stort. Har byen 15 kryss og budet 3 pakker, er det tilstander. Tar vi også med hvilken av 4 sykler budet bruker, blir det 480, uten at en eneste rute blir bedre.
Glidebrettet er et leketøysproblem: lite, presist og likt for alle, og derfor godt egnet til å teste og sammenligne algoritmer. Budet er nærmere et praktisk problem, der svaret faktisk skal brukes og modellen aldri blir helt riktig. Andre eksempler er å velge rekkefølgen en brøytebil tar gatene i, å finne de færreste redigeringene som gjør én DNA-streng om til en annen, eller å finne trekkene en lagerrobot trenger for å hente en pall bakerst i en hylle. Praktiske problemer har som regel langt flere tilstander, og kostnadene må anslås, men formuleringen i seks deler er den samme.
I sykkelbud-problemet står budet i kryss og sykler langs gater. Hvilken setning beskriver overgangsmodellen?
En ruteplanlegger skal finne den billigste rekkefølgen av ferjeturer for en bilist som skal fra fastlandet til en øy ytterst i skjærgården. Hvilken opplysning bør utelates fra tilstanden?