Sunteți pe pagina 1din 5

Laborator 8 – Reprezentarea STRIPS de reprezentare

Planificarea regresivă

Fig. 1 Problemă Shakey – mediul robotului Shakey

Un mediu cunoscut pentru testarea algoritmilor de căutare/planificare este aşa numita lume a lui Shakey. Mediul
respectiv este prezentat în Fig. 1. Robotul mobil (notat S) se poate deplasa între mai multe camere, putând
împinge cutiile aflate în acestea (notate cu Ci). De asemenea, el se poate urca pe o cutie, de exemplu pentru a
ajunge la întrerupătoarele notate cu ii care permit aprinderea luminii. Robotul este dotat cu un braț care ii
permite comutarea întrerupătoarelor, dacă ajunge la acestea. Acţiunea de coborâre de pe cutie este posibilă.
Scopul robotului este acela de a aprinde lumina în toate cele trei camere, plecând de la oricare stare inițială.

Limbajul calculului cu predicate poate fi folosit pentru planificare, cu o serie de adaptări, aşa cum se întâmplă în
metoda STRIPS de reprezentare - STanford Research Institute Problem Solver. De exemplu, o stare dată de
formula Loc(agent, camera1), unde Loc este un predicat, iar agent, camera1 sunt argumentele sale, reprezentate
de nişte constante, se referă de fapt la o mulțime de stări (o clasă de stări), în care agentul este situat în camera1,
indiferent de alte proprietăţi (cameră este iluminată sau nu, în cameră se află sau nu cutii, etc.). Un algoritm de
căutare care necesită o reprezentare completă, explicită a stărilor pierde din flexibilitate.

În STRIPS starea (situaţia) iniţială, ca şi oricare altă stare în general, va fi formulată numai ca o conjuncţie de
literali pozitivi sau negativi, respectând şi condiţia ca argumentele predicatelor să fie numai constante (un literal
este o formulă atomică, sau negaţia unei formule atomice). În reprezentarea din STRIPS starea iniţială (toate
luminile închise) din problema considerată este:

Loc(agent,camera1) ∧ 7 Iluminată(camera1) ∧ 7 Iluminată(camera2) ∧ 7 Iluminată(camera3)

Mai trebuie menţionat că în STRIPS descrierea stărilor poate fi şi una incompletă. O astfel de descriere poate
rezulta atunci când agentul lucrează într-un mediu inaccesibil. Într-un asemenea caz descrierea va corespunde
unei mulţimi (clase) de stări iniţiale pentru care trebuie găsită calea de atingere a scopului. De exemplu, în
starea iniţială de mai sus agentul pot exista în jurul său anumite obiecte, dar rezolvarea problemei considerate

1
nefiind influenţată de acestea, absenţa lor în descrierea stării iniţiale este chiar favorabilă pentru găsirea mai
rapidă a soluţiei.

Scopurile se reprezintă în STRIPS tot ca formule date prin conjuncţia unor literali pozitivi şi negativi. Pentru
problema anterioară scopul în metoda STRIPS va fi:

Loc(agent,camera1) ∧ Iluminată(camera1) ∧ Iluminată(camera2) ∧ Iluminată(camera3)

Există o legătură între noţiunea de scop şi cea de stare, în sensul că va trebui să existe o stare în care condiţia de
mai sus să fie satisfăcută şi acea situaţie este scopul de atins. Scopurile în STRIPS pot conţine variabile şi
acestea vor fi cuantificate cu ∃. De exemplu, pentru problema de a aprinde lumina în camera1, scopul va fi
formulat în STRIPS ca formula:

∃ cutia_x (Loc(agent, camera1) ∧ Loc(cutia_x,camera1) ∧ Lânga-Intr(cutia_x) ∧ Pe-cutie(agent))

Planificarea prin STRIPS este favorizată de modul în care sunt reprezentate acţiunile. Acestea sunt reprezentate
în STRIPS ca operatori caracterizaţi prin următoarele trei elemente.

Numele acţiunii, un simbol ce va fi inclus în plan atunci când acţiunea respectivă trebuie să facă parte din
secvenţa ce conduce la îndeplinirea scopului. Numele acţiunii trebuie văzut similar cu apelul unei
rutine, cea care comandă partea efectoare a agentului pentru a executa acţiunea. În consecinţă
numele acţiunii poate fi însoţit de variabile, reprezentând parametri care caracterizează acţiunea şi
care vor trebui să fie precizaţi (instanţiaţi) înainte de momentul execuţiei.

Precondiţia acţiunii reprezentând acele condiţii care trebuie îndeplinite pentru ca o acţiune să poată fi
efectuată. Se reprezintă ca o formulă formată din conjuncţia unor literali, cel mai adesea pozitivi, iar
în anumite cazuri şi negativi, iar variabilele care apar sunt toate cuantificate cu ∀. Atunci când
formula respectivă este adevărată înseamnă că acţiunea poate fi efectuată.

Efectul acţiunii reprezentând schimbările pe care le determină acţiunea. Se reprezintă ca o formulă formată
din conjuncţia unor literali pozitivi şi/sau negativi, iar dacă apar variabile acestea sunt cuantificate
cu ∀.

