12.5. Végrehajtás monitorozása és újratervezése

A végrehajtás-monitorozó (execution monitoring) ágens érzékelőivel ellenőrzi, hogy minden a terv szerint megy-e. Murphy törvénye alapján az egereknek, embereknek és a feltételes tervkészítő ágenseknek még a legjobban elkészített tervei is gyakran sikertelenek. A probléma a nem korlátos nemdeterminisztikusság, azaz néhány váratlan körülmény mindig felmerül, melyre az ágens cselekvés leírásai helytelenek. A valós környezetekben ezért a végrehajtás-monitorozás elengedhetetlen. Kétféle végrehajtás-monitorozást veszünk számba: az egyszerű, de gyenge cselekvésmonitorozást (action monitoring), ahol az ágens a környezet vizsgálatával ellenőrzi, hogy a következő cselekvés működni fog, és az összetettebb, de hatékonyabb tervmonitorozást (plan monitoring), melyben az ágens a terv teljes hátralevő részét ellenőrzi.

Az újratervező (replanning) ágens tudja, hogy váratlan események esetén mit kell tennie: újra meghívja a tervkészítőt, hogy a cél eléréséhez egy új tervet biztosítson. Annak elkerülésére, hogy túl sok időt töltsünk tervkészítéssel, ez rendszerint a régi terv javításával történik, azaz utat keresünk a fennálló nem várt állapotból vissza, a meglévő tervhez.

Példaként térjünk vissza a 12.9. ábra dupla-Murphy porszívóvilágához. Ebben a világban egy tiszta cellára lépés néha bepiszkolja azt. De mi történik, ha az ágens ezt nem tudja vagy nem foglalkozik vele? Akkor egy nagyon egyszerű megoldással áll elő: [Balra]. Ha a terv végrehajtásánál érkezéskor nem történik piszkítás, akkor az ágens a cél elérését detektálja. Ellenkező esetben azonban, mivel az implicit Befejez lépés TisztaBal előfeltétele nem teljesül, az ágens új tervet készít: [Szív]. Ennek a tervnek a végrehajtása mindig sikeres.

A végrehajtás-monitorozás és újratervezés együttesen egy általános stratégia, ami mind a teljesen, mind pedig a részben megfigyelhető környezetekre alkalmazható a tervkészítési reprezentációk széles körén, beleértve az állapottér-, a részben rendezett és a feltételes terveket. A 12.13. ábra az állapottér-tervkészítésre mutat be egy egyszerű megközelítést. A tervkészítő ágens egy céllal indít, és kiinduló tervet készít ennek eléréséhez. Ellentétben más tervkészítő ágensekkel, az újratervező ágens követi mind a hátralevő, még végrehajtatlan terv részletet, valamint a teljes eredeti tervet teljes_terv-et. Cselekvésmonitorozást (action monitoring) használ: a terv következő cselekvésének végrehajtása előtt az ágens megvizsgálja az érzékelőit, hogy megbizonyosodjon arról, hogy a terv előfeltételei nem váltak-e váratlanul kielégítetlenné. Ha igen, akkor az ágens egy cselekvéssorozat újratervezésével megpróbál a teljes_terv egy pontjára visszajutni.

12.13. ábra - Egy cselekvésmonitorozó és -újratervező ágens. Ez szubrutinként a TERVKÉSZÍTŐ teljes állapottér tervkészítő algoritmust használja. Ha a következő cselekvés előfeltételei nem teljesülnek, az ágens a teljes_terv lehetséges p pontjain iterál olyat keresve, amelyhez a TERVKÉSZÍTŐ útvonalat tud tervezni. Ezt az útvonalat hívjuk javításnak. Ha a TERVKÉSZÍTŐ sikeres a javításban, az új terv készítéséhez összefűzi a javítást és a terv p utáni részét. Az ágens ezután a terv első lépését adja vissza.
Egy cselekvésmonitorozó és -újratervező ágens. Ez szubrutinként a TERVKÉSZÍTŐ teljes állapottér tervkészítő algoritmust használja. Ha a következő cselekvés előfeltételei nem teljesülnek, az ágens a teljes_terv lehetséges p pontjain iterál olyat keresve, amelyhez a TERVKÉSZÍTŐ útvonalat tud tervezni. Ezt az útvonalat hívjuk javításnak. Ha a TERVKÉSZÍTŐ sikeres a javításban, az új terv készítéséhez összefűzi a javítást és a terv p utáni részét. Az ágens ezután a terv első lépését adja vissza.

