Sunteți pe pagina 1din 7

INTELIGENŢĂ ARTIFICIALĂ 2009/2010

CURS 8

4.4 Generarea planurilor ierarhizate

4.4.1 Introducere
Atunci când trebuie rezolvate probleme complexe, este deseori necesar să generăm planuri
foarte lungi, de sute de acţiuni. În abordarea prezentată anterior aceasta pune probleme pentru
că numărul de entităţi manipulate creşte foarte mult.

Ne putem gândi la utilizarea unei abordări alternative, numită ierarhizată, care constă în
neglijarea într-o primă etapă a tuturor detaliilor astfel încât să se obţină o soluţie globală.
Această soluţie generală este de fapt un schelet abstract al planului alcătuit din macro-acţiuni,
adică acţiuni care nu sunt direct exectabile. Aceste macro-acţiuni urmează să fie detaliate
până când se va obţine un plan alcătuit din acţiuni primitive, acţiuni elementare executabile.

Abordarea ierarhizată va crea planuri de nivel din ce în ce mai scăzut, deci din ce în ce mai
detaliat. La fiecare nivel, conflictele vor fi detectate şi rezolvate, ceea ce va permite
micşorarea de fiecare dată a spaţiului soluţiilor şi deci evitarea creşterii masive a
combinaţiilor posibile. Abordarea ierarhizată va lucra deci cu mai multe reprezentări, de
nivele de abstractizare diferite pentru planul de acţiuni; acestă abordare nu ordonează
acţiunile decât în măsura în care aceasta permite evitarea conflictelor. Această strategie de
ordonare parţială a acţiunilor plasează abordarea ierarhizată în grupul generatoarelor neliniare
în măsura în care mai multe secvenţe paralele de acţiuni pot exista în planul primitiv.

Maniera de detaliere a macro-instrucţiunilor este precizată prin ceea ce se numeşte gama


operatorie sau gama operaţiilor. Aceste game sunt desigur specifice domeniului aplicaţiilor
abordat.

4.4.2 NOAH
Pentru a concretiza vom examina un sistem ierarhizat numit NOAH (Network Of Actions
Hirarchies). Intrarea în NOAH este un plan de nivel n (1 este nivelul cu cea mai mare
abstractizare posibilă) şi ieşirea lui este un plan detaliat de nivel (n+1). Planul (n+1) face
obiectul unei detecţii şi rezolvări de eventuale conflicte. Macro-acţiunile sunt detaliate, de la
un anumit nivel la altul, utilizând game operatorii care sunt numite aici funcţii SOUP
(Semantics Of User’s Problem). Vom aplica modul de lucru al sistemului NOAH la lumea de
cuburi din situaţia nerezolvată optimal în precedentul paragraf.

CURS 8 IA 2009/2010 1/7


Funcţiile SOUP cu care exemplficăm sunt următoarele (figura 4.13):

- se dataliază LIBER (x)


(macro-acţiune)

prin LIBER (y) PE(y, masă)

(macro-acţiune) (acţiune primitivă)

Figura 4.13

Această gamă operatorie poate poate fi citită în următoarea manieră: pentru a face un bloc x
accesibil, este suficient să se facă accesibil blocul y care se găseşte pe el şi din punerea lui y
pe masă. Se va remarca caracterul recursiv al definiţiei.

- se detaliază: PE(x, y) (macro-acţiune)

LIBER(x)
prin:
(macro-acţiune) PE(x, y)
LIBER(y) (acţiune primitivă)
(macro-acţiune)
Figura 4.14

Această gamă semnifică următoarele: pentru a avea x pe y este suficient să se facă accesibile
x şi y şi să se aşeze x peste y. Cum nu există nici un motiv, în acest stadiu, de a realiza
LIBER(x) înaintea lui LIBER(y), cele două macro-acţiuni sunt propuse în paralel.

Diagramele de reprezentare propuse pentru gamele operatorii sunt reţele proceduarale.


Aceste reprezentări sunt foarte utilizate în generarea ierarhizată a planurilor.

Obiectivul este în cazul nostru PE(a, b) & PE(b, c) (vezi figura 4.11)

Planul de nivelul 1 este (figura 4.15):

PE(a, b)

PE(b, c)

Figura 4.15

CURS 8 IA 2009/2010 2/7


Nivelul 2 (înainte de o analiză critică) ca în figura 4.16:

LIBER(a)
PE(a, b)
LIBER(b)

LIBER(b)
PE(b, c)
LIBER(c)

Figura 4.16

Cu precizarea că s-au utilizat simboluri diferite pentru:

ƒ macro-acţiunile de detaliat

ƒ acţiunile primitive

ƒ acţiunile virtuale, sau fantomă, (rezultatul corespunzător


este deja realizat în situaţia curentă).

