Documente Academic
Documente Profesional
Documente Cultură
Maniera de prezentare
S facem o adunare
Comanda dat direct la prompter Cum scriem n CLIPS c 2+1=3? Operaia de adunare se realizeaz prin operatorul de adunare +, deci scriind: urmat de un <Enter> (orice comand se termin cu <Enter>), interpretorul va ntoarce dup care vom avea din nou un prompter:
Fapte S presupunem acum c dorim ca numerele pe care vrem s le adunm s fie indicate ca date de intrare. Precizarea intrrii ntr-un program CLIPS se face prin completarea unor fapte. De exemplu am putea s avem dou fapte ce conin numerele de adunat: Un fapt poate fi de dou feluri: fie este o construcie multi-cmp, n care cmpurile nu au nume i ordinea lor este semnificativ (fapte ordonate), fie una n care cmpurile au nume i, ca urmare, ordinea lor nu mai e important. n acest capitol vom lucra numai cu fapte ordonate. Un fapt este reprezentat cu unicitate n baz (introducerea n baz a unui al doilea fapt identic cu un altul nu este posibil).
31
Inteligen Artificial
Dar cum facem ca interpretorul s ia cunotin de aceste fapte? Cum la prompter el se ateapt s primeasc comenzi, ncercarea de a le scrie direct acolo va eua pentru c el nu cunoate nici o comand nmr :u a Comanda care comunic interpretorului un grup de fapte este d :e
Definirea faptelor
un comentariu primul fapt al doilea fapt un nume de grup (opional) de fapte Scriind la prompter acest rnd, aparent nu se ntmpl nimic. Faptele au fost interpretate dar nc nu snt depozitate n baza de fapte a sistemului. Trebuie s-i spunem explicit c faptele declarate prin definiiile de grupuri de fapte dfa fie depozitate n baza de fapte, prin comanda (ee s ec f s rt st i verificm acest lucru cu (Deci, s relum secvena: .f a c n afara faptelor pe care le-am depus noi, ne este raportat nc un fapt asupra cruia nu avem nici un merit: i Utilitatea acestui fapt, pe care sistemul l introduce ntotdeauna, st n .n nceperea execuiei programului (lucru care va deveni clar mai trziu). Acum avem faptele n baz. Cum procedm pentru a aduna cele dou numere? Va trebui s construim o regul capabil a prelua numerele din cele dou fapte i a le aduna. Aceast regul va trebuie s fie att de general nct ori de cte ori coninutul acestor dou fapte din baz s-ar modifica, ea s produc noua sum. Reguli Pentru a defini o regul folosim construcia dfu :e r l
Definirea regulilor
Un ablon (n englez pattern) este o construcie care imit mai mult sau mai puin un fapt ce ar trebuie s fie gsit n baz. n extremis un ablon poate s fie identic cu un fapt, caz n care el se va potrivi numai nu acesta. Cel mai adesea ns un ablon permite anumite grade de libertate n structura faptelor cu care se intenioneaz a se potrivi. Termenul englezesc pentru operaia de confruntare dintre un ablon i un fapt este pattern-matching. Structura unui pattern pentru fapte ordonate este ceva de genul: pattern ::= (<element-pattern>*) element-pattern ::= <atom> | ? | ?<var> | $? | $?<var> Un element-pattern atomic poate fi un ntreg, un real, sau un simbol. Celelalte construcii se refer la cmpurile ce pot fi variabile n pattern. Confruntare dintre un pattern i un fapt nseamn o parcurgere a pattern-ului n paralel cu faptul i confruntarea fiecrui cmp din pattern cu unul sau mai multe cmpuri din fapt:
Pattern-uri
32
Inteligen Artificial
dac elementul-pattern e un atom, atunci operaia de confruntare reuete cnd cmpul respectiv din fapt este identic cu acesta; dac elementul-pattern e ?atunci operaia reuete; , dac elementul-pattern e ?vr i variabila <a e legat, atunci operaia reuete iar variabila <a> < a nu v r > ,v r ca efect lateral, va fi legat la valoarea din cmp; dac elementul-pattern e ?vr variabila <e > ,<> i a v legat la o valoare <atunci operaia reuete a r v a l dac i numai dac valoarea din cmp este <a ;v l dac elementul-pattern e $ atunci operaia reuete, i un numr de zero sau mai multe ,? cmpuri snt avansate n fapt; dac elementul-pattern e $<a i r ? variabila <a e legat, atunci operaia reuete, un numr de v nu v r zero sau mai multe cmpuri snt avansate n fapt, i, ca efect lateral, variabila ?vr fi legat va <> a la acestea; dac elementul-pattern e $i variabila <e > v la<un ir ? valori (n 0), atunci operaia v legat a r n reuete dac i numai dac urmtoarele n cmpuri din fapt snt identice cu acestea; n plus n cmpuri snt avansate n fapt.
Pn acum am definit construcii ce pot apare n partea stng a unei reguli. Ce aciuni pot s apar n partea dreapt? Pentru moment orice ieire a programelor pe care le construim se va manifesta prin modificri n baza de fapte. Putem modifica colecia de fapte din baz n dou moduri: adugnd noi fapte sau retrgnd fapte existente acolo. Ca s adaug scriu: (se .fs <Ca ar s retrag trebuie ns s precizez despre ce fapt e vorba. Nu se pune problema a identifica din nou un fapt n partea dreapt a regulii prin intermediul unui pattern: un pattern nu poate aciona dect n partea stng. Ca urmare faptul ce trebuie retras trebuie s fi fost deja identificat printr-un pattern, i un index al lui reinut. Ca s rein indexul unui fapt n baza de Asertarea i fapte folosesc construcia:
retragerea faptelor
care poate s apar doar n partea stng a regulii. Variabila ?v va lega la indexul unui fapt se < a peste care se potrivete pattern-ul <a e un index de fapt putem comanda retragerea lui din . pt Avnd t baz printr-o comad (retract ?<var>) ce trebuie s apar n partea dreapt a regulii. Revenind la exemplul de adunare a celor dou numere, o prim tentativ ar putea fi urmtoarea: Faptul nou introdus cu (conine activarea unei evaluri a operatorului de adunare (=n faa a s s apelului de funcie). Scriind un df prompter ncarc o regul n baza de reguli. Ca s lansez n execuie regulile e la r asupra faptelor, o comand (trebuie executat. n cazul derfa, ne ateptm ca activarea acestei reguli s produc urmtoarea modificare n baza de fapte (vizualizat cu (a ): c f
Ateptarea nu se confirm ntr-adevr, afiarea bazei de fapte, relev, urmtoarele fapte: Care este motivul? Cum de au aprut acolo i sumele 2 i 4? Rspunsul st n mecanismul de aplicare a regulilor. Cum se aplic regulile asupra faptelor? S presupunem c o regul R i satisface toate pattern-urile asupra unei configuraii de fapte din baz. Spunem c s-a creat o activare a respectivei reguli. O activare este format dintr-o pereche ce asociaz unui nume de regul o secven de fapte, cte unul pentru fiecare pattern din partea de condiii a regulii. Aceeai regul mpreun cu o alt secven a unor fapte ce se potrivesc cu secvena de pattern-uri a prii stngi va genera o alt activare. E posibil deci inclusiv situaia ca n activri diferite s participe aceleai fapte dar ntr-o alt ordine. Spre exemplu, n exemplu nostru, n care avem regula a faptele iniiale n i a (ur partea de condiii a regulii, respectiv perechea de pattern-uri: ia ur n (n m m, a va crea urmtoarele activri:
33
Inteligen Artificial
act1:
act2:
act3:
act4: Figura 1: Activri Ca urmare, pentru fiecare dintre aceste activri, legrile variabilelor ? ? faptul calculat snt: i i x y act1: ?x 2, ?y 2 (ua = = s m act2: ?x 2, ?y 1 (u = = s m act3: ?x 1, ?y 2 (deja existent = = ,s u m act4: ?x 1, ?y 1 (ua = = s m Un program care nu se mai termin Modificnd un singur simbol n regula aputem face ca ea s se aplice la nesfrit. d u n Acest lucru se ntmpl, de exemplu dac n loc de fapte (ua crea tot fapte ( m am s :) r) a m Bucla infinit e datorat faptului c, la crearea fiecrui nou element din baz, de forma (ur ,na m acesta va participa n attea activri cte fapte snt deja n baz, ceea ce va duce la apariia a tot attea fapte noi, .a.m.d. Dac programul a intrat ntr-o bucl infinit nu avem alt soluie dect s oprim programul prin mijloace brutale (<CTRL>C, sau, n extremis, <CTRL><ALT><DEL>). n realitate, lsat s mearg, programul se va opri datorit epuizrii memoriei de lucru. i atunci, care e soluia? Exerciiul de adunare a dou numere, n varianta n care am ncercam s-l rezolvm pn acum, este mai mult un exemplu de contra-problem, pentru a nva din eecuri. Dei lipsit de elegan, o soluie ar fi una n care separm din capul locului cele dou numere n fapte distincte: Mai jos vom considera o alt soluie care simuleaz o iteraie. ncrcarea dintr-un fiier Pn acum programul nostru a constat dintr-o singur regul. Pe aceasta am putut-o scrie direct la prompter. Dar cnd dimensiunea unui program e mai mare dect o singur linie de comand, lucrul direct la prompter devine greoi i preferm s ncrcm programul dintrun fiier. Pentru aceasta utilizm comanda (l ad <nume. o fiier>) u n 4 )
34
Inteligen Artificial
Presupunnd c programul nostru, constnd din declaraiile dfa df afl ntr-un fiier po ec e i se f r , r1 g ncrcarea lui n memorie se face astfel: Odat ncrcat n memorie putem verifica faptele iniiale: La comanda: Programul este lansat n execuie, iar pentru a verifica rezultatul vom controla din nou faptele:
Calculul unui maxim S presupunem c ne propunem s calculm maximul dintr-o secven de numere. Numerele snt definite de data aceasta printr-un unic fapt nm u care simuleaz un vector, iar un e fapt mx conine iniial primul numr din secven. Prima soluie este urmtoarea: a Regula anlocuiete faptul ma un altul dac primul numr din secven e mai mare dect _a m c cu vechiul mx .a Construcia (et tot un pattern dar care realizeaz o comparaie prin activarea unui s este t) Cum facem verific condiia complementar, situaie n care las aza o comparaie operator de comparare. Regula pastre _max neschimbat mx elimin un element din vector. n ambele reguli nlocuirea vectorului cu unul a dar
35
Inteligen Artificial
mai scurt cu un element se face prin retragerea faptului (u vechi i asertarea altuia nou care are ner m toate elementele vechi cu excepia primului. n toate cazurile, variabila multi-cmp $r leag la se ? e restul elementelor vectorului. Reguli ce se activeaz doar cnd altele nu se pot aplica (prin default) Ceea ce deranjeaz n aceast soluie este necesitatea de a preciza att condiia > ct i pe cea complementar . Urmtoarea variant elimin testul complementar, care este unul redundant: Din regula pae disprut pattern-ul care identific elementul mx baz ct i testul de . ata sa rm z _ a din Problema acum este: cum tim c psa aplic exact n cazurile n care nu se poate aplica aa ata sem r_ e z ? _ m c Prioritatea Rspunsul este: fcnd ca as fie mai prioritar dect pastreaza_ rostul declaraiei sdin _a m c . Acesta este max a l i regulilor capul regulii aa .m _Fcnd acest lucru form ca pastreaza_m x n faza de selecie care urmeaz c s fie eliminat a filtrrii. ntr-adevr, dup filtrare ambele snt activate. Declaraiile de sprovoac o sortare a a l i regulilor activate la oricare pas. Prioritatea mai mic a regulii pastreaza_ma se aplice numai face ca ea s x n cazurile n care a se mai poate aplica. _ nu c m Exemplul arat c pentru a face ca o condiie de complementaritate s poat fi implementat printr-o declaraie de prioritate trebuie s facem ca regula cu prioritate mai mic s aib o condiie de aplicabilitate mai larg sau cel puin egal cu cele ale regulilor cu care intr n competiie. Numai n acest fel ne asigurm c n cazurile n care celelalte nu se aplic, aceasta i va satisface nc condiiile. Revenind la exemplul nostru, realizarea condiiei de terminare a iteraiei se face prin impunerea ca faptul nmr mai conin cel puin o poziie (variabila ? Doar acest lucru face ca s ue e ). ambele reguli s se mai aplice att ct mai exist mcar un numr neprocesat. Revenind la o schem logic imperativ Un sistem bazat pe reguli de producie e n general orientat spre alte tipuri de activiti dect cele ce se preteaz la o soluie imperativ. Acest lucru nu nseamn ns c el e incapabil a efectua unele tipuri de prelucrri ce snt specifice unui sistem imperativ. S ncercm n aceast seciune s nelegem cum trebuie procedat dac am dori s utilizm un sistem bazat pe reguli pentru a implementa o secven imperativ. Motivaia acestei tentative este aceea c pe parcursul rezolvrii unei probleme care s necesite utilizarea mainriei bazate pe reguli poate s apar o subproblem care necesit o soluie imperativ. Cum procedm? Prsim sistemul bazat pe reguli pentru a construi o procedur imperativ ce s fie apelat din acesta? E i aceasta o posibilitate, dar uneori e mai comod s gndim n maniera bazat pe reguli nsi acea secven. Soluia imperativ a problemei de maxim este cea din Figura 2. iniializri x
C1 ?
C2 ?
S1
36
S2
Inteligen Artificial
Figura 2: Decuparea unei secvene iterative n reguli n Figura 2, C1 este testul de terminare iteraie, C2 cel care verific ?S1 reprezint nlocuirea > , lui max baz, iar S2 semnific scurtarea vectorului de numere cu un element. Decuparea din acestui algoritm n reguli este indicat n figur prin zone colorate. ntr-adevr ai pau n _a ata m sa c rm e z _ comun testul C1 cu ieire True i secvena S2, n timp ce aconine n plus secvena de _a m c actualizare a lui mx .a Iniializrile snt realizate direct de declaraiile df includere de fapte n baz de e f iar terminarea iteraiei (ieirea din testul C1 pe False) se realizeaz automat n momentul n care nici una dintre regulile aa pa tea mai satisfac condiiile, lucru care se ntmpl cnd faptul _ nu-i m srz c i a_ m ce conine numerele a ajuns la forma: ( .n Utilizarea semafoarelor Cea de a treia soluie pe care o propunem e iscat din observaia c exist o anumit redundan a operaiunilor desfurate n cele dou reguli, manifestat n secvena S2, preocupare ce n cazul de fa poate prea forat. Ea evideniaz o opiune ce poate deveni necesitate n alte ocazii. Aadar s ncercm s reducem redundana din cele dou reguli. Pentru aceasta va trebui s individualizm ntr-o regul separat operaia comun, minisecvena S2, decrementarea vectorului de numere. S introducem o secven st face care e _ acest lucru. Secvenierea regulilor devine acum cea din Figura 3, adic a psa _ urmat de st ori ata c rm ea z _ .e _ x
Figura 3: O alt soluie de decupare De data aceasta nu mai e posibil s umblm la prioriti pentru a impune o secven, fcnd de exemplu ca st aib o prioritate mai mic att dect at i dect past a a_mastabilirea acestei s e _ ct c u , pentru c x re z secvene nu se face n faza de selecie, ci ea ine de cicluri separate ale motorului. O soluie o constituie introducerea unui semafor (flag) pe care ai ps-lzseteze, iar ss-l reseteze de ca lsa i t atx u rm ea z a _ e t _ fiecare dat, ca n Figura 4.
37