A 12.14. ábra a folyamat sematikus illusztrációja. Az újratervező észreveszi, hogy a terv első cselekvésének előfeltételeit az aktuális állapot nem elégíti ki. Ezután meghívja a tervkészítőt, hogy készítsen egy új javítás-nak nevezett résztervet, amely az aktuális állapotból a teljes_terv valamely s állapotába vezet vissza. Ebben a példában az s történetesen egylépésnyi visszalépést jelent az aktuális hátralévő terv-ből. (Ez az oka, hogy a hátralévő terv helyett a teljes tervet figyeljük.) Általánosságban s-et a jelen állapothoz a lehető legközelebbre választjuk. Az új terv a javítás és a teljes_terv s-től hátralevő része — amit folytatás-nak nevezünk — összefűzéséből adódik, mellyel az ágens készen áll a végrehajtás folytatására.

Térjünk vissza az asztal és a szék azonos színűre festésének problémájához, ez alkalommal újratervezéssel. Feltételezzük a teljesen megfigyelhető környezetet. A kiinduló állapotban a szék kék, az asztal zöld, valamint 1 doboz kék és 1 doboz zöld festék áll rendelkezésünkre. Ez a következő probléma definícióhoz vezet:

12.14. ábra - A végrehajtás előtt a tervkészítő egy teljes_terv-nek nevezett tervet készít, mely S-ből G-be vezet. Az ágens az E-vel jelölt pontig végrehajtja a tervet. A terv hátralevő részének végrehajtása előtt a szokásos módon ellenőrzi az előfeltételeket, és azt találja, hogy valójában az O állapotban van, és nem az E-ben. Ezután meghívja a tervkészítő algoritmust, hogy készítsen egy javítás-t, mely egy terv az O-ból az eredeti teljes_terv egy P pontjához. Az új terv ezután a javítás és a folytatás (az eredeti teljes_terv maradék része) összefűzéséből adódik.
A végrehajtás előtt a tervkészítő egy teljes_terv-nek nevezett tervet készít, mely S-ből G-be vezet. Az ágens az E-vel jelölt pontig végrehajtja a tervet. A terv hátralevő részének végrehajtása előtt a szokásos módon ellenőrzi az előfeltételeket, és azt találja, hogy valójában az O állapotban van, és nem az E-ben. Ezután meghívja a tervkészítő algoritmust, hogy készítsen egy javítás-t, mely egy terv az O-ból az eredeti teljes_terv egy P pontjához. Az új terv ezután a javítás és a folytatás (az eredeti teljes_terv maradék része) összefűzéséből adódik.

