Innholdsfortegnelse:
- Representerer problemet som et mellomrom
- Går tilfeldig og blir velsignet av flaks
- Bruke en heuristisk og en kostnadsfunksjon
Video: Week 7, continued 2024
Ofte finner du at en heuristisk tilnærming, en som stoler på på selvoppdagelse og gir tilstrekkelig nyttige resultater (ikke nødvendigvis optimal, men god nok) er metoden du faktisk trenger for å løse et problem. Å få algoritmen til å utføre noe av det nødvendige arbeidet for deg, sparer tid og krefter fordi du kan lage algoritmer som ser mønstre bedre enn mennesker gjør.
Selvfunn er derfor prosessen med å la algoritmen vise deg en potensielt nyttig måte å løse på (men du må fortsatt stole på menneskelig intuisjon og forståelse for å vite om løsningen er den rette). Følgende avsnitt beskriver teknikker du kan bruke til å beregne kostnaden for en algoritme ved hjelp av heuristikk som en metode for å oppdage den faktiske nytte av en gitt løsning.
Representerer problemet som et mellomrom
A Problemrom er et miljø der et søk etter en løsning finner sted. Et sett med stater og operatørene som brukes til å endre disse statene representerer problemrommet. For eksempel, vurder et flis spill som har åtte fliser i en 3-x-3 ramme. Hver flis viser en del av et bilde, og flisene starter i en tilfeldig rekkefølge slik at bildet er forvrengt. Målet er å flytte en flis om gangen for å plassere alle flisene i riktig rekkefølge og avsløre bildet.
Kombinasjonen av starttilstanden, de randomiserte fliser og måltilstanden - flisene i en bestemt rekkefølge - er -problemet. Du kan representere puslespillet grafisk ved hjelp av en problemromgrafikk. Hver knutepunkt i problemrommet viser en tilstand (de åtte fliser i en bestemt posisjon). Kantene representerer operasjoner, for eksempel å flytte flis nummer åtte opp. Når du flytter flis åtte opp, endres bildet - det beveger seg til en annen stat.
Å vinne spillet ved å flytte fra starttilstand til måltilstand er ikke det eneste hensynet. For å løse spillet effektivt må du utføre oppgaven i minst mulig antall trekk, noe som betyr at du bruker det minste antallet operatører. Minste antall trekk som brukes til å løse puslespillet er problemdybde.
Du må vurdere flere faktorer når du representerer et problem som et mellomrom. For eksempel må du vurdere det maksimale antall noder som passer inn i minnet, som representerer plasskompleksitet. Når du ikke kan passe alle noder i minnet om gangen, må datamaskinen lagre noen noder på andre steder, for eksempel harddisken, som kan senke algoritmen betydelig.For å avgjøre om nodene passer inn i minnet, må du vurdere tidskompleksiteten, som er det maksimale antall noder som er opprettet for å løse problemet. I tillegg er det viktig å vurdere forgreningsfaktoren, som er det gjennomsnittlige antall noder som er opprettet i problemrommet for å løse et problem.
Går tilfeldig og blir velsignet av flaks
Løsning av et søkeproblem ved bruk av brute force-teknikker er mulig. Fordelen med denne tilnærmingen er at du ikke trenger noen domenespesifikke kunnskaper for å bruke en av disse algoritmer. En brute-force-algoritme har en tendens til å bruke den enkleste mulige tilnærmingen til å løse problemet. Ulempen er at en brute-force tilnærming fungerer bra bare for et lite antall noder. Her er noen av de vanlige brute-force søkealgoritmene:
- Bredde-første søk: Denne teknikken begynner ved rotnoden, undersøker hver av barnnoderne først, og beveger seg bare ned til neste nivå. Den utvikler seg nivå etter nivå til det finner en løsning. Ulempen med denne algoritmen er at den må lagre hver node i minnet, noe som betyr at den bruker en betydelig mengde minne for et stort antall noder. Denne teknikken kan sjekke for dupliserte noder, noe som sparer tid, og det kommer alltid opp med en løsning.
- Dybde-første søk: Denne teknikken starter ved rotnoden og undersøker et sett med tilkoblede barnnoder til det når en bladknutepunkt. Den utvikler grenen etter grenen til den finner en løsning. Ulempen med denne algoritmen er at den ikke kan se etter dupliserte noder, noe som betyr at den kan krysse de samme nodebanene mer enn en gang. Faktisk kan denne algoritmen kanskje ikke finne en løsning i det hele tatt, noe som betyr at du må definere et cutoff-punkt for å holde algoritmen fra å søke uendelig. En fordel ved denne tilnærmingen er at den er minneeffektiv.
- Toveiset søk: Denne teknikken søker samtidig fra rotnoden og målnoden til de to søkeveiene møtes i midten. En fordel ved denne tilnærmingen er at det er tidseffektivt fordi det finner løsningen raskere enn mange andre brute-force løsninger. I tillegg bruker det minne mer effektivt enn andre tilnærminger, og finner alltid en løsning. Den største ulempen er implementeringens kompleksitet, noe som oversetter til en lengre utviklingssyklus.
Bruke en heuristisk og en kostnadsfunksjon
For noen mennesker lyder ordet heuristic bare komplisert. Det ville være like lett å si at algoritmen gjør et utdannet gjetning og deretter prøver igjen når det feiler. I motsetning til brute-force metoder lærer heuristiske algoritmer. De bruker også kostnadsfunksjoner for å gjøre bedre valg. Følgelig er heuristiske algoritmer mer komplekse, men de har en klar fordel i å løse komplekse problemer. Som med brute-force algoritmer, er det mange heuristiske algoritmer, og hver kommer med sitt eget sett med fordeler, ulemper og spesielle krav. Følgende liste beskriver noen av de vanligste heuristiske algoritmene:
- Pure heuristic search: Algoritmen utvider nodene i rekkefølge av kostnadene.Den opprettholder to lister. Den lukkede listen inneholder noder den allerede har utforsket; Den åpne listen inneholder noder den må undersøke. I hver iterasjon utvider algoritmen node med lavest mulig pris. Alle dens barnnoder er plassert i den lukkede listen, og de individuelle barneknutekostnadene beregnes. Algoritmen sender barnnoder med lav pris tilbake til den åpne listen og sletter barnnoder med høy pris. Algoritmen utfører derfor en intelligent, kostnadsbasert søk etter løsningen.
- A * søk: Algoritmen sporer kostnadene for noder da den utforsker dem ved bruk av ligningen: f (n) = g (n) + h (n), hvor
- n er nodens identifikator.
- g (n) er kostnaden for å nå noden så langt.
- h (n) er den anslåtte kostnaden for å nå målet fra noden.
- f (n) er den anslåtte kostnaden for banen fra n til målet.
Tanken er å søke de mest lovende stiene først og unngå dyre stier.
- Greedy best-first search: Algoritmen velger alltid banen som er nærmest målet ved å bruke ligningen: f (n) = h