Planificări regresive este o variantă de căutare care adesea conduce la o reducere a complexității. Corespunde
situaţiei în care se pleacă de la scop, găsindu-se calea înapoi spre starea iniţială. O asemenea abordare este
facilitată de reprezentarea problemelor din STRIPS, deoarece operatorii ce modelează acţiunile pot lucra chiar
şi cu descrieri parţiale ale stărilor. Adică se poate trece de la o stare incomplet specificată (nu sunt instanţiate
toate variabilele) la cea dinaintea ei, tot într-o formă parţial determinată. Pe măsura apropierii de starea iniţială
în procesul de regresie se vor completa specificările stărilor, prin atribuiri ale variabilelor. Există multe
probleme de planificare pentru care varianta regresivă este mai avantajoasă decât cea progresivă, din următorul
motiv. De obicei starea finală are un număr mai mic de operatori care pot conduce la ea, decât numărul de
operatori care pot fi aplicaţi stării inițiale. Aceasta înseamnă că ne putem aştepta că factorul de expandare va fi
mic în varianta regresivă.

2
Exemplu de reprezentare
Implementarea metodei de reprezentare STRIPS presupune descrierea stărilor incomplet definite ca mulţimi de
stări ce satisfac anumite condiţii, descrierea stării iniţiale şi a celei finale, cât şi descrierea operatorilor ce permit
trecerea dintr-o stare în alta. Starea este modelată utilizând o clasă, iar câmpurile necesare acesteia vor fi deduse
din stările iniţiale şi finale şi din precondiţiile şi efectele operatorilor. Considerăm ca stare iniţială situaţia în
care camerele nu sunt iluminate, iar ca stare finală cea în care în toate cele trei camere lumina este aprinsă.
Scopul agentului (robotul Shakey) este acela de a aprinde lumina în toate cele trei camere.

Agentul este capabil de a întreprinde un număr de acţiuni care vor schimba starea mediului în care se află. Din
enunţul problemei, identificăm acţiunile posibile ca şi operatori (cu precondiţie şi efect) ca fiind următoarele:

Deplasare dintr-o cameră în alta;

Mutarea cutie Ci lânga întrerupător;

Urcarea pe cutia Ci ;

Coborâre de pe cutia Ci ;

Aprindere lumina în Camerak prin acţionare întrerupătorului ik (I şi k aparţin mulţimii {1, 2, 3})

Operatorii:

1. Deplasare. Robotul se poate deplasa dintr-o cameră în alta dacă nu se află pe cutie. Efectul este localizarea
robotului în camera dorită, diferită de cea iniţială.

2. Mutare-Cutiek-Lângă-Intrerupător. Agentul poate muta o cutie lângă întrerupător, dacă se află în aceeaşi
cameră ca şi cutia, nu se află pe cutie iar cutia nu este deja lângă întrerupător. Urmarea acestei acţiuni este
poziţionarea cutiei lângă întrerupător. Restul predicatelor din precondiţie rămân adevărate (x este cameră).

3. Urcă-Pe-Cutiak . Operaţia de urcare pe o anumită cutie are ca precondiţie localizarea agentului şi a cutiei
respective în aceeaşi cameră şi faptul că robotul nu este deja pe cutie (x este cameră).

3
4. Coboară-De-Pe-Cutiak . Robotul poate coborî de pe o cutie dacă se află în aceeaşi cameră cu aceasta şi se
află pe cutie. Pentru simplitate, se presupune că există cel mult o cutie în fiecare cameră. Ca efect, acţiunea
modifică doar predicatul Pe-Cutie(agent) la valoarea fals.

5. Aprinde-Lumina-In-Camerak . Operaţia de aprindere a luminii într-o anumită cameră presupune localizarea


agentului în camera respectivă. Deoarece enunţul problemei afirmă că întrerupătoarele pot fi atinse doar dacă
agentul se află pe o cutie, ca şi precondiţii mai apar: localizarea unei cutii în camera respectivă, agentul se află
pe cutie, iar camera nu este deja luminată.

Etape de rezolvare:
1. Definiți un model de reprezentare stare sub formă de structură în Python; se folosește un tuplu de tip
namedtuple. Se admite informații nespecificate.

2. Se implementează fiecare operator pentru planificarea regresivă; adică se verifică dacă operatorul este
relevant și apoi se determină stările predecesoare.

3. Se aplică o metodă de căutare (lărgime, A*, …). Pentru a determina dacă o stare este inclusă în alta se poate
folosi metoda stare_inclusa

def camp_inclus(camp1, camp2):


return camp2 == None or camp1==camp2
def lst_inclus(lst1, lst2):
print(lst1, lst2)
for i in range(len(lst1)):
if not camp_inclus(lst1[i], lst2[i]):
return False
return True
4
def stare_inclus(s1, s2):
for i in range(len(s1)):
if (type(s1[i]) is tuple):
if (not lst_inclus(s1[i], s2[i])):
return False
else:
if (not camp_inclus(s1[i], s2[i])):
return False
return True