Este un conflict de precedenţă între PE(a, b) şi PE(b, c) în sensul că prima distruge


precondiţia LIBER(b) a celei de-a doua. NOAH detectează acest conflict şi îl rezolvă
realizând secvenţa următoare (figura 4.17):

LIBER(a)
PE(a, b)
LIBER(b)

LIBER(b)
PE(b, c)
LIBER(c)
Figura 4.17
Cele două acţiuni fantomă sunt reduntante; una dintre ele poate fi suprimată. Se ajunge deci
după o analiză critică la nivelul 2 (după analiza critică) ca în figura 4.18:

LIBER(a)
PE(a, b)
LIBER(b)
PE(b, c)
LIBER(c)
Figura 4.18

CURS 8 IA 2009/2010 3/7


Nivelul 3 (înainte de analiza critică) ca în figura 4.19:

LIBER(c) PE(c, masă)

LIBER(b) PE(a,b)

PE(b, c)
LIBER(c)

Figura 4.19

Apare din nou un conflict de precedenţă, de data aceasta între PE(c, masă) şi PE(b, c). Soluţia
propusă de NOAH este aceea din figura 4.20:

LIBER(c) PE(c, masă)

PE(a, b)

LIBER(b)
PE(b, c)
LIBER(c)

Figura 4.20

Reapare acum redundanţa între două acţiuni. În final se obţine nivelul 3 (după analiza critică)
ca în figura 4.21:

LIBER(c) PE(c, masă)

LIBER(b) PE(b, c) PE(a, b)

Figura 4.21

Planul nu conţine decât acţiuni fantomă sau primitive. Este deci executabil. El constă din:

PE(c, masă)
PE(b, c)
PE(a, b)

Acest plan este optimal.

CURS 8 IA 2009/2010 4/7


4.5 Execuţia planurilor
4.5.1 Reprezentarea planurilor

După ce a fost dezvoltat un plan de acţiuni este util ca el să fie memorat pentru a fi eventual
utilizat în alte acţiuni similare. Pentru a-l memora este nevoie de o modalitate de reprezentare
şi ulterior ar trebui încercată o generalizare a lui astfel încât să crească pe cât posibil la
maximum aria lui de utilizare.

S-au propus mai multe moduri de reprezentare şi se încearcă în continuare să se dezvolte


altele noi. Vom examina mai jos o modalitate simplă şi eficace: tabelul triunghiular, care este
o modalitate simplă şi eficace de reprezentare a planurilor de acţiune.

Vom relua exemplul anterior din paragraful 4.3. Planul de acţiune era:

eliberează(b, a)
pune_deasupra(b, d)
apucă(c)
pune_deasupra(c, a)

O tabelă triunghiulară se construiaşte pentru un plan de acţiuni A1, A2, . . . An astfel:

0 Stare iniţială A1
1 (Lista liniei Lista adăugărilor
precedente)- lui A1
A2
- (retragerile A1)
2 (Lista liniei (Lista liniei Lista
precedente)- precedente)- adăugărilor lui
- (retragerile A2) - (retragerile A2) A2

An
n (Lista liniei (Lista liniei (Lista liniei Lista
precedente)- precedente)- precedente)- adăugărilor
- (retragerile An) - (retragerile An) - (retragerile An) lui An
0 1 n

Elementul (0, 0) conţine descrierea stării iniţale a problemei. Elementul (1, 0) este obţinut
retrăgând din (0, 0) lista retragerilor lui A1. Elementul (1, 1) este alcătuit din lista adăugărilor
lui A1. Prin consecinţă, linia 1 reprezintă starea curentă după aplicarea acţiunii A1. Rezultatul
aplicării lui A2 este dat de linia A2. Linia n reflectă prin urmare o stare acceptabilă ca soluţie
finală.

Să concretizăm pe exemplul amintit anterior.

CURS 8 IA 2009/2010 5/7


EFECTOR_LIBER
LIBER(b)
LIBER(c)
LIBER(d) eliberează(b, a)
0
PE(b, a)
PE_MASĂ(a)
PE_MASĂ(c)
PE_MASĂ(d)
LIBER(c) ŢINE(b)
LIBER(d) LIBER(a)
pune_deasupra(b, d)
1 PE_MASĂ(a)
PE_MASĂ(c)
PE_MASĂ(d)
LIBER(c) LIBER(a) EFECTOR_LIBER
PE_MASĂ(a) PE(b, d)
2 apucă(c)
PE_MASĂ(c) LIBER(b)
PE_MASĂ(d)
PE_MASĂ(a) LIBER(a) PE(b, d) ŢINE(C)
3 pune_deasupra(c, a)
PE_MASĂ(d) LIBER(b)
PE_MASĂ(a) PE(b, d) EFECTOR_LIBER
4 PE_MASĂ(d) LIBER(b) PE(c, a)
LIBER(c)
0 1 2 3 4

