
Előadó: Dr. Várterész Magdolna
2.2.2. Módosítható megoldáskeresők
Információ kellene tárolni az információkeresés múltjáról. Ha felismerjük, hogy rossz irányba haladunk, akkor visszalépünk.
| Módosítható megoldáskeresők osztályozozása: | 1. visszalépéses (backtrack) |
| 2. keresőgráffal |
2.2.2.1. Visszalépéses (backtrack)
Adatbázis: a keresőgráf egy része
kerül ide. start-ból
induló, aktuális csúcsba vezető aktuális út. Ez az az út amiből véljük, hogy
elérjük valamelyik terminális csúcsot. A múltból mi van nyilvántartva: a start-ból
milyen módon jutottunk el az aktuális csúcsba.
| Műveletek: | operátorok + visszalépés |
| operátorok: állapottérreprezentációs műveletek | |
| visszalépés: technikai művelet |
Operátor: alkalmazzuk az utolsó csúcson, ezzel új állapot keletkezik. Ezt felfűzzük az aktuális útra (annak hossza 1 élnyivel megnő). Ez lesz az új aktuális csúcs.

Az operátor alkalmazása tehát növeli az utat!
Visszalépés: töröljük az aktuális csúcsot, és az aktuális csúcs a megelőző csúcs lesz. Vagyis az út rövidebb lesz.
Vezérlő: eldönti, hogy az adatbázis
melyik részén mikor, melyik műveletet kell végrehajtani (az aktuális csúcsra
fog alkalmazni egy műveletet).
Mit figyeljen?
Ha nemterminális a csúcs, akkor ezen az úton remény van-e még a megoldás megtalálására vagy sem? Vagy: érdemes-e még folytatni egyáltalán a keresést?
Hogy fog a vezérlő megoldást keresni?
| 1. | inicializálás. Az út egy csúcsból áll:
|
||||
| Van adatbázis, aktuális út, aktuális csúcs | |||||
| 2. | tesztelés. Az aktuális csúcs terminális-e? | ||||
| igen: | kész vagyunk | ||||
| nem: | tovább tudunk-e lépni? Van-e alkalmazható operátor? | ||||
| igen, van: | választunk, alkalmazzuk. Új aktuális csúcs, ismét tesztelés (2. pont) | ||||
| nincs: | másik művelet: visszalépés. | ||||
| (vagyis ha az akt. csúcsban nincs alkalmazható operátor) | |||||
Ha az aktuális csúcsban nincs alkalmazható operátor, akkor meg kell próbálni a megoldást valamilyen másik irányban keresni. A reprezentációs gráfban valamilyen másik irányba kellene lépni. Az adatbázisnak viszont ezt tudnia kell, minden csúcsban nyilván kell tertani, hogy abból a csúcsból mely alkalmazható operátorokat alkalmaztuk, vagy nem alkalmaztuk (ez egy plusz információ).
A visszalépés során előállt új aktuális csúcsban egy még nem alkalmazott alkalmazható operátort kell alkalmazni.
| Van ilyen? | ||
| igen: | alkalmazzuk, folytatjuk a keresést | |
| nem: | visszalépés a szülőre, s a reprezentációs gráfban egy másik irányba | |
| kell próbálkozni. Vagyis: aktuális csúcsban
már minden alkalmazható operátort kipróbáltunk, sikertelenül |
||
| Terminálási feltételek: | ||
| 1. | az aktuális csúcs célcsúcs-e? | |
| 2. | start csúcsban teljesül a visszalépési
feltételünk |
|
| (vagyis már nincs olyan operátor, amit ne alkalmaztunk volna már sikertelenül) | ||
| Ekkor nincs megoldás! | ||
Ha a reprezentációs gráfunk olyan véges gráf, hogy
nem tartalmaz köröket, a visszalépéses megoldáskereső - ha van megoldás - garantáltan
előállít egy lehetséges megoldást. Ha nincs megoldás, akkor azt fel lehet ismerni.
Eltérés hol lehet? Az operátorok választásában. Ez történhet:
Heurisztika: tudásunk alapján megbecsülhetjük, hogy a cél milyen távol van. Ezért választhatunk olyat, ami közelebb visz (hasonló a hegymászó módszerhez).
Mik a problémák? Olyan reprezentációs gráfok esetén
garantálja a megoldást, amelyben nincsenek körök. Ekkor ui. nincs garantálva
a megoldás, végtelen ciklus alakulhat ki. (Végtelen sokszor ugyanazt választjuk
ki).
Ötlet: ne engedjük, hogy egy körön végtelen sokszor végigmenjen, vagy ne is
engedjük bezárni ezt a kört:
| lesz egy újabb visszalépési feltétel: | az aktuális csúcs szerepelt-e már az aktuális úton |
| Ha igen: rögtön visszalépés (így nem zárjuk be a kört). Azaz körök nélkül próbáljuk meg megtalálni a megoldást. (Ha van megoldás, akkor van körmentes megoldás is). | |
Egy másik megoldás az, hogy úthossz-korlátot vezetünk be:
l
(megoldás)
Fává egyenesítünk, végtelen fagráfot állítunk elő. Nem engedjük, hogy az aktuális
út hossza meghaladja az úthosszkorlátot.
| aktuális út hossza |
(ha ez teljesül |
Viszont ha túl rövidre választjuk az úthossz-korlátot (túl alacsonyan vágjuk el a gráfot) akkor nem találunk megoldást.
Ha a start csúcsban áll elő
a visszalépési feltétel, akkor: |
|
| 1. nincs megoldás | |
|
2. túl rövidre választottuk az úthossz-korlátot |
|
Arról, hogy melyik, nem ad információt!
Ez utóbbi (úthossz-korlátos) tartalmazhat kört a megoldásban. Ha körmenteset akarunk, akkor onnan nekünk kell kivágni a kört.
Nem feltétlenül véges fa-gráf esetén, ha garantáltan van az úthossz-korlátnál rövidebb megoldás, akkor azt megtalálja.
d) optimális megoldás keresése
A backtrack alkalmas-e optimális megoldás keresésére? Azaz van költség, s a legkisebb költségű megoldást szeretnénk előállítani. Ez lesz az ág és korlát algoritmus.
| van egy induló költségkorlát |
(felső becslés)
|
Ennél a költségkorlátnál nem költségesebb megoldást keresünk.
Csak addig megyünk a reprezentációs gráfban a keresés során, míg a költségkorlátot
el nem érjük.
Ha találunk egy megoldást, akkor ez lesz az új költségkorlát!
(Ez ugye
induló költségkorlát)
Folytatjuk a megoldáskeresést. Ezt a megoldást elraktározzuk, s úgy tekintjük,
mintha nem lett volna megoldás. Ha van újabb megoldás, akkor annak költsége
már csak
lehet, mint ez. Ismét csere, eltárolás, stb.
Így a reprezentációs gráf elég nagy részét nem kell bejárni, egyre kisebb utakat
járunk be. Addig folytatjuk, míg a start csúcsból el tudunk valamerre
indulni.
Mit garantál ez?
CSAK körmentes gráfok esetén működik!