Informerad sökning (även heuristisk sökning , eng. informed search, heuristisk sökning ) är en strategi för att hitta lösningar i det statliga rummet , som använder kunskap relaterad till en specifik uppgift. Informerade metoder ger generellt sett mer effektiva sökningar än oinformerade metoder .
Information om en specifik uppgift är formulerad som en heuristisk funktion . Den heuristiska funktionen vid varje steg i sökningen utvärderar alternativen baserat på ytterligare information för att avgöra i vilken riktning sökningen ska fortsätta [1] .
I sammanhanget för tillståndsrymdsökning definieras den heuristiska funktionen h ( n ) på noderna i iterationsträdet enligt följande:
h ( n ) = kostnadsuppskattning av den billigaste vägen från nod n till målnoden.Om n är målnoden, då är h ( n ) = 0.
Noden som ska distribueras väljs baserat på utvärderingsfunktionen
f ( n ) = kostnadsuppskattning av den billigaste lösningsvägen som går genom nod n , f ( n ) = g ( n ) + h ( n ),där funktionen g ( n ) bestämmer kostnaden för vägen som redan färdats från startnoden till noden n .
Om den heuristiska funktionen h ( n ) aldrig överskattar den faktiska minimikostnaden för att uppnå målet (det vill säga det är en lägre uppskattning av den faktiska kostnaden), så kallas en sådan funktion tillåten .
Om den heuristiska funktionen h ( n ) uppfyller villkoret
h ( a ) ≤ kostnad ( a , b ) + h ( b ),där b är en avkomling av a , då kallas en sådan funktion successiv ( engelska konsekvent ).
Om f ( n ) = g ( n ) + h ( n ) är utvärderingsfunktionen, h ( n ) är efterföljande funktion, då är funktionen f ( n ) monotont icke-minskande längs någon väg som studeras. Därför kallas successiva funktioner även monotona ( eng. monoton ).
Alla efterföljande funktioner är tillåtna, men inte alla tillåtna funktioner är efterföljare.
Om h 1 ( n ), h 2 ( n ) är giltiga heuristiska funktioner, och för någon nod n är olikheten h 1 ( n ) ≥ h 2 ( n ) sann, då är h 1 en mer informerad heuristik, eller dominerar h 2 .
Om problemet har tillåten heuristik h 1 och h 2 , då är heuristiken h ( n ) = max( h 1 , h 2 ) tillåten och dominerar över var och en av de ursprungliga heuristikerna [1] [2] .
När man jämför tillåten heuristik spelar graden av medvetenhet och den rumsliga och tidsmässiga komplexiteten av att beräkna var och en av heuristikerna betydelse. Mer informerad heuristik kan minska antalet utplacerade noder, även om kostnaden för att göra det kan vara den tid det tar att beräkna heuristiken för varje nod.
Den effektiva förgreningsfaktorn är det genomsnittliga antalet noduppföljare i uppräkningsträdet efter att ha tillämpat heuristiska beskärningsmetoder [1] [2] . Genom den effektiva förgreningsfaktorn kan man bedöma kvaliteten på den använda heuristiska funktionen.
En ideal heuristisk funktion (som en uppslagstabell ) returnerar alltid exakta värden för längden på den kortaste lösningen, så uppräkningsträdet innehåller bara optimala lösningar. Den effektiva förgreningsfaktorn för en ideal heuristisk funktion är nära 1 [1] .
Som modeller för att testa sökalgoritmer och heuristiska funktioner används ofta permutationspussel - Femton 3 × 3 [3] [4] , 4 × 4 [5] [6] [7] , 5 × 5 [8] [9] [ 10 ] , 6×6 [11] , Rubiks kub [9] [12] , Hanois torn med fyra spön [11] [13] .
I "Femton"-pusslet kan h m -heuristiken baserad på Manhattan-avståndet tillämpas . Mer specifikt, för varje bricka, beräknas Manhattan-avståndet mellan dess nuvarande position och dess initiala position; de erhållna värdena sammanfattas.
Det kan visas att denna heuristik är tillåten och successiv: dess värde kan inte ändras med mer än ±1 i ett drag.
Den heuristiska funktionen h m som används för att lösa "Femton"-pusslet är en lägre uppskattning av längden på den optimala lösningen. Dessutom är h m ( n ) den exakta längden på den optimala lösningen till en förenklad version av pusslet, där brickor kan flyttas till sina positioner. I det ursprungliga pusslet finns en begränsning "det ska inte finnas två eller fler brickor i en cell", vilket inte är i den förenklade versionen. Ett problem med färre restriktioner för möjliga åtgärder kallas ett avslappnat problem ; kostnaden för att lösa det avslappnade problemet är en giltig heuristik för det ursprungliga problemet [1] , eftersom varje lösning på det ursprungliga problemet också är en lösning på det avslappnade problemet.
DeluppgiftDen tillåtna heuristiken kan baseras på kostnaden för att lösa ett delproblem av det ursprungliga problemet. Varje lösning på huvudproblemet är samtidigt en lösning på var och en av dess deluppgifter [1] .
En deluppgift till problemet med att lösa "Femton"-pusslet kan vara uppgiften att flytta brickor 1, 2, 3 och 4 till sina platser. Kostnaden för att lösa detta delproblem är en giltig heuristik för det ursprungliga problemet.
Mönsterdatabaser [ 1] är en typ av giltig heuristik baserad på idén om att lagra det exakta värdet av lösningskostnaden för varje möjlig instans av ett delproblem [1] [6] [12] .
Ett exempel på en mall för "Femton"-pusslet visas i figuren till höger: definitionen av deluppgiften inkluderar positionerna för de sju markerna som finns i den första kolumnen och i den första raden. Antalet konfigurationer för denna mall är . För var och en av konfigurationerna innehåller databasen det minsta antal drag som krävs för att översätta denna konfiguration till målkonfigurationen för deluppgiften som visas i figuren. Databasen är byggd med den omvända bredd-först sökmetoden [2] [6] .
Bästa -först-sökning är ett tillvägagångssätt där en nod att distribuera väljs baserat på en utvärderingsfunktion f ( n ) . Noden med lägst poäng väljs för distribution.
En*-sökning är den mest välkända typen av första bästa matchning. Den använder en uppskattning f ( n ) av kostnaden för den billigaste lösningsvägen genom nod n :
f ( n ) = g ( n ) + h ( n ), där g ( n ) är kostnaden för vägen från startnoden till noden n , h ( n ) är en uppskattning av kostnaden för vägen från nod n till målet.Om h ( n ) aldrig överskattar kostnaden för att nå målet (det vill säga är överkomligt), så är sökningen efter A* optimal.
Algoritm A* med iterativ fördjupning A* ( IDA* ) är en tillämpning av idén om iterativ fördjupning i samband med heuristisk sökning.
Den oinformerade iterativa fördjupningsalgoritmen stoppar expansionen när sökdjupet d överskrider den aktuella djupgränsen l . Den informerade IDA* -algoritmen stoppar driftsättningen när uppskattningen f ( n ) av vägkostnaden genom den aktuella noden n överstiger den nuvarande vägkostnadsgränsen .
IDA*-algoritmen kännetecknas av minimal minnesoverhead jämfört med A* och ett relativt litet (vid ett framgångsrikt val av heuristik) antal utplacerade noder jämfört med IDDFS.
Pseudokod nod nuvarande nod g kostnad för att starta lösning rot.. nod f minimal vägkostnadsuppskattning genom nod h ( nod ) heuristisk kostnadsuppskattning för resten av vägen nod..målkostnad ( nod , succ ) vägkostnadsfunktion is_goal ( nod ) mål kontrollera funktionsefterföljare ( nod ) noddistributionsfunktion procedur ida_star ( root , kostnad (), is_goal (), h ()) bound := h ( root ) loop t := sök ( root , 0, bound ) om t = FOUND returnera sedan FOUND om t = ∞ returnera sedan NOT_FOUND bunden := t end loop end procedur funktionssökning ( nod , g , bunden ) f := g + h ( nod ) om f > bunden returnerar sedan f om is_goal ( nod ) returnerar sedan FOUND min : = ∞ för efterföljare ( nod ) gör t : = sök ( succ , g + kostnad ( nod , succ ), bound ) om t = FOUND returnerar sedan FOUND om t < min sedan min := t end för retur min end funktion
SMA *
Algoritmer för grafsökning | ||
---|---|---|
Oinformerade metoder | ||
Informerade metoder | ||
Genvägar | ||
Minsta spännträd | ||
Övrig |