Indholdsfortegnelse:
- Representerer problemet som et mellemrum
- Går tilfældigt og bliver velsignet af held
- Brug af en heuristisk og en omkostningsfunktion
Video: Week 7, continued 2024
Ofte finder du, at en heuristisk tilgang, på selvopdagelse og producerer tilstrækkeligt nyttige resultater (ikke nødvendigvis optimalt, men godt nok) er den metode, du rent faktisk har brug for at løse et problem. At få algoritmen til at udføre nogle af de nødvendige arbejder for dig sparer tid og kræfter, fordi du kan oprette algoritmer, der ser mønstre bedre end mennesker gør.
Selvopdagelse er derfor processen med at lade algoritmen vise dig en potentielt nyttig vej til en løsning (men du skal stadig regne med menneskets intuition og forståelse for at vide, om løsningen er den rigtige). De følgende afsnit beskriver teknikker, du kan bruge til at beregne prisen på en algoritme ved hjælp af heuristics som en metode til at opdage den faktiske anvendelighed af en given løsning.
Representerer problemet som et mellemrum
A Problemrum er et miljø, hvor en søgning efter en løsning finder sted. Et sæt stater og operatørerne, der bruges til at ændre disse stater, repræsenterer problemrummet. For eksempel overveje et fliser spil, der har otte fliser i en 3-x-3 ramme. Hver flise viser en del af et billede, og fliserne starter i en tilfældig rækkefølge, så billedet er forvrengt. Målet er at flytte en flise ad gangen for at placere alle fliserne i den rigtige rækkefølge og afsløre billedet.
Kombinationen af starttilstanden, de randomiserede fliser og måltilstanden - fliserne i en bestemt rækkefølge - er problemet. Du kunne repræsentere puslespillet grafisk ved hjælp af en problemrumgraf. Hver knude på problemrummet viser en tilstand (de otte fliser i en bestemt position). Kanterne repræsenterer operationer, såsom at flytte flise nummer otte op. Når du flytter flise otte op, ændres billedet - det flytter til en anden tilstand.
At vinde spillet ved at flytte fra starttilstand til måltilstand er ikke den eneste overvejelse. For at løse spillet effektivt skal du udføre opgaven i det mindste antal mulige træk, hvilket betyder at bruge det mindste antal operatører. Det mindste antal træk, der bruges til at løse puslespillet, er problemdybde.
Du skal overveje flere faktorer, når du repræsenterer et problem som et rum. For eksempel skal du overveje det maksimale antal noder, der passer til hukommelsen, hvilket repræsenterer rumkompleksiteten. Når du ikke kan passe alle noderne i hukommelsen ad gangen, skal computeren gemme nogle noder på andre steder, f.eks. Harddisken, som kan bremse algoritmen betydeligt.For at afgøre, om noderne passer til hukommelsen, skal du overveje tidskompleksiteten,, hvilket er det maksimale antal noder, der oprettes for at løse problemet. Derudover er det vigtigt at overveje forgreningsfaktoren,, som er det gennemsnitlige antal noder, der er oprettet i problemrumgrafen for at løse et problem.
Går tilfældigt og bliver velsignet af held
Det er muligt at løse et søgeproblem ved brug af brute-force-teknikker. Fordelen med denne tilgang er, at du ikke har brug for nogen domæne-specifik viden til at bruge en af disse algoritmer. En brute-force algoritme har tendens til at bruge den enkleste mulige tilgang til at løse problemet. Ulempen er, at en brute-force-tilgang fungerer kun godt for et lille antal noder. Her er nogle af de almindelige brute-force search-algoritmer:
- Bredde-første søgning: Denne teknik begynder ved rodnoden, undersøger hver af børnelederne først og går først derefter ned til næste niveau. Den skrider frem efter niveau, indtil den finder en løsning. Ulempen ved denne algoritme er, at den skal lagre hver node i hukommelsen, hvilket betyder at den bruger en betydelig mængde hukommelse til et stort antal noder. Denne teknik kan tjekke for dubletter, hvilket sparer tid, og det kommer altid op med en løsning.
- Dybde-første søgning: Denne teknik begynder ved rodknuden og udforsker et sæt tilsluttede børne noder, indtil det når en bladnode. Det skrider frem til filialen, indtil den finder en løsning. Ulempen ved denne algoritme er, at den ikke kan tjekke for dubletter, hvilket betyder at det kan krydse de samme nodeveje mere end én gang. Faktisk kan denne algoritme slet ikke finde en løsning, hvilket betyder at du skal definere et cutoff-punkt for at holde algoritmen fra at søge uendeligt. En fordel ved denne tilgang er, at den er hukommelseseffektiv.
- Tovejsøgning: Denne teknik søger samtidigt fra rodknuden og målnoden, indtil de to søgestier møder i midten. En fordel ved denne tilgang er, at den er tidseffektiv, fordi den finder løsningen hurtigere end mange andre brute-force løsninger. Derudover bruger hukommelsen mere effektivt end andre tilgange og finder altid en løsning. Den største ulempe er implementeringens kompleksitet, der overskrider en længere udviklingscyklus.
Brug af en heuristisk og en omkostningsfunktion
For nogle mennesker lyder ordet heuristic bare kompliceret. Det ville være lige så nemt at sige, at algoritmen gør et uddannet gæt og derefter forsøger igen, når det fejler. I modsætning til brute-force metoder lærer heuristiske algoritmer. De bruger også omkostningsfunktioner til at træffe bedre valg. Derfor er heuristiske algoritmer mere komplekse, men de har en klar fordel ved løsning af komplekse problemer. Som med brute-force algoritmer er der mange heuristiske algoritmer, og hver kommer med sit eget sæt fordele, ulemper og særlige krav. Følgende liste beskriver nogle få af de mest almindelige heuristiske algoritmer:
- Ren heuristisk søgning: Algoritmen udvider knuder i rækkefølge af deres omkostninger.Den opretholder to lister. Den lukkede liste indeholder de noder, den allerede har udforsket; Den åbne liste indeholder de noder, den endnu må undersøge. I hver iteration udvider algoritmen knuden med den lavest mulige pris. Alle dens børne noder er placeret i den lukkede liste, og de individuelle barneknutekostnader beregnes. Algoritmen sender barnetoderne med en lav pris tilbage til den åbne liste og sletter børnelodene med en høj pris. Algoritmen udfører derfor en intelligent, omkostningsbaseret søgning efter løsningen.
- A * søgning: Algoritmen sporer omkostningerne ved noder, da den udforsker dem ved hjælp af ligningen: f (n) = g n) + h (n), hvor
- n er nodens identifikator.
- g (n) er omkostningerne ved at nå noden hidtil.
- h (n) er den anslåede pris for at nå målet fra noden.
- f (n) er den anslåede pris for stien fra n til målet.
Ideen er at søge de mest lovende stier først og undgå dyre stier.
- Greedy bedste første søgning: Algoritmen vælger altid den sti, der er tættest på målet ved hjælp af ligningen: f (n) = h