
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:  (start 
      csúcs) | ||||
| 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  visszalépés. | ||
| Terminálási feltételek: | ||
| 1. | az aktuális csúcs célcsúcs-e? | |
| 2. | startcsú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)
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  úthossz-korlát | (ha ez teljesül  visszalépés) | 
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 startcsú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  k 
      (megoldás) | (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)
 
  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.
 
  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!
|       |