Kiindulás(Színe(Szék, Kék) ∧ Színe(Asztal, Zöld)

 

∧ SzíntTartalmaz(BC, Kék) ∧ FestékDoboz (BC)

 

∧ SzíntTartalmaz(RC, Piros) ∧ FestékDoboz (RC)

Cél(Színe(Szék, x) ∧ Színe(Asztal, x))

Cselekvés(Fest(tárgy, szín),

 

Előfeltétel:VanFesték(szín)

 

Következmény:Színe(tárgy, szín))

Cselekvés(Nyit(doboz),

 

Előfeltétel:FestékDoboz(doboz) ∧ Színe(doboz, szín)

 

Következmény:Színe(szín))

Az ágens TERVKÉSZÍTŐ-jének a következő tervvel kellene előállnia:

[Indít; Nyit(BC); Fest(Asztal, Kék); Befejez]

Az ágens most készen áll a terv végrehajtására. Tegyük fel, hogy minden jól megy, és az ágens kinyitja a kék festéket és az asztalra keni. Az előző alfejezet ágensei a terv lépésének befejezése után győzelmet kiáltanának. A végrehajtás-monitorozó ágensnek ellenben először ellenőriznie kell a Befejez lépés előfeltételét, ami azt mondja, hogy a két bútornak azonos színűnek kell lennie. Tegyük fel, hogy az ágens azt érzékeli, hogy a bútorok nem azonos színűek, mivel a festés hiányossága miatt az asztalon egy zöld folt maradt. Az ágensnek ezután keresnie kell egy célpontot a teljes_terv-ben, amelyet megcélozhat, és egy javító cselekvéssorozatot kell kidolgoznia, hogy ide jusson. Az ágens észreveszi, hogy az aktuális állapot azonos a Fest cselekvés előfeltételeivel, így a javító egy üres sorozat, és a terv azonos az épp végrehajtott [Fest, Befejez] sorozattal. Ezzel az új tervvel a monitorozás végrehajtása folytatódik, és a Fest cselekvés újra végrehajtásra kerül. Ez a viselkedés addig ismétlődik, amíg az asztalt teljesen lefestettnek nem érzékeljük. Vegyük észre, hogy a ciklus a terv–végrehajtás–újratervezés folyamat során alakult ki, nem pedig egy explicit ciklus az eredeti tervben.

A cselekvésmonitorozás a végrehajtás-monitorozás nagyon egyszerű módszere, de néha kevésbé intelligens viselkedéshez vezethet. Például tegyük fel, hogy az ágens olyan tervet készít, amelyben az asztalt és a széket is pirosra festi. Ekkor kinyitja a piros festéket, és azt találja, hogy nincs elegendő festék a székhez. A cselekvésmonitorozás nem érzékelné ezt a sikertelenséget, csak miután a széket befestettük, amikor is a VanFesték(Piros) hamissá válik. Amire valójában szükségünk van, az az, hogy akkor érzékeljük a hibát, amikor olyan állapotba jutunk, ahonnan a terv hátralevő része már nem működik. A tervmonitorozás (plan monitoring) ezt úgy éri el, hogy a teljes hátralevő tervben szereplő előfeltételek sikerességét ellenőrzi, azaz a terv minden lépésének előfeltételeit, kivéve azokat, amelyeket a hátralévő terv egy másik lépésével ér el. A tervmonitorozás a hibás terv végrehajtását a lehető leghamarabb megszakítja, azaz nem várja meg, míg a hiba valójában fellép.[130] Néhány esetben ez az ágenst a teljes bukástól mentheti meg, amikor a hibás terv egy olyan zsákutcába vezetne, melyből a cél már elérhetetlen.

Elég kézenfekvő a tervkészítő algoritmus módosítása, hogy az a terv minden pontján tartalmazza a hátralevő terv sikeréhez szükséges előfeltételeket. Ha a tervmonitorozást kiterjesztjük, hogy az aktuális pont helyett az összes jövőbeni pontra ellenőrizze, hogy az aktuális állapot kielégíti-e a terv előfeltételeit, akkor a tervmonitorozás kihasználhatja a szerencsés rábukkanást (serendipity), azaz a véletlenszerű sikert. Ha valaki arra jártában pirosra festi az asztalt ugyanabban az időben, amikor az ágens a széket festi pirosra, akkor a végső terv előfeltételei teljesülnek (a cél teljesül), és az ágens korábban megpihenhet.

Eddig a monitorozást és újratervezést a teljesen megfigyelhető környezetek esetére mutattuk be. A részlegesen megfigyelhető környezetek esetén jóval komplikáltabb problémák léphetnek fel. Először is olyan hibák léphetnek fel, amelyet az ágens nem tud érzékelni. Másodszor „az előfeltételek ellenőrzése” érzékelő cselekvések végrehajtását teheti szükségessé, amelyet tervezni kell vagy a tervkészítési időben, ami a feltételes tervkészítéshez vezet vissza, vagy a végrehajtási időben. A legrosszabb esetben az érzékelési cselekvések végrehajtása összetett tervet igényel, melyhez monitorozás, így további érzékelési cselekvések szükségesek. És ez így megy tovább. Ha az ágens ragaszkodik minden előfeltétel ellenőrzéséhez, akkor elképzelhető, hogy sohasem jut hozzá, hogy valójában tegyen is valamit. Az ágensnek csak a fontos változók ellenőrzését kellene szem előtt tartani, melyek jó eséllyel okoznak hibát, és nem túl drága a megfigyelésük. Ez lehetőséget ad az ágensnek, hogy megfelelőképpen reagáljon a fontos fenyegetésekre, de ne vesztegessen időt annak ellenőrizgetésére, hogy összeomlik-e az ég.

Miután bemutattuk a monitorozás és újratervezés módszerét, meg kell kérdeznünk: „Működik?” Ez meglepően becsapós kérdés. Ha a kérdést úgy értelmezzük, hogy „Garantálni tudjuk-e, hogy az ágens mindig, még nem korlátos nemdeterminisztikusság esetén is célt ér?”, akkor a válasz nem, hiszen az ágens figyelmetlenségből zsákutcába juthat, csakúgy, mint a 4.5. alfejezetben bemutatott online keresés. Például lehet, hogy a porszívóágens nem tudja, hogy az elemei kifogyhatnak. Zárjuk ki a zsákutcákat, azaz tételezzük fel, hogy az ágens olyan tervet tud létrehozni, amelyben a célt a környezet bármely állapotából eléri. Ha feltételezzük, hogy a környezet valóban nemdeterminisztikus, abban az értelemben, hogy egy ilyen tervnek egy adott végrehajtása esetén mindig van valamekkora esélye a sikerre, akkor az ágens szükségszerűen célt ér. Az újratervező ágens képességei ezért megfelelnek a feltételes tervkészítő ágens képességeinek. Valójában módosíthatjuk a feltételes tervkészítőt, hogy csak részleges megoldást készítsen, amely „if <teszt> then terv_A else újratervez” formájú lépéseket tartalmaz. Az említett korlátozásokkal egy ilyen terv megfelelő megoldása lehet az eredeti problémának, és elkészítése szintén sokkal olcsóbb lehet, mint a teljes feltételes tervnek.

Hiba akkor lép fel, ha az ágens ismételt kísérletei is sikertelenek a cél elérésében, azaz valamilyen, számára ismeretlen előfeltétel vagy következmény blokkolja. Például ha az ágens rossz kulcskártyát kap a hotelszobájához, akkor nincs az a beillesztési és eltávolítási próbálkozás, ami kinyitná az ajtót.[131] Egy megoldás, hogy ugyanazon terv ismételgetése helyett véletlenszerűen választunk egy lehetséges javítóterv halmazból. Ebben az esetben egy új kulcskártya kérése a recepcióról hasznos alternatív javító terv. Mivel nem biztos, hogy az ágens képes a valóban nemdeterminisztikus esetet és a hiábavalóság esetét megkülönböztetni, egy kis változatosság a javításban általánosságban is jó ötlet.

A helytelen cselekvés problémájára egy másik megoldás a tanulás. Néhány próbálkozás után a tanuló ágensnek képesnek kell lennie a cselekvésleírás módosítására, hogy az igényelje, hogy a kulcs nyissa az ajtót. Ezen a ponton az újratervező automatikusan egy új tervvel áll elő, mint egy új kulcs megszerzése. A 21. fejezet ezt a fajta tanulást mutatja be.

Az újratervező ágensnek még ezekkel a lehetséges javításokkal is vannak további hátrányai. Nem hatékony a valós idejű környezetekben, és nincs korlát az újratervezési időre, ezáltal nincs korlát a cselekvésről való döntés idejére sem. Szintén képtelen saját célokat kialakítani vagy a meglévő célokhoz új célokat fogadni, azaz nem lehet hosszú életű egy összetett környezetben. Ezeket a hátrányokat kezeljük a következő fejezetben.



[130] A tervmonitorozás okosabbá teszi az ágensünket egy ganajtúró bogárnál (lásd 2.2.3. szakasz - Mindentudás, tanulás és autonómia részben). Az ágensünk észrevenné, hogy a ganaj már nincs a lábainál, újratervezne, hogy szerezzen egy másikat, és azzal zárná le a lyukat.

[131] A tervjavítás hatástalan ismétlése pontosan megfelel a szöcskeölő darázs viselkedésének (lásd 2.2.3. szakasz - Mindentudás, tanulás és autonómia részben).