Pentru a simplifica într-o anumită măsură reprezentarea planului se vor reţine în liniile lui
numai predicatele care sunt precondiţii ale acţiunilor; în linia 4 vom reţine numai predicatele
care figurează la specificarea obiectivului atins. Se obţine atunci ca mai jos.

EFECTOR_LIBER
0 LIBER(b) eliberează(b, a)
PE(b, a)
1 LIBER(d) pune_deasupra(b, d)
ŢINE(b)
LIBER(c) EFECTOR_LIBER
2 apucă(c)
PE_MASĂ(d)
LIBER(a) ŢINE(C)
3 pune_deasupra(c, a)
PE_MASĂ(a) PE(b, d) EFECTOR_LIBER
4 PE_MASĂ(d) LIBER(b) PE(c, a)
LIBER(c)
0 1 2 3 4

Se defineşte în acest stadiu nucleul de rang i ca fiind submulţimea alcătuită din liniile situate
sub (şi inclusiv) linia i şi din coloanele situate la stânga (şi inclusiv) coloana i. În tabelul de
mai sus s-a delimitat cu linie dublă nucleul de rang 1.

Nucleul de rang i conţine de fapt toate precondiţiile cerute pentru aplicarea sub-planului Ai+1,
Ai+2…….An, aici: pune_deasupra(b, d), apucă(c), pune_deasupra(c, a).

CURS 8 IA 2009/2010 6/7


4.5.2 Execuţia şi repararea planurilor
Vom folosi această reprezentare în execuţia planurilor. Ştim că odată generat planul de acţiuni
trebuie executat în lumea reală: atelier, celulă de fabricaţie, etc. Dacă problema nu este
trivială, se pot întâmpla (şi chiar se întâmplă) evenimente neaşteptate care fac la un moment
dat planul de acţiuni inaplicabil. Planul poate deveni inaplicabil astfel încât un incident
îndepărtează sau apropie starea curentă de scop. O metodă proastă constă în exacuţia fiecărei
acţiuni şi refacerea planului de fiecare dată. O astfel de abordare este ineficientă.

Se poate imagina punerea în practică a unor poceduri de execuţie a unor planuri mai
inteligente.

La început ştim că planul este aplicabil dacă predicatele din nucleul de rang 0 decurg logic din
starea curentă.

Să presupunem că acţiunea Ai tocmai a fost executată. Pentru ca ceea ce urmează din plan să
poată fi executat trebuie ca nucleul de rang i să decurgă logic din starea produsă. Mai degrabă
decât să se efectueze acest test se poate cerceta nucleul de rang maxim care decurge logic din
starea curentă astfel încât să se profite de orice incident care ne-ar apropia de scopul propus.

În acest caz al ultimului tabel, prezentat această manieră, se concretizează în testarea de


fiecare dată a nucleului de rang 4, apoi 3 şi aşa mai departe până la obţinerea nucleului de
rang k care decurge logic din situaţia curentă. În acest caz Ak+1 şi Ak+2….An (în absenţa
incidentelor ulterioare) sunt aplicabile.

În acestă procedură nu se replanifică decât dacă nu se găseşte nici un nucleu care să decurgă
logic din starea curentă. Acest tip de procedură se numeşte repararea planului.

Pentru a concretiza lucrurile, să revenim la tabelul anterior şi să presupunem că robotul a


executat secvenţa eliberează(b, a) şi pune_deasupra(c). Să mai presupunem în plus că în loc
de executarea acţiunii apucă(c). Să mai presupunem în plus că în loc de executarea acţiunii
apucă (c) roboul se înşeală şi confundă c cu b. Sistemul de vedere artificială îşi dă seama:
retrage deci pe(b, d) şi adaugă ţine(b) şi nu ţine(c). În căutarea lui de nuclee, sistemul nu
găseşte decăt pe acela de rang 1; acţiunea pune_deasupra(b,d) este deci îndeplinită.

Putem profita faptul că nucleele se cascadează în tabela trunghiulară pentru a accelera


căutarea nucleului de rang maxim decurgând din situaţia curentă.

Plecând de la ultima linie se parcurge tabela de la stânga la dreapta. Când se găseşte un


predicat care nu decurge logic din situaţia curentă (în coloana j de exemplu) atunci ştim că
nucleul căutat nu poate avea decât maxim rangul (j-1) ceea ce permite trecerea la linia
următoare fără a depăşi cooana (j-1). Şi aşa mai departe.

CURS 8 IA 2009/2010 7/7

S-ar putea să vă placă și