You are on page 1of 291

Sisteme bazate pe cunostinte 289

Bibliografie
Barr, A., and Feigenbaum, E. A. (1981). The Handbook of Artificial Intelligence, Vol.
I, II, William Kaufmann, Los Altos, CA.
Benchimol, G., Levine, P., Pomerol, J. C. (1993). Sisteme expert în întreprindere,
Editura Tehnica, Bucuresti.
Boullart, L., Krijgsman, A., and Vingerhoeds, R. A. (1992). Application of Artificial
Intelligence in Process Control, Pergamon Press, Oxford.
Chang, K., and Lee, L. (1973). Symbolic Logic and Mechanical Theorem Proving,
Academic Press, New York.
Cârstoiu, D. I. (1994). Sisteme expert, Editura ALL, Bucuresti.
Cohen, P. R., and Feigenbaum, E. A. (1982). The Handbook of Artificial Intelligence,
Vol. III, William Kaufmann, Los Altos, CA.
CLIPS Reference Manual (1993). Vol. I – III, Software Technology Branch, Lyndon
B. Johnson Space Center.
Cristea, D. (1989). Inteligenta Artificiala – Note de curs, Univ. “Al. I. Cuza” Iasi.
Croitoru, C. (1985). Bazele informaticii – Note de curs, Univ. “Al. I. Cuza” Iasi.
David, J. M., Krivine, J. P., and Simmons, R (edit.) (1993). Second Generation Expert
Systems, Springer-Verlag, Berlin.
Diederich, J., Ruhmann, I., and May, M. (1987). “KRITON: A knowledge acquisition
tool for expert systems”, in International Journal of Man-Machine Studies, 26, pp. 29 – 40.
Dumitras,A. (1997). Proiectarea retelelor neuronale artificiale, Ed. Odeon, Bucuresti.
Findler, N. V. (edit.) (1979). Associative Networks: Representation and Use of
Knowledge by Computers, Academic Press, New York.
Florea, A. M., Boangiu, A. G. (1994). Bazele logice ale inteligentei artificiale,
Universitatea “Politehnica” Bucuresti, Bucuresti.
Forgy, C. (1985). “Rete: A Fast Algorithm for the Many Pattern/Many Object Pattern
Match Problem”, in Artificial Intelligence, 19, pp. 17 – 37.
Freuder, E., and Mackworth, A. (1994). Constraint-Based Reasoning, The MIT Press,
Cambridge.
Fu, K. S., Gonzalez, R. C., and Lee, C. S. G. (1987). Robotics: Control, Sensing,
Vision, and Intelligence, Mc Graw-Hill, New York.
Fukuda, T., and Shibata, T. (1992). “Theory and Applications of Neural Networks for
Industrial Control Systems”, in IEEE Trans. On Industrial Electronics, vol. 39, n. 6, pp. 472 –
489.
Georgescu, I. (1985). Elemente de inteligenta artificiala, Edit. Academiei, Bucuresti.
Giarratano, J., and Riley, G. (1989). Expert Systems: Principles and Programming,
PWS-KENT, Boston.
Giarratano, J. (1993). CLIPS User’s Guide, Software Technology Branch, NASA
Lyndon B. Johnson Space Center.
290 Bibliografie

Harmon, P., and Sawyer. B. (1990). Creating Expert Systems for Business and
Industry, John Wiley & Sons, New York.
Hutanu, C. (1983). Circuite logice si comenzi secventiale, Editura Junimea, Iasi.
Hutanu, C., Postolache, M., Panescu, D. (1998). Sisteme cu microprocesoare în
conducerea automata a proceselor, Volumul I, Editura Academica, Iasi.
Kirsh, D. (edit.) (1992). Foundations of Artificial Intelligence, The MIT Press,
Cambridge.
Lehmann, F. (edit.) (1992). Semantic Networks in Artificial Intelligence, Pergamon
Press, Oxford.
Linster, M. (1993). “Explicit and operational models as a basis for second generation
knowledge acquisition tools”, in [Dav 93], pp. 465 – 494.
Livovschi, L., Georgescu, H. (1986). Sinteza si analiza algoritmilor, Editura
Stiintifica si Enciclopedica, Bucuresti.
Lucas, P., and Van der Gaag, L. (1991). Principles of Expert Systems, Addison-
Wesley, Wokingham.
Malita, M., Malita, Mr. (1987). Bazele inteligentei artificiale, Edit. Tehnica,Bucuresti.
Metakides, G., Nerode, A. (1998). Principii de logica si programare logica, Editura
Tehnica, Bucuresti.
Newell, A. (1982). “The knowledge level” in Artificial Intelligence, 18, pp. 87 – 127.
Newell, A., and Simon, H. A. (1990). “GPS, A Program That Simulates Human
Thought” in Allen, J., Hendler, J., and Tate, A., Readings in Planning, Morgan Kaufmann,
San Mateo, pp. 59 – 66.
Nilsson, N., (1991). “Logic and artificial intelligence”, in Artificial Intelligence, 47,
pp. 31 – 56.
Nisenfeld, A. E., and Davis, J. (1989). Artificial Intelligence Handbook, Vol. I, II,
ISA, Research Triangle Park.
Patterson, D. (1990). Introduction to Artificial Intelligence and Expert Systems,
Prentice-Hall, Englewood Cliffs, N J.
Panescu, D. (1992). “On Planning Use In Robot Control”, în Buletinul Inst. Politehnic
Iasi, Tomul XXXVIII (XLII), Fasc. 1-4, Sectia IV, Aut. si Calculatoare, pg. 95 - 101.
Panescu, D., Hutanu, C. (1992a). “Intelligent Aids For PLC Programming”, Prep. of
IFAC Workshop on Aut. Control for Quality and Productivity, Istanbul, Vol. I, pp. 96–102.
Panescu, D. (1994). “Contributii la modelarea si conducerea robotilor industriali”,
Teza de doctorat, Universitatea Tehnica “Gh. Asachi” Iasi.
Panescu, D., Hutanu, C., Pricop, A. (1995). “Some Educational Aspects On Teaching
Artificial Intelligence To Automatic Control Students”, Buletinul Institutului Politehnic Iasi,
Tomul XLI (XLV), Fasc. 1-4, Sectia IV, Automatica si Calculatoare, pg. 31 – 36.
Panescu, D. (1995a). “A CIM Benchmark Problem For AI Based Control”, Prep. of
the IFAC/IMACS Workshop on AI in Real-Time Control, Bled, Slovenia, pp. 219 – 224.
Sisteme bazate pe cunostinte 291

Panescu, D., Resmerita, St. (1998). “On Using Fuzzy Expert Systems in the Cement
Production Control”, Proceedings of the 2-nd International Symposium on Intelligent
Manufacturing Systems – IMS’98, Sakarya, Turkey, pp. 863 – 872.
Popovic, D., and Bhatkar, V. (1994). Methods and Tools for Applied Artificial
Intelligence, Marcel Dekker, New York.
Rich, E., and Knight, K. (1991). Artficial Intelligence, Mc Graw-Hill, New York.
Robertson, D. (1989). An Introduction to Knowledge Representation and Expert
Systems, Department of Artificial Intelligence, University of Edinburgh, Edinburgh.
Rus, T. (1983). Mecanisme formale pentru specificarea limbajelor, Editura
Academiei, Bucuresti.
Russell, S., and Norvig, P. (1995). Artificial Intelligence: a Modern Approach,
Prentice Hall, New Jersey.
Sâmbotin, C. (1997). Sisteme Expert cu PROLOG, Editura Tehnica, Bucuresti.
Sofron E., Bizon N., Ionita S., Raducu R. (1998). Sisteme de control fuzzy. Modelare
si proiectare asistate de calculator, Editura ALL, Bucuresti.
Sowa, J. (edit.) (1991). Priciples of Semantic Networks, Morgan Kaufmann, San
Mateo, California.
Streinu, I. (1986). LISP limbajul de programare al inteligentei artificiale, Editura
Stiintifica si Enciclopedica, Bucuresti.
Serbanati, L. D., Giumale, C. (1985). Inteligenta artificiala, Editura Tehnica,
Bucuresti.
Toderan, G., Costeiu, M., Giurgiu, M. (1995). Retele neuronale artificiale, Editura
Albastra, Cluj-Napoca.
Touretzky, D. (1984). LISP A Gentle Introduction to Symbolic Computation, Harper &
Row, New York.
Tzafestas, S. (edit.) (1993). Expert Systems in Engineering Applications, Springer
Verlag, Berlin.
Tandareanu, N. (1994). Introducere în programarea logica. Limbajul PROLOG,
Editura Intarf, Craiova.
Vaessen, N., and De Feyter, A. (1992). “G2 – The development environment for real-
time expert systems”, in Preprints of the International Symposium on Artificial Intelligence in
Real-Time Control, Delft, the Netherlands, pp. 619 – 623.
Van de Velde, W. (1993). “Issues in Knowledge Level Modelling”, in [Dav 93], pp.
211 – 231.
Watson, M. (1999). Aplicatii JAVA inteligente pentru Interent si intraneturi, Editura
ALL Educational, Bucuresti.
Wielinga, B., Van de Velde, W., Schreiber, G., Akkermans, H. (1993). “Towards a
Unification of Knowledge Modelling Approaches”, in [Dav 93], pp. 300 – 335.
Winston, P. H. (1982). Inteligenta Artificiala, Editura Tehnica, Bucuresti.
1.1. Istoric

Momentul de început al inteligentei artificiale (IA) este considerat ca fiind anul 1956,
când la Dartmouth College a avut loc o conferinta ce-si propunea dezbaterea unor noi aspecte din
domeniul calculatoarelor; aici s-a pus problema crearii unor masini de calcul inteligente. La aceasta
conferinta John Mc Carthy a introdus conceptul de IA si astfel se considera ca acesta este
momentul în care aceasta s-a desprins din stiinta calculatoarelor, devenind un domeniu independent.
Conferinta respectiva poate fi privita ca început al IA si pentru ca Newell, Shaw si Simon au descris
primul program în care calculatorul era utilizat ca procesor simbolic, “Logical Theorist”; acesta poate
fi considerat primul program de IA [Bar 81]. Aceeasi cercetatori si-au pus si problema realizarii unui
limbaj capabil sa modeleze posibilitatile umane de procesare a informatiilor. Ei au creat limbajul IPL
(Information Processing Language). Limbajul care avea sa se impuna în acest domeniu a fost însa cel
dezvoltat de John Mc Carthy, si anume LISP (LISt Processing).

Stiinta care a avansat, chiar înainte de aparitia calculatoarelor, în domeniul unor


constructii inteligente, artificiale, obtinând unele rezultate care prin generalitatea lor au anticipat
posibilitatea ”mecanizarii” procesului de efectuare a rationamentelor, este logica formala sau logica
matematica. Ea a devenit una din bazele IA. În acest sens sunt de amintit urmatoarele momente:

• formalizarea matematica a unor legi ale logicii, de catre Boole (1847);


• dezvoltarea calcului cu predicate de ordin întâi, de catre Frege (1879);
• dezvoltarea unor metode formale de efectuare a rationamentelor, de catre Whitehead, Russell,
Tarski si Kleene (în jurul anului 1950);
• elementele despre calculabilitate, datorate lui Church si Turing au constituit legatura între
formalizarea rationamentului si stiinta calculatoarelor. Turing, considerat si ca parinte al IA, a
observat ca numerele constituie un aspect neesential al calculabilitatii - ele sunt doar o posibilitate
de interpretare a unor stari interne pentru masina algoritmica. El a inventat un model simplu,
universal si nenumeric al calculabilitatii – masina Turing (1936) - si a argumentat posibilitatea ca
2 Domeniul inteligentei artificiale si al sistemelor bazate pe cunostinte

un mecanism computational sa aiba o comportare inteligenta; în acest sens a ramas celebru si


testul pe care l-a propus Turing pentru validarea inteligentei artificiale.
• studiul lui Chomsky asupra teoriei gramaticilor generative (1957) a constituit o baza pentru
dezvoltarea unui subdomeniu al IA, cel al prelucrarii limbajului natural.

Câteva date mai importante care au marcat evolutia IA sunt:

• crearea modelului perceptronului (neuronul artificial) de catre Rosenblatt în 1958, un început


pentru retelele neuronale;
• dezvoltarea limbajului LISP de catre John Mc Carthy în 1958;
• introducerea logicii fuzzy de catre Zadeh în 1965;
• stabilirea principiului rezolutiei, care va sta la baza demonstrarii automate a teoremelor, de
catre Robinson în 1965;
• folosirea retelelor semantice în reprezentarea cunoasterii de catre Quillian în 1968;
• în 1970 apare limbajul PROLOG (PROgrammation en LOGique), dezvoltat într-o prima forma
de Alain Colmerauer la Universitatea din Marsilia;
• în 1972 Newell si Simon demonstreaza ca regulile de productie pot fi un mijloc adecvat de
reprezentare a cunoasterii în ceea ce priveste modelarea capacitatii umane de a rezolva probleme;
• Minsky introduce în 1975 cadrele, ca o modalitate de reprezentare a unor situatii stereotipe;
• în 1976 apare limbajul Smalltalk care este considerat un prim limbaj orientat pe obiecte;
• Forgy dezvolta în 1979 algoritmul RETE, cel care va sta la baza functionarii unui numar mare de
sisteme expert (SE).

Toate notiunile enumerate mai sus sunt astazi elemente de baza ale IA. La sfârsitul anilor 70
si începutul anilor 80 apar aplicatiile industriale ale IA, în primul rând fiind vorba de SE. În ceea ce
priveste evolutia acestora, sunt de referinta urmatoarele momente:

• primul SE este considerat a fi DENDRAL (1965), realizat de catre Feigenbaum, ca SE pentru


domeniul chimiei organice;
• HEARSAY (1970) este un prim SE folosit în întelegerea vorbirii;
• MYCIN (1976) este unul din primele SE folosite în domeniul medical si care a avut o importanta
deosebita în evolutia sistemelor bazate pe cunostinte (SBC), mai ales în privinta efectuarii
rationamentelor în conditii de incertitudine;
• PROSPECTOR (1976) a fost un SE de succes în domeniul prospectiunilor geologice;
• R1/XCON (1981) este unul din primele SE folosite în mediul industrial, el fiind dedicat scopului
de configurare a sistemelor de calcul.
Sisteme bazate pe cunostinte 3

1.2. Definitia inteligentei artificiale

Pentru a putea defini inteligenta artificiala trebuie sa definim mai întâi inteligenta.
Suntem în cazul unui termen complex si intrat în obisnuinta, pentru care încercarea unei definitii
precise poate fi si foarte dificila si lipsita de utilitate. Totusi este importanta macar trasarea unei
granite în jurul conceptului respectiv, necesara aici pentru precizarea unor elemente ale IA.

Inteligenta poate fi definita ca fiind aptitudinea de a sesiza anumite raporturi existente între
obiecte si fenomene. Aceasta sesizare poate fi senzoriala (la animale) si în acest caz ea se datoreaza
reflexelor conditionate, sau intelectuala (la om) si aici intervin limbajul si conceptele.
Cercetatorii din domeniul IA au cautat sa defineasca inteligenta dintr-o perspectiva care sa
permita apoi definirea IA. De exemplu, Findler arata “ca un sistem este considerat a avea
proprietatea de inteligenta, daca se poate adapta singur la noi situatii, are capacitatea de a rationa,
adica de a întelege legaturile dintre fapte, de a descoperi întelesuri si de a recunoaste adevarul. De
asemenea, un sistem inteligent poate sa învete, cu alte cuvinte sa-si îmbunatateasca nivelul
performantelor pe baza experientei” [Fin 79]. Astfel, Findler a cuprins în aceasta definitie
dezideratele pe care le urmareste IA.
Un alt cercetator al conceptului, P. Winston, apreciaza ca inteligenta apare a fi un amalgam
cu foarte multe proprietati de reprezentare si prelucrare a informatiei [Win 82]. În aceasta forma,
definitia pe de o parte ne arata dificultatea precizarii acestei notiuni, dar si apropierea de domeniul
calculatoarelor. Acestea, prin programele lor, reprezinta si prelucreaza informatia. De aici, se poate
spune ca IA este o disciplina care se ocupa de programarea calculatoarelor. Aceasta afirmatie tine
seama de faptul ca programele au proprietatea de a reprezenta situatiile cele mai diferite, prin
simboluri si operatii logice. Alte definitii ale IA se bazeaza pe conceptul de inteligenta, folosind
aceasta notiune ca atare. De exemplu, Barr defineste IA ca fiind un domeniu al stiintei calculatoarelor
care are ca obiectiv conceperea sistemelor de calcul inteligente, adica a acelor sisteme care sa
manifeste proprietati pe care în mod obisnuit le asociem inteligentei în comportamentul uman
(întelegere a limbajului, învatare, rezolvare de probleme) [Bar 81]. Deci IA poate fi înteleasa ca
modalitate de a simula comportamentul inteligent pe diferite sisteme tehnice.

În opozitie cu aceste încercari, exista o alta conceptie, conform careia nu se poate da


o definitie a inteligentei, deoarece aceasta nu poate fi izolata si definita ca o notiune de sine
statatoare. În schimb, inteligenta poate fi cercetata pe baza elementelor urmatoare.

1) Numai comportarea poate fi observata si apreciata calitativ. Astfel, inteligenta oamenilor


sau a fiintelor în general poate fi dedusa numai din comportarea sau comunicarea acestora. De aici se
4 Domeniul inteligentei artificiale si al sistemelor bazate pe cunostinte

poate spune ca inteligenta este o constructie ipotetica. Nu se poate construi o masura a acesteia, fara
a masura comportamentul subiectului pentru care vrem sa punem în evidenta inteligenta.
Putem schematiza comportarea
inteligenta a omului prin fig. 1.1, în care
lumea perceptie aceasta apare sub forma ciclica. Activitatea
lumea
interioara exterioara inteligenta este determinata de interactiunea
rationament
lumea pe care o are omul cu mediul exterior, în
interioara care apare un feedback, închis prin
actiune
intermediul sistemului senzorial. În lumea
interioara, rationamentul, ce determina
deciziile de actiune, se efectueaza pe baza
Fig. 1.1. Ciclul activitatii inteligente a omului datelor din exterior, obtinute prin perceptie,
dar si pe baza unui model “intern” al lumii.
Acesta este un model al lumii externe, pe care omul desfasoara fictiv actiuni, într-o lume interioara,
realizând un fel de simulare. Pe baza unei asemenea scheme s-a ajuns la o concluzie importanta
pentru IA, aceea a necesitatii introducerii în calculator a unui model al lumii, numit în IA model de
reprezentare a cunoasterii. De aici a derivat unul din cele mai importante subdomenii ale IA:
reprezentarea cunoasterii – reprezentarea realitatii care sa poata fi implantata într-un sistem de
calcul.
2) Comportarea inteligenta este relativa. Nu putem avea o masura absoluta, ci numai una
obtinuta prin raportare. De exemplu, testele de inteligenta dau un scor care raporteaza subiectul la o
comportare medie.
3) O manifestare inteligenta luata în mod izolat nu asigura o comportare inteligenta în general.
Daca un subiect are o comportare inteligenta într-o anumita situatie nu putem trage concluzia
inteligentei lui în general. Sub acest aspect IA apare înca departe de inteligenta naturala, deoarece ea
se manifesta în prezent în situatii particulare.
4) Pentru a putea masura inteligenta trebuie sa avem o masura a complexitatii sarcinii pe care
o rezolva subiectul. Daca am avea asa o masura (nu exista o singura metrica a complexitatii, universal
acceptata de toate domeniile de activitate), atunci am putea spune despre o comportare ca este cu
atât mai inteligenta, cu cât sarcina de rezolvat este mai complicata.

Daca luam în considerare aceste patru aspecte si le folosim ca niste criterii pentru a
defini inteligenta calculatoarelor, deci IA, obtinem :

1) Inteligenta unui program poate fi dedusa numai din comportarea acestuia.


2) Inteligenta unui program este întotdeauna relativa.
Sisteme bazate pe cunostinte 5

3) Comportarea inteligenta a unui program trebuie sa se manifeste în situatii cât mai frecvente
si mai variate.
4) Pentru a putea aprecia inteligenta unui program trebuie sa masuram complexitatea sarcinii
de intrare.

Dupa asemenea criterii, concluzia la care ajungem este ca în prezent programele au


doar un nivel primitiv de inteligenta. În acest sens, sistemele actuale de IA nu ar trece testul Turing.
Acesta a fost propus de Alan Turing în 1950 si consta în interogarea unei persoane si a unui sistem
de calcul, de catre un evaluator uman. Daca acesta nu va reusi sa discrimineze raspunsurile
calculatorului de cele ale persoanei, atunci înseamna ca s-a obtinut IA. Sistemele actuale nu pot trece
testul Turing si atunci se poate pune si problema daca ”inteligenta artificiala” exista. Cum în unele
abordari inteligenta este echivalata cu gândirea si cum, dupa testul mai sus mentionat, sau dupa alte
criterii din domeniul fiziologiei, se poate ajunge la concluzia ca sistemele tehnice actuale nu gândesc,
rezulta ca IA este o combinatie de termeni cu rol metaforic. Chiar si într-o asemenea viziune, IA
ramâne importanta în prezent, datorita tehnicilor utile pentru practica care au fost create “încercând”
obtinerea inteligentei artificiale. Noile tehnici ale IA au permis rezolvarea unor sarcini complexe, ce în
trecut nu puteau fi rezolvate, sau erau rezolvate mult mai dificil – costisitor. De aceea, se poate
propune urmatoarea definitie a IA:

Definitia 1.1. IA este o ramura a stiintei calculatoarelor ce studiaza realizarea unor tehnici de
programare performante, care sa permita rezolvarea unor sarcini complexe.

Program clasic Program de IA

Intrari Problema

Baza Baza de
de Algoritm Euristica
cunostinte
date

Iesiri Solutie

Fig. 1.2. O comparatie între programarea clasica si IA

Conform acestei definitii apare o apropiere între IA si domeniul clasic al informaticii.


Delimitarea se poate face pe baza fig. 1.2. Si în partea clasica exista un program, care poate folosi
un model, pe care sa îl prelucreze conform unui algoritm. În schimb, daca în cazul informaticii clasice
6 Domeniul inteligentei artificiale si al sistemelor bazate pe cunostinte

baza de date cuprinde informatiile organizate într-o forma particulara, legata de algoritmul folosit si
pentru a-l servi pe acesta, în baze de cunostinte sunt memorate nu numai fapte, ci si relatii ce exista
între acestea, si reguli, adica modalitati de a prefigura ceea ce se va întâmpla în lumea exterioara, ca
urmare a unor actiuni.
A doua deosebire importanta este aceea ca într-un program de IA în locul algoritmului,
determinist de obicei în problemele abordate în programarea clasica, apare o metoda euristica
ghidând obtinerea solutiei. Euristica (heuristica) este o metoda ce se bazeaza pe reguli derivate din
experienta, introducând în multe situatii un grad de incertitudine. Spre deosebire de algoritm, frecvent
ea nu mai este garantata în privinta obtinerii solutiei. Chiar si asa, în IA se folosesc frecvent metode
euristice, deoarece acestea pot determina solutii în situatii în care un algoritm nu exista sau este
ineficient de implementat.
Sisteme bazate pe cunostinte 7

1.3. Domenii ale inteligentei artificiale

Ca si alte discipline, IA include câteva arii distincte de cercetare, fiecare cu tehnici si


terminologii specifice, care au însa si puncte de conexiune.

1) Un subdomeniu, deja amintit în paragraful anterior, este cel al reprezentarii cunoasterii.


2) Întelegerea limbajului natural îsi propune sa realizeze sisteme care sa poata sustine un
dialog cu operatorul, obtinând astfel interfete prietenoase pentru sistemele tehnice din diferite
domenii. Exista realizari în acest sens, dar care rezolva problema doar pentru un univers de discurs
limitat. În IA, prin univers de discurs întelegem o portiune a lumii reale, pentru care avem sau dorim
sa obtinem un model, pe care sa se poata efectua rationamente. Domeniul întelegerii limbajului
natural nu trebuie confundat cu acela al întelegerii vorbirii, care se refera la identificarea si
prelucrarea sunetelor si care în prezent este mai mult legat de sistemele electronice de procesare a
semnalelor sonore, decât de IA.
3) Vederea artificiala consta în întelegerea unei scene din imaginea ei proiectiva. S-a
dezvoltat folosind o baza matematica independenta - recunoasterea formelor - si are aplicatii
industriale, de exemplu în robotica.
4) Demonstrarea automata a teoremelor se refera la un element central în IA, acela de a
face deducerea automata a unei (unor) concluzii dintr-un grup de fapte. Rezolvarea acestei probleme
implica doua aspecte: o reprezentare corespunzatoare a grupului de fapte (element din aria
reprezentarii cunoasterii) si o metoda de deducere a concluziilor, chestiune cercetata de
demonstrarea automata a teoremelor. Acest subdomeniu are multe implicatii si în celelalte capitole de
IA si a fost dezvoltat pe bazele logicii matematice.
5) Învatarea este privita în IA ca fiind procesul prin care oamenii si calculatoarele îsi
îmbogatesc cunostintele si îsi perfectioneaza activitatea. Subdomeniul respectiv al IA se ocupa cu
cercetarea procesului de învatare si cu crearea programelor de calculator ce se pot autoperfectiona.
6) Rezolvarea problemelor (în engleza termenul folosit este ”Search” – cautare a solutiei)
se refera la procesul de gasire a unei secvente de actiuni prin care sa se îndeplineasca un anumit
scop. Rezolvarea problemelor are conexiuni imediate cu demonstrarea automata a teoremelor, care
poate oferi o modalitate de gasire a solutiei în anumite probleme, cu construirea SE si este un
subdomeniu important si pentru aplicatiile de conducere a proceselor sau robotilor industriali. Din
punct de vedere al informaticii, rezolvarea problemelor a dat unele metode utile si aplicabile si în
programarea clasica. În unele tratate, putem gasi un capitol distinct cu numele ”Efectuarea
rationamentelor” (în engleza ”Reasoning”), cuprinzând metode folosite în IA pentru organizarea
informatiilor si planificarea activitatilor în concordanta cu scopul avut în lucru; în altele, cele doua
8 Domeniul inteligentei artificiale si al sistemelor bazate pe cunostinte

capitole mentionate mai sus sunt grupate în unul singur. Nuanta de diferenta între cele doua este
aceea ca, fata de rezolvarea problemelor, subdomeniul efectuarii rationamentelor se restrânge la
metodele mai specifice pentru domeniul IA si la aplicarea acestora în SBC.
7) Sistemele si limbajele de IA sunt cele care s-au dezvoltat o data cu perfectionarea
tehnicilor formale ale IA pentru a servi, mai bine decât limbajele conventionale, metodele de IA. De
altfel, una din contributiile majore pe care a avut-o pâna în prezent IA a fost sub forma unor noi
instrumente puse la dispozitia programarii. Notiuni precum: time-sharing, procesare a listelor,
interactivitate, proiectare orientata pe obiecte, folosite astazi în mod curent în programare, au fost
introduse mai întâi în sistemele de IA.
În IA au fost dezvoltate limbaje proprii de programare care sa faciliteze atât reprezentarea si
prelucrarea cunostintelor, cât si deductia. Prima si cea mai importanta idee în aceste noi limbaje a
fost aceea a utilizarii calculatoarelor pentru a manipula simboluri, acestea putând reprezenta orice, nu
numai numere. Aceasta idee si aceea a procesarii listelor, ce a derivat din ea, au fost prima data
introduse în limbajul IPL. În limbajele de IA, pentru a forma asocieri între simboluri, s-au introdus
listele, ce au permis manipularea convenabila a unor date cu forma si marime imprevizibile apriori. În
probleme de IA, de exemplu atunci când se analizeaza întelesul unei fraze, când se planifica actiunile
unui robot, sau se alege o mutare în jocul de sah, nu se poate sti dinainte marimea structurii de date
care va reprezenta întelesul frazei, planul de actiune a robotului sau planul jocului de sah. Structurile
de date fara restrictii de forma si dimensiune au fost unul din câstigurile importante ale IA. Astfel,
limbajele de IA au eliberat programatorul de sarcina unor detalii - calculul dimensiunilor, indicilor,
adreselor de memorie – chestiuni greu de urmarit în problemele de IA, lasându-l sa se preocupe de
problemele prelucrarii informatiilor.
Toate aceste elemente au fost preluate de limbajul LISP [Tou 84], [Str 86] care a adus si
alte facilitati si a fost mult timp folosit ca principal instrument de lucru al domeniului, constituind un
model pentru celelalte limbaje dezvoltate în IA. Un alt limbaj de programare ce s-a impus în IA a
fost PROLOG [Tan 94], [Sâm 97]. O clasificare a limbajelor de programare, facuta din perspectiva
SBC, este prezentata în paragraful urmator.

În unele clasificari sunt citate si alte subdomenii ale IA. De exemplu, SE pot fi luate în
considerare în acest sens. Totusi, desi SE au determinat si aparitia unor aspecte noi, specifice, ele
folosesc rezultatele celorlalte subdomenii ale IA pentru a rezolva o aplicatie concreta. De asemenea,
exista si alte câteva capitole (în unele abordari incluse ca parti în cele sapte din enumerarea
anterioara) care pot fi privite distinct: planificarea, achizitia cunostintelor, sistemele distribuite de IA,
algoritmii genetici; acestea sunt arii ce aprofundeaza unele din subdomeniile amintite mai sus si care
vor putea fi întelese pe baza acestora.
Sisteme bazate pe cunostinte 9

1.4. Clasificarea cunoasterii si a tehnicilor de programare

Pentru a întelege felul în care cunostintele pot fi încorporate în programe, ajungându-se la


SBC, este utila o clasificare a cunoasterii. Exista mai multe variante în acest sens, dintre care unele au
importanta si pentru IA, si programare în general. Astfel, clasificarile cunoasterii dupa unele criterii
pot fi transpuse pentru limbajele de programare, ajungându-se la o viziune asupra acestora din
punctul de vedere al IA; aceste variante de clasificare sunt urmarite în continuare.

O prima clasificare se refera la modul de achizitie a cunoasterii, existând în acest sens


o cunoastere apriori si respectiv aposteriori. Cunoasterea apriorica este cea independenta de
sistemul senzorial (a priori - anterior experientei). Ea cuprinde cunostinte universal valabile, care nu
pot fi negate fara a ajunge la contradictii. Legile matematice sau cele ale fizicii sunt exemple de
asemenea cunostinte. Facând legatura cu SE, o asemenea cunoastere va fi înmagazinata în primul
rând în baza de reguli a acestora, iar folosirea exclusiva a unor cunostinte de tip aprioric va determina
efectuarea unor rationamente de tip monoton în sistemele de IA (rationamentele de tip monoton
sunt cele ale caror concluzii nu pot fi invalidate în timp).
În opozitie, cunoasterea aposteriori se refera la ceea ce deriva prin experienta, în urma
actiunii sistemului senzorial. Adevarul sau falsitatea unei asemenea cunoasteri este o consecinta a
experientei si cum aceasta nu poate fi întotdeauna precisa, o asemenea cunoastere trebuie sa poata fi
negata fara a se ajunge la contradictii; o asemenea situatie poate fi controlata de sistemele de IA de
tip nemonoton (cele a caror baza de cunostinte nu creste monoton în timp, ci poate si scade atunci
când se detecteaza falsitatea unor cunostinte de tip aposteriori). Într-un SE locul unor asemenea
cunostinte este de obicei în baza de fapte.

Cunoasterea poate fi clasificata si dupa gradul de generalitate al acesteia. Se poate face în


acest sens schema din fig. 1.3. La nivelul de baza sunt semnalele, care contin atât date utile cât si
elemente parazite (zgomote). Datele sunt elemente care prezinta un interes potential. Datele
procesate determina obtinerea informatiilor, care sunt elemente ce prezinta un interes precis.
Informatiile supuse unei specializari determina obtinerea cunostintelor. SBC, în functie de felul si
scopul pentru care au fost construite, si de interfetele pe care le poseda, pot efectua rationamente
plecând de la semnale, date, informatii sau cunostinte; de asemenea, în anumite cazuri, în SBC pot
apare si metacunostinte.
10 Domeniul inteligentei artificiale si al sistemelor bazate pe cunostinte

Meta - Exemplul 1.1. Fie urmatorul sir de cifre (în


cunostinte
codul hexazecimal):
Cunostinte
Informatii
Date 1374656D7
Semnale 029657261
747572610
Fig. 1.3. Clasificarea cunoasterii dupa
03D383215
gradul de generalitate
Acestea pot fi semnalele pe care le primeste, printr-o interfata adecvata, un SBC de la
procesul pe care îl conduce. În sirul respectiv sunt cuprinse date, cât si zgomote. Semnalele pot fi
transformate în date pe baza unor reguli de procesare. Pentru exemplul nostru aceste reguli ar putea
fi: sa se grupeze cifrele în grupe de câte doua si din numerele astfel obtinute sa se ignore cele mai mici
ca 30; obtinem astfel urmatoarele date: 74 65 6D 70 65 72 61 74 75 72 61 3D 38 32.
Aceste date pot reprezenta informatii, de exemplu obtinute prin înlocuirea numerelor de câte
2 cifre prin caracterul ASCII corespunzator. Se obtine în acest fel informatia: temperatura=82.
Apoi, aceasta informatie poate fi transformata în cunostinte prin reguli de rationament cu privire la
conducerea procesului respectiv. O asemenea regula ar putea fi:

Daca temperatura este mai mica decât 100, atunci porneste cuptorul.

Metacunostintele se obtin prin rafinarea cunostintelor. Ele sunt cunostintele despre ceea ce
stim. Aici se includ cunostintele privitoare la limitele cunoasterii despre un subiect, cunostintele
despre felul în care ne putem îmbogati cunoasterea cu privire la rezolvarea unei probleme. De
exemplu, mai concret, prin intermediul metacunostintelor un SBC determina ordinea în care trebuie
rezolvate scopurile sau chiar îsi stabileste singur scopurile. Astfel, deasupra regulii de cunoastere de
mai sus (practic, aceasta poate însemna o regula cu o prioritate mai mare) poate exista o regula de
metacunoastere, de forma:

Daca exista un pericol de explozie, atunci toate instalatiile trebuie oprite.

În mod implicit, aceasta regula ordoneaza scopurile de rezolvat de catre SBC, în sensul ca
mai întâi trebuie mentinuta siguranta sistemului condus si numai daca aceasta conditie este îndeplinita
se poate rezolva un scop de productie.
Sisteme bazate pe cunostinte 11

O alta clasificare a cunoasterii importanta pentru IA si pentru programare în general se refera


la continutul acesteia, existând urmatoarele trei categorii: cunoastere procedurala, declarativa si
tacita. Cunoasterea procedurala se refera la a sti cum sa faci ceva, adica a sti mijloacele pentru a
ajunge la un anume rezultat (un exemplu în acest sens este – sau ar trebui sa fie! - cunoasterea dintr-
o carte de bucate). Cunoasterea declarativa se refera la a sti daca un enunt este adevarat sau fals
(o asemenea cunoastere ar trebui sa se foloseasca în justitie!). Cunoasterea tacita (denumita uneori
si neconditionata, datorata inconstientului) este cunoasterea ce nu poate fi exprimata prin limbaj (un
exemplu de acest fel este cunoasterea privind mersul pe bicicleta).
Aceasta clasificare are o importanta deosebita pentru programare, în sensul ca ea poate fi
urmarita si în diferitele modalitati (tehnici) de programare. Astfel tehnicile si limbajele de programare
pot fi clasificate conform fig. 1.4. Clasificarea nu este însa una rigida, în sensul ca unele limbaje au
caracteristici din mai multe categorii. De exemplu, limbajele functionale apar a avea atât însusiri

Imperative (Pascal, C)
Procedurale (Secventiale)
Functionale ( LISP)
Tehnici de
programare Orientate pe obiecte (C++, Smalltalk)
(limbaje) Declarative
Neprocedurale Logice (PROLOG)

Bazate pe reguli (CLIPS)


Bazate pe cadre (KEE)

Nondeclarative (retele neuronale)


Fig. 1.4. O clasificare a tehnicilor de programare

procedurale, cât si declarative. În continuare se vor urmari si explica pe scurt caracteristicile din toate
aceste categorii.

1.4.1. Tehnicile de programare procedurale

Clasa limbajelor procedurale se bazeaza pe notiunea de algoritm. Acesta este o metoda de


a rezolva o problema într-un numar finit de pasi, folosind o multime finita de operatii (instructiuni)
cunoscute, care executate într-o ordine bine stabilita, pornind de la un set de valori (intrarile), produc
în timp finit un alt set de valori (iesirile). Un algoritm materializat printr-un limbaj procedural are trei
trasaturi importante, care caracterizeaza totodata si programarea procedurala: determinismul -
cunoasterea cu exactitate, în fiecare moment al executiei, a urmatoarei operatii de executat, precum
si cunoasterea modului de executie a fiecarei operatii; universalitatea - posibilitatea de aplicare
12 Domeniul inteligentei artificiale si al sistemelor bazate pe cunostinte

asupra unui numar mare, de obicei infinit de intrari; finititudinea - algoritmul este finit în spatiu (ca
descriere) si timp (ca executie).
O caracteristica a limbajelor procedurale, determinata si de masinile pe care se executa, este
caracterul secvential. Important pentru comparatia cu celelalte variante de programare este aspectul
ca programatorul trebuie sa precizeze exact, pas cu pas, cum se rezolva o problema. În contrast, în
variantele strict neprocedurale, programatorul precizeaza care este scopul care trebuie atins, lasând
sistemul sa determine calea prin care se ajunge la acesta.

Limbajele imperative sau orientate pe instructiune (în engleza ”statement-oriented”) au ca o


caracteristica esentiala aceea ca programul este un sir de instructiuni - comenzi, precizând
calculatorului operatiile pe care trebuie sa le execute la momente succesive de timp. Aceste limbaje
au fost dezvoltate pentru a elibera programatorul de lucrul în cod masina si în acest sens au fost
prevazute cu facilitati privind manipularea variabilelor, operatiile de atribuire si asigurarea repetarii
unor secvente. Limbajele imperative mai sunt asociate cu o structura de control rigida si cu
proiectarea de sus în jos; în engleza metoda de proiectare se numeste ”top down” si este folosita în
programarea structurata, în care se realizeaza o rafinare succesiva a structurilor de control, de la
general la detaliu. Ele sunt în general puternice pentru calcule numerice si slabe pentru prelucrari
simbolice. Au în schimb avantajul executiei rapide, ceea ce le-a facut sa fie folosite si pentru
codificarea unor sisteme de IA (de exemplu, interpretorul CLIPS este realizat în C).

Programarea functionala este centrata pe notiunea de functie. Aici programul este vazut ca
o functie, care se obtine din compunerea mai multor functii simple, fie functii sistem, fie definite de
utilizator. De aici proiectarea unui program într-un limbaj functional este de obicei una de tip de jos în
sus (în engleza, ”bottom-up”), utilizatorul realizând mai întâi functiile elementare de care are nevoie si
apoi compunându-le pe acestea pentru rezolvarea problemei. Exemplu cel mai cunoscut de limbaj
functional este LISP. Acesta este important pentru IA si prin modul eficient în care poate manipula
simboluri, ceea ce a facut ca o serie de elemente de baza din LISP sa fie preluate în multe limbaje de
IA (de exemplu, folosirea listelor, reprezentarea prefixata a functiilor).
O alta trasatura pe care au dorit sa o realizeze limbajele functionale este asa numita
transparenta referentiala. Aceasta este o caracteristica a limbajului folosit în matematica si care nu
a fost respectata în limbajele imperative. Ea se refera la faptul ca întelesul unui întreg este complet
determinat de întelesul partilor, neputând apare efecte parazite datorita combinarii partilor sau unor
relatii de ordine dintre ele. De exemplu, întelesul expresiei x + 2x este evident acelasi cu întelesul
expresiei 3x, sau cu cel al expresiei 2x + x si oricum l-am înlocui pe x întelesul ramâne acelasi.
Daca însa luam expresia de atribuire din programarea imperativa y : = f(x) + x aici totul depinde
de felul în care se transfera valoarea parametrului x la apelul functiei f. Într-un limbaj imperativ
valoarea unui parametru poate fi afectata de executia functiei apelante, astfel încât rezultatul atribuirii
Sisteme bazate pe cunostinte 13

de mai sus depinde de functia f. Aceasta înseamna ca transparenta referentiala nu este respectata.
LISP în varianta sa initiala (pura) asigura transparenta referentiala, ca si un alt principiu al programarii
functionale, anume acela ca o functie sa nu aiba efecte laterale (în engleza “side effects”). Aceasta
presupune ca functia sa nu aiba decât un singur efect, acela de a calcula valoarea functiei. Pastrarea
stricta a acestei caracteristici devine stânjenitoare în programare; de exemplu, o functie de afisare pe
terminal este mai importanta pentru efectul lateral - afisarea propriu-zisa, decât pentru calculul unei
valori, care de fapt poate lipsi. În acest sens si LISP si alte limbaje de IA au eliminat aceasta
restrictie, permitând functiilor sa aiba efecte laterale. Oricum, s-a pastrat cerinta din programarea
functionala ca o functie (comanda) sa returneze un rezultat, ca efect principal, si daca este vorba de o
functie determinând si un efect lateral (de exemplu tiparire, deschidere de fisier), atunci rezultatul
returnat de functie poate fi sub forma unei valori de adevar – adevarat/fals – stabilita dupa felul în
care a decurs executia cu privire la efectul lateral.

1.4.2. Tehnicile de programare declarative

În cazul abordarii declarative programatorul precizeaza ceea ce trebuie realizat, lasând


sistemul sa gaseasca o cale de ajungere la solutie. Exista mai multe variante de materializare a acestei
tehnici, dintre care unele au un caracter mixt, incluzând atât aspecte procedurale cât si
neprocedurale.

Chiar programarea orientata pe obiecte este o varianta mixta, partial declarativa si partial
imperativa. Ea poate fi considerata ca o metodologie de programare (dupa cum exista programarea
structurata, programarea prin reguli), care a capatat astazi o mare raspândire, putând fi implementata
în limbajele clasice procedurale, sau în limbaje specializate, destinate acestei metode. Ideea de baza
este de a proiecta un program considerând mai întâi datele ce vor fi prelucrate si se clasifica acestea
în clase (obiecte), iar apoi se definesc pe aceste obiecte operatiile necesare pentru a putea rezolva
problema. Astfel, spre deosebire de programarea procedurala, abordarea în proiectare va fi aici una
de jos în sus: se pleaca de la date si elemente de detaliu, spre elementele generale de control si
prelucrare. O deosebire de principiu este si aceea cu privire la utilizarea procedurilor. Daca în
programarea imperativa procedurile opereaza asupra unor date, parametri, care sunt comunicati
acesteia prin apel, în programarea orientata pe obiecte nu se mai comunica procedurii datele asupra
carora trebuie sa opereze, ci obiectul (deci datele) primeste informatii asupra procedurilor – numite
aici metode – pe care sa le foloseasca. Aceasta se realizeaza printr-o comunicatie între obiecte
folosind mesaje, care indica metodele pe care un obiect trebuie sa le aplice.
Ceea ce se câstiga în programarea orientata pe obiecte este în primul rând flexibilitatea:
modificarea sau reutilizarea unor parti de programe se va face usor, prin simpla adaugare de noi
obiecte, sau numai de noi operatii pe obiectele existente. Dintre limbajele special destinate
14 Domeniul inteligentei artificiale si al sistemelor bazate pe cunostinte

programarii orientate pe obiecte exemplul cel mai citat este Smalltalk, dar si multe limbaje încadrate
în alte categorii au fost completate cu module pentru programarea orientata pe obiecte, pentru a
beneficia de facilitatile acesteia; asa este cazul în C, unde avem C++, sau Objective – C, sau în
CLIPS.

Programarea logica este un reprezentant clar, net, al metodelor declarative. Aici programul
consta dintr-o serie de declaratii, sub forma de enunturi considerate ca adevarate (fapte).
Programatorul poate furniza reguli si trebuie sa furnizeze un scop, adica un enunt care trebuie verificat
daca este adevarat. Algoritmul de control este implicit materializat în interpretorul sau compilatorul
limbajului, asa cum se întâmpla în PROLOG. Este vorba de o cautare înapoi plecând de la scop,
folosind regulile si faptele existente în sistem. Regulile se folosesc de la partea de consecinta spre cea
de conditie. Scopul va putea fi dovedit daca rezulta ca urmare a existentei unei declaratii (fapt) în
acest sens, sau daca nu, va putea fi dovedit daca exista o regula având partea de consecinta stabilind
(rezolvând) scopul respectiv si partea de conditie posibil de dovedit. De exemplu, daca în sistem
exista faptul ”IRB 1400 este robot” si regula ”Daca cineva este robot, atunci acela se misca”, atunci
sistemul va putea rezolva scopul: ”Se misca IRB 1400?”. O problema va implica de obicei o cautare
lunga, în care un scop este descompus în subscopuri, care trebuie rezolvate (dovedite). Prin aceea ca
se folosesc reguli si fapte, care sunt elementele de baza ale unui SE, exista o apropiere de acestea,
astfel ca programarea logica este frecvent utilizata în materializarea SE.

Programarea bazata pe reguli se refera la tehnicile si limbajele pentru implementarea SE. Nu


trebuie însa sa întelegem ca orice program realizat în aceasta metoda este un SE; definitia SE va fi
data în paragraful urmator. Programarea bazata pe reguli este un instrument de lucru pentru SE, dar
metoda poate fi aplicata în general, ca o noua tehnica de programare. Exemplul tipic de limbaj din
aceasta clasa este CLIPS.

Programarea bazata pe cadre este mai putin raspândita si poate fi caracterizata ca o tehnica
hibrida, care combina elemente ale programarii orientate pe obiecte, într-o forma particulara – aceea
a reprezentarii de cadru, pentru organizarea informatiilor de intrare, cu elemente de control din
sistemele bazate pe reguli.

1.4.3. Tehnicile de programare nondeclarative – retelele neuronale

Tehnicile care sunt si neprocedurale si nondeclarative au pâna în prezent un reprezentant mai


important, acela al retelelor neuronale (în engleza ”neural networks”); acestea îsi gasesc
corespondentul în exprimarea unor cunostinte tacite. Este vorba despre niste metode de programare
care au plecat de la modelul creierului uman: o retea cu un numar mare de neuroni, interconectati
Sisteme bazate pe cunostinte 15

printr-un numar mare de legaturi. Programarea înseamna aici stabilirea legaturilor si a coeficientilor
asociati acestor legaturi. În functie de legaturile stabilite si de valorile coeficientilor rezulta
comportarea retelei în ansamblu.
Astfel, o retea neuronala se caracterizeaza prin:

1) un numar mare de elemente de procesare - neuronii, fiecare efectuând o prelucrare


foarte simpla;
2) un numar mare de legaturi, ponderate prin niste coeficienti numerici; neuronii împreuna
cu legaturile stabilite si coeficientii asociati determina cunoasterea înmagazinata;
3) procesarea este de tip paralel si distribuit;
4) se asigura o posibilitate de învatare automata: pentru a rezolva o problema reteaua
poate sa învete (sa se programeze singura), adica sa stabileasca valorile coeficientilor pe legaturi,
urmând o etapa de instruire pe niste exemple semnificative.

Din aceste caracteristici decurg o serie de avantaje ale folosirii retelelor neuronale.

• Datorita posibilitatii de învatare retelele neuronale sunt potrivite acolo unde pot fi puse la
dispozitie exemple de instruire, dar este dificil sau imposibil de a determina un model pentru
problema ce se rezolva.
• Retelele neuronale au capacitatea de a generaliza si în acest sens ele se folosesc în probleme de
clasificare, de exemplu în recunoasterea formelor. Astfel, dupa procesul de învatare, reteaua
neuronala poate face o împartire a datelor de intrare în categorii, conform exemplelor învatate. În
faza de lucru, daca datele de intrare prezinta variatii fata de categoriile învatate, reteaua
neuronala va face de la sine clasificarea noilor date în clasa cea mai apropiata. Este de mentionat
ca retelele neuronale generalizeaza automat, ca urmare a structurii lor, nu cu ajutorul inteligentei
umane înglobate într-un program creat în mod special în acest scop.
• Retelele neuronale asigura rapiditate în executie datorita procesarii paralele.
• Retelele neuronale determina siguranta în functionare, prin doua modalitati de rejectare a
defectelor si erorilor:
a) sunt capabile sa lucreze corect chiar atunci când datele de intrare sunt afectate într-o
anumita masura de erori, datorita capacitatii de generalizare, explicata mai sus.
b) datorita procesarii distribuite are loc o degradare treptata si nu brusca a functionarii la
defectarea neuronilor, astfel ca reteaua poate continua sa lucreze bine atunci când un numar
mic de neuroni functioneaza incorect.
• Retelele neuronale pot aproxima bine functii neliniare, aspect important pentru folosirea lor în
control.
16 Domeniul inteligentei artificiale si al sistemelor bazate pe cunostinte

Fara a face o prezentare completa, cele mai


i1
. w1 importante din principiile functionarii retelelor
. u y neuronale sunt prezentate în continuare (descrieri
Σ F
. wn ample pot fi gasite în [Dum 97], [Tod 95], [Fuk
in 92]). Neuronul artificial este o copie simplificata a
Fig. 1.5. Modelul neuronului
neuronului biologic. El este format dintr-un set de
intrari, un corp si o iesire. Conform fig. 1.5, fiecare
intrare este ponderata, adica valoarea sa ij este multiplicata cu un coeficient wj, numit si pondere.
Apoi intrarile ponderate sunt însumate. Asupra sumei obtinute se aplica functia de activare F,
rezultând valoarea y a iesirii neuronului. Functia F este cel mai frecvent de tip treapta sau functie de
tip sigmoid.

Retelele neuronale se clasifica în urmatoarele doua categorii.

1) Retele feedforward (cu reactie înainte) - sunt cele cu organizare ierarhica, pe mai multe
nivele, în care conexiunile sunt numai de la
neuronii unui nivel la neuronii nivelului urmator.
În acest fel transmisia semnalului se face de la
intrare spre iesire, într-un singur sens. De
exemplu, în fig. 1.6 este prezentata o retea
neuronala de tip feedforward, cu trei straturi.
strat strat strat Stratul de intrare, în cazul nostru cu 2 neuroni,
intrare ascuns iesire
are doar rolul de a transmite semnalele de
Fig. 1.6. O retea neuronala de tip feedforward
intrare spre nivelul urmator, în timp ce neuronii
din stratul intermediar, numit si strat ascuns, si din stratul de iesire au o structura si functionalitate
identica aceleia a neuronului din fig. 1.5. În general, o retea de acest tip poate avea mai multe straturi
ascunse si mai multi neuroni de iesire.

Pentru ca o retea neuronala feedforward sa poata fi folosita ea trebuie sa parcurga mai întâi
faza de învatare, ceea ce însemna fixarea valorilor ponderilor de pe legaturi. Exista doua variante de
învatare: supervizata si nesupervizata. În primul caz, pentru fiecare set de intrari (vector de intrare)
este cunoscut setul dorit al iesirilor, acestia formând împreuna o pereche de antrenament. În timpul
învatarii se compara valorile obtinute ale iesirilor cu acelea dorite si erorile sunt folosite pentru
ajustarea ponderilor legaturilor. Algoritmul de învatare frecvent utilizat se numeste de propagare
înapoi (în engleza ”backpropagation”), fiind vorba de o metoda iterativa, care calculeaza ponderile
pentru minimizarea erorii, printr-o metoda de tip gradient. Calculul se face de la stratul de iesire spre
cele din fata sa; de aici denumirea algoritmului. Adaugând stratul ascuns reteaua neuronala devine
Sisteme bazate pe cunostinte 17

capabila sa rezolve si probleme care nu sunt liniar separabile (o retea fara strat ascuns poate fi
utilizata numai în cazul liniarei separabilitati [Tod 95]). În schimb, straturile ascunse pot crea
probleme pentru convergenta algoritmului de învatare.
În cazul învatarii nesupervizate nu mai exista prestabilit un anume set al iesirilor dorite, ci în
timpul învatarii are loc un proces de clasificare, în sensul gruparii valorilor vectorilor de intrare în
clase. Aceasta înseamna ca reteaua functioneaza bine în functie de felul în care un nou vector de
intrare, apropiat de un anumit vector folosit în timpul învatarii, este bine clasificat, adica determina un
raspuns identic cu acela al vectorului de antrenament de care este apropiat.

2) Retele recurente (cu reactie inversa) – sunt cele în care nu mai exista o organizare pe straturi, ci
apar si legaturi de reactie între neuroni, astfel ca transmisia semnalului se face în ambele sensuri. Unul
din exemplele cele mai cunoscute de retea recurenta este reteaua de tip Hopfield. O asemenea retea

-1 -1

+1 -1 +3 +1 -1 +3
-1 -1

+2 +1 -2 +3 +2 +1 -2 +3

+1 -1 +1 -1
Fig. 1.7a. O retea de tip Hopfield – starea initiala Fig. 1.7b. Starea finala a retelei Hopfield

este cea din fig. 1.7a. Neuronii, reprezentati ca si în fig. 1.6 sub forma de cercuri, pot fi aici în una din
doua stari: activa (reprezentata prin hasurare) si inactiva. Un coeficient de ponderare pozitiv pe o
legatura ne arata tendinta celor doi neuroni interconectati de a se activa unul pe celalalt, iar unul
negativ, tendinta de a se dezactiva unul pe celalalt. În acest fel, plecând dintr-o stare initiala reteaua
va evolua. Fiecare unitate de procesare (neuron) calculeaza suma coeficientilor transmisi prin legaturi
de la vecinii sai activi si devine activa daca aceasta suma este strict pozitiva. Procesul continua pâna
la atingerea unei stari stabile a retelei, adica aceea în care starea tuturor neuronilor ramâne aceeasi
(nu se mai schimba). De exemplu, pentru starea initiala a retelei din fig. 1.7a evolutia se va produce
pâna în starea stabila data în fig. 1.7b. Se poate demonstra ca oricare ar fi starea initiala si valorile
ponderilor alese pe legaturi se va ajunge la o stare stabila (de exemplu, reteaua din fig. 1.7 are 4
stari stabile) [Ric 91].
O asemenea retea neuronala capata o proprietate apropiata de aceea a memoriei umane:
poate fi privita ca o memorie adresabila prin continut. Cele 4 stari stabile ale retelei din fig. 1.7
corespund la 4 tipare (4 elemente de cunoastere) memorate în retea. De îndata ce acesteia i se
18 Domeniul inteligentei artificiale si al sistemelor bazate pe cunostinte

furnizeaza o intrare, sub forma unei stari initiale, în functie de apropierea acestei intrari de una din cele
4 stari stabile, se va putea recunoaste un continut din cele 4 memorate. Rezulta astfel cum
cunoasterea initiala poate fi una imprecisa: din diferite stari initiale reteaua poate evolua în aceeasi
stare stabila, daca este construita corespunzator.

Domeniile în care retelele neuronale si-au gasit aplicare sunt: recunoasterea vorbirii,
recunoasterea imaginilor, sau materializarea unor metode de rezolvare care sunt greu de formulat sub
forma de algoritmi sau reguli, dar pot fi exemplificate cu cazuri semnificative care sa fie folosite pentru
învatare. În automatica, retelele neuronale sunt utile în aplicatii de supervizare, conducere a robotilor
industriali, control adaptiv, comanda sistemelor neliniare, utilizându-se caracteristicile acestora de a
modela functii neliniare, de a permite obtinerea unei anumite comportari fara necesitatea existentei
unui model, de a se adapta la noi situatii printr-o faza de învatare.

1.4.4. O clasificare a tehnicilor de programare din punct de vedere al utilizarii în


conducerea proceselor

Pentru partea de software utilizata în conducerea proceselor exista o clasificare specifica.


Este vorba de faptul ca în acest caz se impun niste cerinte particulare: functionarea în timp real, datele
de intrare ale programului pot fi cu o variatie continua în timp, având o dinamica dependenta de
procesul condus, necesitatea realizarii sigurantei în functionare, implicând utilizarea redundantei
software. Daca în clasificarile din paragrafele anterioare ceea ce s-a urmarit în primul rând a fost
continutul cunostintelor prelucrate, pentru conducerea proceselor se impune o clasificare dupa modul
de control al executiei programelor. Din acest punct de vedere exista urmatoarele doua categorii:
programare bazata pe bucle (în engleza: “loop-driven”) si programare orientata (bazata) pe
evenimente (în engleza: “event-driven”). Prima categorie este si prima varianta de organizare a
programelor ce a fost folosita în conducere si monitorizare. Denumirea provine de la faptul ca
programul este organizat ca o bucla (ciclu), în care, în afara de o faza de initializare, respectiv
terminare, programul parcurge mai multe etape ce formeaza corpul unui ciclu. Aceste etape sunt:
preluare date de la proces, prelucrare date achizitionate, elaborare comenzi (vezi fig. 1.8). Este
vorba despre o executie repetata a unei aceleiasi secvente, care tine seama de aspectul stereotip,
fata de diferitele tipuri de procese, al operatiilor implicate. Evident, bucla trebuie sa aiba si o conditie
de final, îndeplinita, de exemplu, atunci când trebuie încheiata supravegherea procesului.
Sisteme bazate pe cunostinte 19

Initializare
Initializare

11 21
Preluare date
de la proces

Module
Prelucrare date procesare Proces
Proces
achizitionate evenimete

11 11
Elaborare
comenzi

Terminare
Terminare program
program

Fig. 1.8. Comparatie între programarea bazata pe bucle si cea bazata pe evenimente

Este usor de observat partile slabe ale acestei variante, plecând de la faptul ca bucla
respectiva se executa în mod repetat (este ca si un ciclu cvasi infinit), independent de existenta sau
inexistenta unor modificari în proces. Programul se cicleaza, încercând surprinderea momentului în
care se produce o schimbare a datelor procesului urmarit, pentru a o lua pe aceasta în considerare si
a stabili deciziile adecvate. Aceasta situatie determina o folosire ineficienta a resurselor hardware:
unitatea de procesare este blocata în ciclarea programului, putând fi în situatia în care executa în mod
repetat, de un numar mare de ori, parti de cod inutile, deoarece în proces nu s-a produs o schimbare
a datelor fata de trecerea anterioara. Programul este ca si un mecanism care o mare parte a timpului
“merge în gol”, prinzând doar din când în când evenimente din proces.

Aici este vorba si de interdependenta hardware – software, viteza de lucru a procesoarelor


pe care se executa programele fiind adesea mai mare decât viteza de schimbare a datelor din proces.
Paradoxul este acela ca, pe lânga o irosire a timpului unitatii de procesare, se produce adesea si un
raspuns întârziat la o schimbare din proces; evenimentul respectiv poate apare atunci când programul
este într-o secventa a buclei diferita de preluarea datelor, si în acest caz, abia dupa o ciclare, va
ajunge sa ia în considerare modificarea respectiva si sa raspunda la ea. Aceasta întârziere creste o
data cu marirea corpului buclei (a numarului de instructiuni ce o compun).
20 Domeniul inteligentei artificiale si al sistemelor bazate pe cunostinte

În contrast, în varianta programarii orientate pe evenimente, programul este organizat în


module, care ramân inactive atâta timp cât nu este nevoie de ele; în acest timp unitatea de procesare
poate rezolva alte sarcini. Producerea unui eveniment în proces (de exemplu, schimbarea valorii unui
semnal de intrare) atrage dupa sine activarea unui anumit modul din program. Ca într-o reactie în
lant, acest modul va activa pe altele, si anume pe acelea care sunt necesare pentru a prelua, procesa
si decide comenzile care sa determine raspunsul catre proces, la evenimentul produs. Este de
remarcat faptul ca în aceasta varianta, schimbul de informatii cu sensul de la proces la program este
determinat, ca decizie de actiune, de proces (printr-o interfata adecvata) si nu de program; în acest
sens, pe fig. 1.8 sageata corespunzatoare acestui transfer a fost marcata cu cifra 2, spre deosebire
de toate celelalte, marcate cu 1 si care sunt determinate de o decizie a programului.

În aceasta tehnica de programare se câstiga în eficienta, deoarece procesorul va fi implicat în


activitatea unui modul de program numai atunci când rularea respectiva este necesara, si în viteza de
raspuns, determinarea deciziei cu privire la comenzile necesare unui eveniment fiind efectuata fara
întârzieri legate de parcurgerea altor secvente de program. Pentru materializarea acestei tehnici de
programare vor trebui concepute modulele de program care sa faca fata tuturor tipurilor de
evenimente aparute în proces. Pentru optimizarea metodei, aceste module trebuie concepute cu un
grad cât mai mare de independenta si cu mecanisme adecvate pentru schimbul de informatii între ele.

Implementarea celor doua metode va presupune si instrumente diferite: programarea bazata


pe bucle, de obicei va fi materializata într-o abordare procedurala, în timp ce aceea bazata pe
evenimente poate fi servita de instrumentele programarii bazate pe obiecte, sau ale celei bazate pe
reguli; diferitele tipuri de evenimente au alocate obiecte (sau reguli) corespunzatoare, iar schimbul de
mesaje (respectiv înlantuirea regulilor) asigura producerea întregii reactii necesare drept raspuns la un
eveniment. Schimbul de informatii cu procesul, în celor doua variante, necesita si elemente hardware
adecvate; în programarea bazata pe bucle cerintele sunt mai putin pretentioase, putând fi vorba
despre interfete programabile de tipul porturilor paralele, combinate cu o interogare a liniilor
porturilor de intrare, în timp ce programarea orientata pe evenimente va presupune o folosire a
întreruperilor, cu o gestionare corespunzatoare a acestora [Hut 98].

Mai este de mentionat ca expansiunea este în prezent pentru programarea bazata pe


evenimente, si, datorita avantajelor mentionate, aceasta se aplica nu numai în conducerea proceselor,
ci si în alte tipuri de aplicatii (interfete utilizator, sisteme de proiectare asistata de calculator).
Sisteme bazate pe cunostinte 21

1.5. Sisteme expert, sisteme bazate pe cunostinte - generalitati

Definitia 1.2. Se defineste un SE ca fiind un sistem software care înmagazinând cunostinte


ale unui expert poate rezolva probleme complexe dintr-un anumit domeniu de expertiza.
Edward Feigenbaum (autorul primului SE) foloseste o definitie de forma: SE este un program
de calculator care utilizeaza cunostinte si proceduri de rationament pentru a rezolva probleme care
sunt destul de dificile, necesitând în mod obisnuit pentru obtinerea solutiei un expert uman în domeniu
[Bar 81].
În definitia SE apar cuvintele expert si expertiza care au urmatoarele semnificatii. Un expert
este o persoana ce are cunostinte deosebite într-un anumit domeniu, adica este capabil sa faca o
expertiza în acel domeniu. Aceasta înseamna ca expertul poate rezolva probleme ale domeniului pe
care altii nu le pot rezolva deloc sau nu le pot rezolva în mod eficient. O denumire folosita initial
pentru SE a fost aceea de sisteme de reguli de productie (sau sisteme de productie vezi 1.8).
În fig. 1.9 este data o
Cunostinte initiale prima schema principiala a unui
Baza de cunostinte
(fapte) SE. Utilizatorul furnizeaza SE
Utilizator
cunostinte initiale specifice
Rezultate Motor de inferente problemei de rezolvat (sub forma
(expertiza)
de fapte) si primeste rezultate sub
Fig. 1.9. Arhiectura de principiu a unui SE forma expertizei, adica a solutiei
pe care SE o
indica la problema precizata prin
faptele de intrare.

Definitia 1.3. Baza de cunostinte (în engleza ”knowledge base”) este o componenta a
unui SE (sau mai general a unui SBC) care contine cunostinte ale domeniului de expertiza, actualizate
prin faptele introduse de utilizator. Motorul de inferente (în engleza ”inference engine”) este o
componenta a unui SE/SBC care contine elementele de control al rularii programului.

Aparitia SE a fost dictata în primul rând de urmatoarele doua aspecte:


• dificultatea de a gasi solutia corecta în cazul problemelor ce implica un volum mare de cunostinte
si o cautare lunga;
• dificultatea de a avea la dispozitie mereu si în diferite locuri expertul uman.

Avantajele folosirii SE sunt:


22 Domeniul inteligentei artificiale si al sistemelor bazate pe cunostinte

1) disponibilitatea crescuta, expertiza devenind accesibila pe orice calculator adecvat. Se


spune despre SE ca determina productia de masa a expertizei: SE este disponibil în orice moment si
nu este afectat de emotivitate, factori de stres.
2) reducerea costului, explicabila în corelatie cu ideea de mai sus si tinând seama de pretul
sistemelor de calcul.
3) permanenta, SE neavând o viata limitata.
4) reducerea pericolelor, în sensul ca SE pot fi folosite în medii periculoase pentru om, atunci
când sunt încorporate în sisteme adecvate (de exemplu, în sistemul de comanda al robotilor
industriali).
5) cresterea calitatii, prin obtinerea unei expertize complete a domeniului de lucru, ceea ce
expertul uman nu face întotdeauna.
6) posibilitatea de explicare în detaliu a solutiei obtinute pentru cresterea gradului de
încredere a utilizatorului, atunci când SE este dotat cu un sistem de generare a explicatiilor.
7) rapiditatea, în sensul ca pe sisteme software si hardware adecvate se pot obtine, pentru
anumite domenii, performante de timp mai bune decât cele ale expertilor umani.
8) SE pot contribui la raspândirea cunostintelor din domeniul de lucru; astfel, un utilizator
poate rula programul pentru mai multe probleme, de la simplu la complex si urmarind solutiile si
explicatiile date de SE se poate instrui în domeniul respectiv.
9) SE determina pastrarea în siguranta a cunostintelor; marile firme si-au construit SE pentru
a fi afectate într-o mai mica masura de plecarea unor experti umani.
10) clasificarea si perfectionarea metodelor de rezolvare a problemelor din domeniul de lucru
apare ca un beneficiu indirect, obtinut o data cu construirea unui SE.
Sisteme bazate pe cunostinte 23

1.6. Comparatie între sistemele expert si programarea traditionala


- domenii de aplicare pentru sistemele expert

Desi un SE este un program ce se ruleaza pe aceleasi calculatoare ca si celelalte


tipuri de programe, realizarea si utilizarea unui SE prezinta deosebiri importante. Cea mai importanta
deosebire dintre un SE si un program clasic este aceea a separarii între cunostintele domeniului
problemei si elementele de control al algoritmului de rulare. Conform arhitecturii din fig. 1.9, în
realizarea unui SE vom avea de rezolvat doua probleme distincte: construirea bazei de cunostinte si
construirea motorului de inferente.

Cunostintele din domeniul de expertiza apar în baza de cunostinte sub forma de:

1) constante - temperatura de înghet a apei; g = 9,81;


2) variabile - date preluate de la senzori sau de la operator;
3) relatii existente între obiecte, parametri – temperatura în punctul A este mai mica decât
temperatura în punctul B;
4) reguli derivate din teoria domeniului respectiv - suma curentilor într-un nod este 0, sau
reguli euristice, adica bazate pe experienta în acel domeniu - daca presiunea este 10
atm si nu exista confirmare pornire instalatie, atunci exista o conducta sparta.

Elementele de control al rularii, în cazul unui SE, se constituie într-o unitate separata
– motorul de inferente si vor determina momentul când elementele din baza de cunostinte sunt
relevante pentru problema ce se rezolva si trebuie testate sau activate. În plus, motorul de inferente
contine un algoritm de control generic, care este acelasi indiferent de continutul bazei de cunostinte,
adica acelasi indiferent de problema care se rezolva. În programele conventionale elementele de
cunoastere din domeniul problemei si cele de control sunt strâns întrepatrunse în program, neexistând
o separare vizibila. În acest caz începerea si terminarea programului, ca si secventa de operatii de
efectuat sunt definite în mod explicit de catre programator. În cazul SE, programatorul nu trebuie sau
nu poate sa mai anticipeze rularea atât de precis. Cunostintele domeniului sunt înmagazinate în reguli,
cele specifice problemei sunt memorate ca fapte, iar motorul de inferente determina aplicarea
cunostintelor domeniului pe datele problemei, fara interventia utilizatorului.

Aceasta separare a cunostintelor într-un SE atrage dupa sine si alte deosebiri fata de
programarea conventionala.
24 Domeniul inteligentei artificiale si al sistemelor bazate pe cunostinte

• În cazul unui SE stocarea cunostintelor domeniului de lucru se face într-o forma usor accesibila
modificarilor, dezvoltarilor, actualizarilor. În programarea clasica, modificarile pot fi facute de
obicei numai de cel care cunoaste întreg algoritmul de rezolvare.
• Un program conventional se limiteaza la a scoate la iesire rezultatele problemei. Un SE, în afara
de solutie, poate explica rationamentele facute pentru a ajunge la aceasta, în sensul ca poate
pune în evidenta pentru utilizator pasii pe care i-a parcurs pâna când a ajuns la solutie.
• Atât ca rezultat al separarii cunostintelor, cât si prin folosirea unor tehnici adecvate ale IA de
reprezentare a cunoasterii, este posibila construirea bazei de cunostinte într-o forma declarativa
(afirmatii asupra a ceea ce este adevarat la un moment dat). Din aceasta forma declarativa,
trecerea în forma procedurala necesara calculatorului se face în mod automat, de catre
interpretorul/compilatorul limbajului de programare (bazata pe reguli) folosit. Aceasta este o
facilitate atât pentru programatori cât si pentru utilizatori, deoarece baza de cunostinte se poate
construi într-o forma apropiata de limbajul natural.

În prezent principalele arii de aplicare a SE sunt urmatoarele:


1) configurare - stabilirea componentelor unui sistem si a modalitatilor de conectare între
acestea, astfel încât acel sistem sa satisfaca niste specificatii precizate.
2) diagnoza - pe baza unor efecte observate, care se refera la defectarea unui sistem, SE
stabileste cauzele care le-au generat si/sau modalitatile de înlaturare a defectelor.
3) instruire - perfectionarea într-un anumit domeniu, prin aceea ca SE permite explicarea
rationamentelor pe care le efectueaza. SE care sunt folosite în instruirea asistata de calculator sunt
dotate cu facilitati în acest sens, pentru a raspunde la întrebari de genul: de ce?, cum?, dar daca?,
care sa-i permita utilizatorului sa învete.
4) proiectare – SE efectueaza sau ghideaza utilizatorul în parcurgerea etapelor de proiectare
si în luarea deciziilor.
5) monitorizare - compararea de catre SE a unor date experimentale cu cele impuse si luarea
unor masuri pentru pastrarea performantelor necesare.
6) planificare - stabilirea secventei de actiuni necesare pentru atingerea unui scop dat.
7) conducerea proceselor - situatie care implica îmbinarea elementelor de monitorizare,
planificare si diagnoza.

Dintre cele mai cunoscute si de succes exemple de SE amintim: MOLGEN –


proiectare, în domeniul chimiei; ACE – diagnoza, pentru retelele de telefonie; MYCIN - medicina,
diagnoza a maladiilor infectioase; REACTOR - diagnoza si remediere a accidentelor din centralele
nucleare; PROSPECTOR - geologie, clasificare si instruire prin interpretarea datelor privind probele
de minerale; XCON – configurare a sistemelor de calcul.
Sisteme bazate pe cunostinte 25

1.7. Oportunitatea folosirii sistemelor expert

Înainte de a decide privind construirea unui SE trebuie sa ne dam seama daca aplicatia avuta
în vedere este potrivita pentru o asemenea rezolvare. Elementul esential trebuie sa fie absenta
expertizei la locul si momentul dorit; de asemenea, poate fi vorba despre folosirea unui expert în mod
ineficient, sau despre dificultatile pe care le are expertul uman. Situatii de acest fel pot fi:

• folosirea unor persoane lipsite de experienta sau de cunostinte aprofundate pentru rezolvarea
unor sarcini care implica asa ceva;
• existenta unor sarcini complexe, care trebuie rezolvate rapid, dar care apar rar, astfel ca expertul
efectueaza în cea mai mare parte a timpului activitati de rutina;
• expertul uman face greu fata datorita intervalului lung de timp în care trebuie sa fie activ, sau
datorita faptului ca trebuie sa dea raspunsuri rapide urmarind un volum mare de informatii, sau sa
lucreze în medii periculoase.

O decizie ce trebuie luata este si aceea privind optiunea de a folosi în rezolvarea unei
probleme un SE sau un program conventional. În acest sens trebuie avuti în vedere o serie de factori,
care pot fi considerati raspunzând la urmatoarele întrebari.

1) Poate fi problema respectiva rezolvata efectiv si eficient prin programarea


conventionala?
SE sunt potrivite acolo unde o solutie algoritmica nu exista sau este dificil de obtinut. Este
vorba de asa numitele probleme nestructurate. Un astfel de exemplu este acela al realizarii orarului
unei facultati, problema pentru care gasirea unui algoritm poate fi foarte complicata. Aici sunt multe
conditii de luat în considerare, unele cu caracter de generalitate (exemplu: un cadru didactic sau
student nu poate avea doua activitati succesive situate în corpuri de cladire îndepartate), alaturi de
altele cu un caracter specific (exemplu: domnul profesor Ionescu nu admite sa faca ore miercuri
dupa-amiaza). Rezolvarea unei asemenea probleme printr-o secventa precisa de pasi ai unui algoritm
este foarte dificila. În schimb, SE pot duce la o rezolvare eficienta în astfel de cazuri, deoarece într-o
asemenea abordare nu trebuie sa se cunoasca pas cu pas calea de ajungere la solutie, ci doar regulile
care sa ghideze cautarea. Aceste reguli se vor aplica la momentul oportun, în functie de datele de
intrare ale problemei în lucru si vor conduce la un sir de rationamente pentru o problema si la alt sir
de rationamente pentru alta problema. Despre regulile unui SE se spune ca au un caracter modular
si o functionare de tip oportunistic, adica au un grad mare de independenta si se pun în executie la
momentul potrivit. Daca însa pentru problema în discutie se urmareste o anumita secventa precisa,
rigida, de pasi ai rezolvarii, atunci solutia mai eficienta va fi prin programarea conventionala.
26 Domeniul inteligentei artificiale si al sistemelor bazate pe cunostinte

De asemenea, SE poate fi indicate atunci când datele de intrare nu urmaresc un tipar


unic, când exista o mare variabilitate a formei si tipului sub care apar datele de intrare sau când pot
apare valori si forme neasteptate ale acestora, situatii mai greu manevrabile prin programarea
conventionala.

2) Este domeniul de lucru bine delimitat?


Tendinta care poate apare este aceea ca un SE poate rezolva orice. Daca nu exista înca
formulate cunostintele necesare rezolvarii problemelor din domeniul respectiv, sau daca nu exista o
delimitare a cunostintelor pentru domeniul problemei care se rezolva, atunci SE poate sa esueze. Aici
exista o nuanta, anume aceea ca au fost realizate SE care au ajutat cercetatori din anumite domenii
(de exemplu chimie) sa largeasca aria de cunoastere, în conditia în care SE avea încorporate
cunostinte importante, de baza, ale domeniului de lucru si metacunostinte privind modurile de
extindere a cunoasterii domeniului. Daca însa încercam sa includem pe lânga domeniul de baza si
cunostinte din domenii conexe, vom ajunge la o baza de cunostinte pe care motorul de inferente se
va bloca, sau nu va ajunge la solutiile optime, sau va avea timpi de lucru inacceptabili. Încercarile de
includere într-un SE a mai multor domenii de expertiza nu au dus la rezultate satisfacatoare. În
prezent se deschide o noua perspectiva în acest sens, aceea data de inteligenta artificiala distribuita.
Sistemele de tip multi-agent pot asigura rezolvarea unor probleme implicând cunostinte din mai
multe domenii, prin aceea ca agentii (de exemplu construiti ca SE) pot contine fiecare cunostinte
dintr-un domeniu si acestia, prin cooperare, sa ajunga la solutionarea problemei interdisciplinare.

3) Exista un expert uman care doreste sa coopereze pentru realizarea SE?


Desi într-un SE poate fi cuprinsa si cunoasterea din manuale ale domeniului de lucru, de
obicei SE se construiesc pentru rezolvarea unor probleme care se refera la situatii ce nu sunt înca,
sau nu pot fi sistematizate într-un tratat. Este vorba de a capta abilitatea unui expert uman care se
bazeaza mult în activitatea sa pe cunoasterea dobândita prin experienta. Situatia în care sunt mai multi
experti care conlucreaza si ale caror cunostinte trebuie folosite poate crea dificultati, pentru ca în
acest caz, parerile, solutiile lor diferite pot determina conflicte si incompatibilitati în realizarea SE.

4) Poate expertul sa explice cunoasterea, în asa fel încât aceasta sa poata fi înteleasa si
transpusa în SE de catre programator?
De obicei apar probleme în acest sens, deoarece cel care se ocupa de programare nu
cunoaste termenii din domeniul de expertiza si apar dificultati de comunicare si întelegere cu expertul.
Sunt de preferat situatiile în care expertul si-a sistematizat cunoasterea (de exemplu, are un tabel cu
situatiile si deciziile pe care le adopta) si o poate explica. De asemenea, felul în care expertul însusi
are acces la cunoastere poate fi un factor de luat în considerare. Cazul cel mai favorabil este acela
Sisteme bazate pe cunostinte 27

când el poate oricând preciza felul în care actioneaza, iar cel mai nefavorabil este acela în care
expertul poate da explicatii numai daca este pus în contextul respectiv.
Aspectul discutat la acest punct, ca si cele de la punctele 2) si 3), sunt în legatura cu asa
numita faza de achizitie de cunostinte, cea care precede implementarea unui SE, si care este
deosebit de importanta pentru succesul acestuia: felul în care sunt preluate cunostintele de la expert si
înglobate în baza de cunostinte influenteaza în mod decisiv performantele SE.

5) Este cunoasterea pentru rezolvarea problemei în principal de tip euristic si incert?


SE sunt potrivite acolo unde este vorba de o cunoastere bazata pe experienta, în care
expertul trebuie sa încerce diferite variante pâna când o gaseste pe aceea care sa duca la rezolvare.
Abordarea este aceea de tipul încercarilor si corectiilor, si nu una în care exista o secventa precisa si
unica pentru obtinerea solutiei, caz potrivit pentru programarea conventionala.

6) Implica problema respectiva prelucrari numerice importante?


Tehnicile si limbajele destinate construirii SE sunt adaptate pentru prelucrari simbolice si nu
pentru calcule numerice. Daca suntem totusi în cazul în care o problema, din punct de vedere al
celorlalte criterii enuntate mai sus, se recomanda ca fiind rezolvabila printr-un SE, dar implica si un
volum mare de calcule, atunci rezolvarea cea mai buna poate fi una mixta. Se va folosi un SE pentru
efectuarea de rationamente si prelucrari simbolice si care va apela un program conventional pentru
partea de prelucrari numerice.

Se pot enumera si câteva criterii specifice pentru domeniul automaticii. Astfel, SE pot fi
preferate acolo unde modelul procesului este dificil de gasit - nu se poate scrie o functie de transfer
sau sistemul logic ce descrie procesul este foarte complex. De asemenea, SE pot da rezultate bune
acolo unde modelul procesului se schimba foarte frecvent, chiar daca acest model nu este complex,
sau daca suntem în cazul în care conducerea procesului se bazeaza pe interventii frecvente ale
operatorului.
28 Domeniul inteligentei artificiale si al sistemelor bazate pe cunostinte

1.8. Elementele tipice ale unui sistem expert si ale unui sistem bazat
pe cunostinte

Arhitectura si elementele tipice ale unui SE sunt prezentate în fig. 1.10. Desi termenul de SE
este uneori folosit în mod echivalent cu acela de SBC, totusi, dupa cum am mai precizat, ultimul are o
arie de cuprindere mai larga. Astfel, la un SBC pot apare variatii în ceea ce priveste organizarea
bazei de cunostinte, în sensul ca la unele sisteme - de exemplu, cele de tip inductiv, sau cele care
folosesc programarea orientata pe obiecte, aceasta nu mai contine fapte si reguli, si în asemenea
cazuri si mecanismul de control va fi diferit de acela al unui motor de inferente (de aceea în fig. 1.10
apare si denumirea sistem de control, în sensul controlului rularii programului). În plus, un SBC
poate contine si alte subsisteme. Daca SE folosesc asa numita abordare simbolica a IA, ele
bazându-se pe o prelucrare simbolica a informatiilor, exista si abordarea conexionista, aceea data
de retelele neuronale, sau cea evolutionista, data de algoritmii genetici, iar în unele SBC, si anume
cele de tip hibrid, pot apare subsisteme organizate dupa mai multe asemenea abordari. Acestea pot
crea interfete adecvate spre anumite tipuri de procese (de exemplu, este cunoscuta folosirea retelelor
neuronale în sistemele de IA de prelucrare a imaginilor, sau a algoritmilor genetici în anumite clase de
probleme de optimizare). Ceea ce apare în fig. 1.10 este însa varianta cea mai raspândita în cazul
SE/SBC si în continuare ne vom limita la aceasta structura.

Baza de cunostinte este formata din doua parti: baza de reguli care contine
cunostinte generale din domeniul de expertiza si baza de fapte formata în special din cunostintele

Motor de inferente Baza de cunostinte


(Sistem de control)
Baza de fapte
Baza de reguli
(Memorie de lucru)

Subsistem de generare a Subsistem de achizitie a


explicatiilor cunostintelor

Fig. 1.10. Arhitectura unui sistem expert/sistem Interfata a


utilizatorului
bazat pe cunostinte
Sisteme bazate pe cunostinte 29

specifice problemei ce se rezolva.


Elementele din baza de reguli sunt enunturi de forma:

Daca <parte de conditie> atunci <parte de actiune>.

Regulile au fost preluate în SE din structurile matematice de gramatica, unde se numesc


reguli de productie; de aici denumirea initiala a SE de sisteme de reguli de productie sau sisteme
de productie. Partea de conditie a unei reguli se mai numeste si antecedent, sau parte stânga (în
engleza, ”Left Hand Side” – LHS), iar partea de actiune se mai numeste consecinta, sau parte de
concluzie, sau parte dreapta a regulii (în engleza, ”Right Hand Side” – RHS). Partea de conditie a
unei reguli poate contine unul sau mai multe elemente, care se numesc tipare. Sintactic, acestea vor fi
de aceeasi forma cu faptele din baza de fapte si între toate tiparele din partea de conditie a unei reguli
este subînteleasa operatia de conjunctie. Elementele din partea dreapta a unei reguli se vor numi
actiuni si, la fel ca pentru partea stânga, între actiuni exista în mod implicit operatia de conjunctie.

Exemplul 1.2. Un exemplu de regula este:

Daca <presiune = 100> si <temperatura = 30> si <culoare = alb> atunci <Închide


releu R1> si <Afiseaza mesaj: ”Terminare prelucrare”>.

Am notat tiparele regulii între semnele < >, ca si actiunile din partea dreapta a acesteia.
Regula este numai una principiala, forma exacta a acesteia depinzând de mediul software în care se
lucreaza.

Baza de fapte se mai numeste si memorie de lucru si contine enunturi considerate


adevarate la momentul respectiv, adica fapte; acestea trebuie sa fie sintactic de aceeasi forma cu
tiparele regulilor. De exemplu, cu referire la regula de mai sus, daca în memoria de lucru se gasesc la
un moment dat faptele care afirma: <presiune = 100>, <temperatura = 30>, <culoare = alb>
(am notat faptele tot între semnele < >, aratând astfel ca ele trebuie sa aiba aceeasi forma cu
tiparele), atunci regula va fi activata, adica selectata pentru declansare (executie).

Motorul de inferente este cel care are rolul de a determina toate regulile ce sunt activate,
facând astfel corelatia între baza de fapte si baza de reguli, si apoi tot el selecteaza una singura dintre
regulile activate la un moment dat, pe care o pune în executie. Executia unei reguli înseamna punerea
în aplicare a partii drepte a acesteia, ceea ce poate avea unul sau mai multe efecte de genul
modificarii bazei de fapte, transmiterii unor mesaje operatorului, sau transmiterii unor semnale spre
exterior, în functie de actiunile ce sunt prevazute în partea de concluzie a regulii.
30 Domeniul inteligentei artificiale si al sistemelor bazate pe cunostinte

La începutul operarii baza de fapte trebuie sa contina situatia initial valabila pentru problema
în lucru si care este încarcata de utilizator prin intermediul unei interfete adecvate. Aceasta interfata
(fig. 1.10), ce asigura calea de comunicare între utilizator si SE, poate fi folosita si în timpul lucrului
SE. Astfel, dupa ce s-a încarcat memoria de lucru, utilizatorul începe consultatia cu SE. Motorul de
inferente initiaza o cautare în baza de cunostinte încercând sa rezolve problema propusa prin
potrivirea partilor stângi ale regulilor cu faptele din memoria de lucru si executia regulilor activate. Se
poate ca SE sa adreseze întrebari utilizatorului în timpul lucrului, atunci când ajunge în impas (nu a
rezolvat problema propusa si nu mai poate activa nici o regula), folosindu-se în acest dialog de
aceeasi interfata. Se ilustreaza si în acest fel deosebirea de principiu fata de programarea
conventionala: calea pe care motorul de inferente o va urma pentru a ajunge la solutie nu este
determinata dinainte. Ea depinde de problema data de utilizator (starea initiala a bazei de fapte) si de
raspunsurile pe care le primeste SE în timpul lucrului. Mai este de mentionat ca explicatia de mai sus
se refera la SE folosind cautarea înainte (principiul cautarii înapoi a fost precizat în 1.4.2).

Interfata utilizatorului mai este în legatura cu alte doua componente: subsistemul de generare
a explicatiilor si subsistemul de achizitie a cunostintelor. Daca motorul de inferente, baza de
cunostinte si interfata utilizatorului sunt întotdeauna prezente într-un SE, celelalte doua subsisteme
sunt optionale într-un SE, fiind adesea prezente într-un SBC.

Subsistemul de generare a explicatiilor este cel care, ghidat de motorul de inferente,


asigura urmarirea de catre utilizator a caii de ajungere la solutie. Aceasta este usor de realizat într-un
SE prin memorarea ordinii în care au fost executate regulile. Subsistemul de generare a explicatiilor
poate sa permita utilizatorului sa adreseze întrebari SE (de tipul: de ce?, cum?, dar daca?) si într-un
asemenea caz el însusi poate fi un SE, care, având acces la baza de cunostinte a SE principal si
tinând o evidenta a evolutiei acestuia, rezolva întrebarile respective.

Subsistemul de achizitie a cunostintelor permite utilizatorului sa introduca noi cunostinte, în


principal în baza de reguli, prin crearea a noi reguli sau actualizarea unor reguli existente. Spre
deosebire de baza de fapte, care are un caracter dinamic, evoluând în timpul lucrului SE de la starea
initiala, cea corespunzatoare formularii problemei, la starea finala în care problema este rezolvata,
evolutie produsa chiar prin actiunea (rularea) SE, baza de reguli are un caracter static. Ea
înmagazineaza cunostinte general valabile pentru domeniul de expertiza si modificarea acesteia se
face off-line, adica în afara rularii SE; acesta este cazul cel mai frecvent. În plus, subsistemul de
achizitie a cunostintelor si interfata utilizatorului trebuie sa asigure actualizarea bazei de cunostinte de
catre utilizator, ceea ce presupune o codificare automata a informatiilor furnizate de acesta, fara
prezenta programatorului.
Sisteme bazate pe cunostinte 31

Daca este necesara o achizitie a cunostintelor chiar în timpul rularii SE, sau este necesara o
adaptare a functionarii SE în conformitate cu informatiile culese de la mediu, cum poate fi cazul
pentru unele sisteme de control bazate pe cunostinte, atunci si baza de reguli poate deveni dinamica,
subsistemul de achizitie a cunostintelor si interfata utilizatorului (sau cea spre proces, nereprezentata
în fig. 1. 10) trebuind sa asigure modificarea acesteia. Într-un asemenea caz SE poate sa-si
îmbunatateasca comportarea în timp, prin modificarea adecvata, on-line, a bazei de reguli, capatând
capacitate de învatare. Daca primele medii destinate programarii bazate pe reguli nu permiteau un
caracter dinamic pentru baza de reguli, cele actuale au asemenea facilitati, ramânând în sarcina
constructorului SBC realizarea unei interfete adecvate pentru achizitia de cunostinte.
32 Domeniul inteligentei artificiale si al sistemelor bazate pe cunostinte

1.9. Concluzii - întrebari si probleme

Sistemele bazate pe cunostinte folosesc elemente din mai multe subdomenii ale IA. În ceea
ce priveste baza de cunostinte, capitolul de reprezentare a cunoasterii este important din doua puncte
de vedere: se folosesc anumite modalitati particulare de reprezentare a cunoasterii în realizarea bazei
de fapte si a bazei de reguli, si respectiv aceste modalitati influenteaza caracteristicile sistemului:
eficienta, viteza, posibilitatile de dezvoltare. În ceea ce priveste motorul de inferente, cu privire la
întelegerea realizarii si utilizarea eficienta a acestuia, este important capitolul de efectuare a
rationamentelor. În plus, suportul matematic, necesar în general pentru întelegerea SBC, este oferit
de o parte din capitolele de logica matematica.
Se remarca într-un SE separarea între cunostintele domeniului de lucru – baza de cunostinte
– si elementele de control al rularii programului - motorul de inferente. Acest aspect poate fi mai bine
perceput în momentul rezolvarii unei aceleiasi probleme în cele doua variante: programare bazata pe
reguli, respectiv programare conventionala (imperativa).
Nu trebuie înteles ca programarea bazata pe reguli, frecvent folosita în realizarea SE, este un
instrument universal. În functie de elementele specifice ale aplicatiei, programatorul poate decide care
metoda de programare este mai eficienta, putând intra în discutie tehnici conventionale (programare
imperativa, functionala) sau cele din aria IA (sisteme bazate pe reguli, retele neuronale, etc.), iar
pentru sistemele complexe sunt actuale rezolvarile hibride.

Întrebari si probleme

1. Care este momentul considerat a fi de început pentru stiinta inteligentei artificiale si care au
fost premisele aparitiei ei?
2. De ce este dificil de definit inteligenta?
3. Cum poate fi pusa în evidenta inteligenta? Dar IA?
4. Propuneti o definitie a IA.
5. Ce lipseste calculatoarelor actuale pentru a trece testul Turing?
6. Care sunt domeniile IA?
7. Dati exemple de reguli de cunoastere si de reguli de metacunoastere.
8. Dati exemple de cunoastere procedurala, declarativa si tacita.
9. Precizati avantaje si dezavantaje pentru tehnicile de programare procedurale, declarative si
nondeclarative. Gasiti exemple în care fiecare din aceste variante s-ar aplica în mod eficient.
10. Care sunt caracteristicile retelelor neuronale si ce avantaje decurg din acestea? Gasiti
exemple în care retelele neuronale s-ar putea aplica în automatica.
Sisteme bazate pe cunostinte 33

11. Pentru reteaua neuronala de tip Hopfield din fig. 1.7a aflati celelalte 3 stari stabile (o stare
stabila este aceea din fig. 1.7b).
12. Care sunt avantajele folosirii SE? Dati exemple de aplicatii în care aceste avantaje se pot
materializa.
13. Care sunt deosebirile între un SE si un program conventional?
14. Dati un exemplu de problema de tip nestructurat.
15. Care sunt componentele unui SE/SBC si ce rol îndeplinesc ele?
16. Ce sunt tiparele într-un SE?
17. Ce ar însemna o regula care sa aiba mai multe actiuni, între care operatia logica sa fie
SAU?
18. Ce înseamna cautare înainte si cautare înapoi într-un SE?
2.1. Terminologia logicii matematice

Limbajul obisnuit este ambiguu si imprecis. Logica matematica urmareste sa elimine


aceste deficiente, stabilind un cadru riguros pentru efectuarea rationamentelor. În gândire apar
afirmatii, judecati, care se exprima sub forma de enunturi. Corespondentul acestora în SBC
vor fi faptele si regulile din baza de cunostinte.

Definitia 2.1. Enuntul este o formatiune lingvistica elementara, cu sens (de tip)
narativ, declarativ si cu înteles de sine statator - se afirma ceva despre ceva.

Enuntul poate fi scris sau vorbit si este o formatiune capabila sa poarte informatie. Din
punct de vedere logic enuntul se compune din doua parti: subiectul (sau subiectele) si partea
predicativa.

Definitia 2.2. Subiectul este acel ceva despre care se afirma ceva într-un enunt. Restul,
ceea ce ramâne dupa îndepartarea subiectului sau a subiectelor, este partea predicativa.

Exemplul 2.1. Microprocesorul 8080 este depasit. Microprocesorul 80686 este mai
performant decât microprocesorul 8086.
Prima afirmatie este un enunt, având ca subiect “microprocesorul 8080”, iar ca parte
predicativa “este depasit”. A doua afirmatie este de asemenea un enunt, care are doua
subiecte: “microprocesorul 80686” si “microprocesorul 8086” si partea predicativa: “este mai
performant decât” (de observat diferenta dintre subiectul si predicatul din gramatica si
subiectul, respectiv partea predicativa din logica).

Exemplul 2.2.
Ce înseamna SBC ?
Deschide geamul !
Acestea nu sunt enunturi, deoarece nu au caracter declarativ.
Sisteme bazate pe cunostinte 35

Un enunt are unul sau mai multe subiecte si o singura parte predicativa. Subiectul
poate sa fie precizat (în IA se foloseste termenul instantiat) sau nu. În cele doua exemple de
enunturi de mai sus toate subiectele au fost instantiate.

Exemplul 2.3. Numarul x se divide cu 2.


În acest enunt sunt doua subiecte, unul precizat: “2” si altul neinstantiat: “numarul x”;
partea predicativa este: “se divide cu”.

Definitia 2.3. Un enunt cu toate subiecte instantiate se numeste propozitie. Enuntul


care contine unul sau mai multe subiecte neinstantiate se numeste predicat. Subiectele
neinstantiate dintr- un predicat se numesc variabile. Numarul subiectelor neprecizate dintr-un
predicat se numeste aritatea predicatului.

Exemplul 2.4. Orasul x si orasul y sunt conectate prin n drumuri. Numarul x este
mai mare decât 3.
Primul enunt este un predicat de aritate 3, variabilele fiind: “orasul x”, “orasul y”, “n
drumuri”, iar partea predicativa este: “sunt conectate prin”. Al doilea enunt este un predicat de
aritate 1, variabila fiind: “numarul x”. În acest enunt mai apare subiectul instantiat “3”, iar
partea predicativa este: “este mai mare decât”.

O propozitie poate fi considerata ca un predicat de aritate 0. Daca într-un predicat de


aritate n, într-un mod oarecare, se instantiaza o variabila a sa, se obtine un predicat de
aritate n-1. De exemplu, în ultimul enunt de mai sus, instantiind variabila “numarul x” cu
valoarea (constanta) 6, obtinem din predicatul de aritate 1, propozitia: numarul 6 este mai
mare decât 3.

În limbajul natural putem exprima oricâte întelesuri dorim prin compunerea


enunturilor. Enunturile compuse au fost formalizate în logica folosind operatorii logici [Mal
87], [Met 98]. Acestia sunt de doua tipuri: operatiile logice si cuantificatorii. Operatiile logice
sunt negatia, conjunctia, disjunctia, implicatia si echivalenta, iar cuantificatorii sunt exista - ∃
si oricare - ∀. Pe scurt, definitiile acestora sunt urmatoarele.

Definitia 2.4. Fie P, Q doua enunturi.


Negatia lui P, pe care o notam cu (7P), este enuntul care afirma ca P nu are loc.
Conjunctia lui P si Q este enuntul notat (P ∧ Q) care afirma ca fiecare din cele doua
enunturi are loc.
Disjunctia lui P si Q, notata cu (P ∨ Q), este enuntul care afirma ca macar unul din
cele doua enunturi are loc.
36 Bazele logice ale inteligentei artificiale

Implicatia P implica Q se noteaza prin (P ⇒ Q) si este enuntul care afirma ca daca P


are loc, atunci are loc si Q.
Echivalenta lui P si Q afirma ca P si Q au loc în acelasi timp si se noteaza cu (P ⇔ Q).
În aceste definitii este vorba despre o logica statica, nu una dinamica în care sa
intervina variabila timp; aceasta însemna ca enunturile sunt privite la un anume moment de
timp.

Cuantificatorii genereaza noi enunturi numai daca sunt atasati variabilelor


predicatelor. Daca P este un predicat în care apar variabilele x, y, z, atunci îl vom nota P(x, y,
z). Cuantificatorii permit formarea de enunturi compuse în modul urmator.

Definitia 2.5. Fie P un predicat ce contine variabila x si care afirma ca obiectul


desemnat de variabila x are proprietatea µ. Enuntul construit din P cu cuantificatorul ∃, relativ
la variabila x, este enuntul notat (∃x) P(x), care se citeste “exista x astfel încât P(x)” si care
afirma ca în clasa de obiecte din care face parte x, exista macar unul cu proprietatea µ.
Enuntul construit din P cu cuantificatorul ∀ relativ la variabila x, se noteaza (∀x) P(x),
se citeste “oricare ar fi x, P(x)” si afirma ca orice obiect al clasei din care face parte x are
proprietatea µ.

Atunci când într-un predicat apare variabila x, întelesul este precizat daca stim
domeniul (multimea, iar în IA termenul folosit este univers de discurs – vezi si 1.3) în care
variabila x poate lua valori, adica în IA vom spune ca se instantiaza. În acest fel si definitiile
enunturilor în care apar cuantificatorii, date mai sus, au suport; cuantificatorul ∀ ne permite sa
precizam informatii despre toate elementele universului de discurs fara a fi necesar sa le
enumeram, iar ∃ ne permite sa precizam existenta unui ele ment din universul de discurs,
element având anumite proprietati, fara a fi necesar sa- l identificam în mod direct.

Informatia circula, este prelucrata si stocata în masura în care ea prezinta interes


pentru receptor, adica în masura în care are valoare. Cea mai simpla valoare informationala
este valoarea de adevar a informatiei. Atât în domeniul SBC cât si în logica ne intereseaza
determinarea valorii de adevar a enunturilor. Valoarea de adevar reprezinta gradul de
concordanta dintre informatia respectiva si situatia de fapt la care aceasta se refera. Valoarea
de adevar a unui enunt poate avea o întreaga scara de gradatii. Logica traditionala ia în
considerare cele doua valori extreme: adevarat si fals, cauza pentru care aceasta se mai
numeste si bivalenta. În SBC se foloseste în primul rând logica bivalenta, iar pentru cazul
unor sisteme care lucreaza în conditii de incertitudine se folosesc si alte tipuri de logici
(multivalente, fuzzy).
Sisteme bazate pe cunostinte 37

În aceasta prezentare a unor principali termeni folositi în logic a s-au evidentiat cele
doua situatii posibile pentru enunturi: propozitiile, respectiv predicatele, care sunt obiectul de
studiu al unor capitole distincte.
38 Bazele logice ale inteligentei artificiale

2.2. Calculul propozitional

Calculul propozitional este acea parte a logicii care se ocupa cu analiza propozitiilor
din punct de vedere al compunerii lor corecte cu ajutorul operatiilor logice si al studiului
valorilor de adevar pentru enunturile compuse în acest fel. Se poate vorbi despre un limbaj al
calculului propozitional, care este un limbaj formal, oferind o prima posibilitate de a
formaliza limbajul natural (completarea facându-se prin limbajul calculului cu predicate).
Orice limbaj presupune existenta unui alfabet, care precizeaza simbolurile folosite, a unei
sintaxe stabilind cum pot fi combinate în limbajul respectiv simbolurile admise si a unei
semantici, stabilind semnificatia combinatiilor admise de sintaxa.

2.2.1 Sintaxa calculului propozitional

Definitia 2.6. Numim alfabetul calculului propozitional multimea Sp = V ∪ L ∪


{( , )}, unde V este o multime infinit numarabila de simboluri, care se numesc variabile
propozitionale. Acestea vor fi notate cu p, q, r, eventual cu indici p1 , p2 , . . ., iar L =
{7, ∨, ∧, ⇒, ⇔} este multimea operatiilor logice.

Definitia 2.7. Numim cuvânt peste un alfabet S o succesiune finita de elemente din S.
Multimea tuturor cuvintelor peste alfabetul S se noteaza cu S* . Ne vor interesa cuvintele peste
alfabetul calculului propozitional, multimea acestora notându-se cu S *p . Elementele multimii
S *p le vom nota cu A, B, . . .

Definitia 2.8. Un cuvânt A ∈ S *p se numeste formula în calculul propozitional (notam


multimea formulelor în calculul propozitional cu Fp ) daca si numai daca îndeplineste una din
conditiile:

1) A ∈ V (A este o variabila propozitionala);


2) A = (7 B) unde B ∈ Fp ;
3) A = (B # C) unde B, C ∈ Fp , iar # ∈ L \ {7}.

Se poate observa ca definitia de mai sus este una de tip recursiv, deoarece entitatea
definita este descrisa chiar pe baza entitatii de acelasi tip (în cazurile 2 si 3). Totodata, ea
poate fi privita si ca fiind de tip inductiv, în care 1 asigura pasul initial, iar 2 si 3 asigura pasul
inductiv. Recitind-o, rezulta ca este formula în calculul propozitional o variabila
propozitionala, negatia unei formule scrisa între paranteze, sau compunerea a doua formule
Sisteme bazate pe cunostinte 39

prin una din operatiile logice binare (conjunctie, disjunctie, implicatie sau echivalenta),
compunere cuprinsa între paranteze.

Exemplul 2.5. Daca p, q, r ∈ V, atunci: q r ⇒ ∧, r ∨ q, ((7p) ∧ (r ⇔ q)) sunt trei


cuvinte peste alfabetul calculului propozitional (elemente din S *p ). Din acestea, numai ultimul
cuvânt este si formula în calculul propozitional (element din Fp ).
Rezulta din definitiile de mai sus si din acest exemplu ca are loc relatia V ⊂ Fp ⊂ S *p ,
incluziunile respective nefiind stricte (adica exista elemente din Fp care nu apartin lui V – cele
construite dupa punctele 2) si 3) ale definitiei 2.8, si respectiv elemente din S *p care nu apartin
lui Fp , asa cum este primul cuvânt din exemplul 2.5).

Folosirea stricta a definitiei formulei în calculul propozitional presupune manevrarea


unui numar mare de paranteze. Pentru simplitate, A ∈ Fp poate fi reprezentata printr-un
cuvânt mai simplu A’, obtinut din A prin renuntarea, omiterea unor paranteze, cu conditia ca
din cuvântul redus A’ sa se poata reconstitui în mod unic formula A, pe baza urmatoarelor 3
reguli de reconstituire:

1) restabilirea parantezelor se face în ordine pentru: 7, ∧, ∨, ⇒, ⇔;


2) daca A ∈ Fp atunci cuvântul 77 . . . 7A reprezinta formula (7 (7 (. . . (7A)). . .) );
3) daca A1 , A2 , . . . An ∈ Fp si # ∈{∧, ∨, ⇒, ⇔} atunci cuvântul A1 # A2 #. . . #An
reprezinta formula (. . . ((A1 # A2 ) #. . . #An ).

Regula 1) de mai sus fixeaza prioritatea operatiilor în calculul propozitional – cea mai
prioritara este negatia, urmata de conjunctie, disjunctie, implicatie si echivalenta, iar regulile
2) si 3) arata ca reconstituirea se face de la stânga la dreapta. Practic, se cauta de la stânga la
dreapta cea mai prioritara operatie logica în jurul careia se poate reconstitui o formula, se
reconstituie, s.a.m.d.

Exemplul 2.6. Daca p, q, r ∈ V, sa se reconstituie formula din care provine urmatorul


cuvânt A:

A = (p ⇒ q ∨ r ⇔ p) ∨ (7q ⇒ r) ∧ 7p ∧ r

Vom urmari pas cu pas procesul de reconstituire. Simbolul cel mai prioritar este
negatia si reconstituim parantezele pentru cea mai din stânga aparitie a sa; obtinem:

(p ⇒ q ∨ r ⇔ p) ∨ ((7q) ⇒ r) ∧ 7p ∧ r
40 Bazele logice ale inteligentei artificiale

În mod similar procedam pentru urmatoarea aparitie a negatiei; obtinem:

(p ⇒ q ∨ r ⇔ p) ∨ ((7q) ⇒ r) ∧ (7p) ∧ r

Urmeaza reconstituirea parantezelor pentru cele doua aparitii ale conjunctiei; dupa aceste
doua reconstituiri obtinem:

(p ⇒ q ∨ r ⇔ p) ∨ ((((7q) ⇒ r) ∧ (7p)) ∧ r)

Se reconstituie apoi parantezele pentru cele doua disjunctii:

((p ⇒ (q ∨ r) ⇔ p) ∨ ((((7q) ⇒ r) ∧ (7p)) ∧ r))

Din cele doua implicatii, pentru prima trebuie reconstituite parantezele, în timp ce pentru a
doua implicatie, ca si pentru singura echivalenta, parantezele exista chiar în cuvântul initial si
deci nu mai trebuie reconstituite; obtinem forma finala A1 a formulei corespunzatoare
cuvântului dat:

A1 = (((p ⇒ (q ∨ r)) ⇔ p) ∨ ((((7q) ⇒ r) ∧ (7p)) ∧ r))

În general nu se poate renunta la toate parantezele unei formule pentru a obtine o


forma simplificata a acesteia, existând pericolul de alterare a continutului formulei. Acest
aspect este verificabil chiar pe exemplul de mai sus, unde, daca în cuvântul initial A am
renunta la toate parantezele, dupa reconstituire nu am mai obtine A1 , ci A2 :

A2 = ((p ⇒ (q ∨ r)) ⇔ ((p ∨ (7q)) ⇒ ((r ∧ (7p)) ∧ r)))

Tinând seama de prioritatea operatiilor logice ne vom putea da seama de parantezele la


care putem renunta într-o formula si de cele la care nu putem renunta.

Exemplul 2.7. Formula A = ((7p) ⇒ ((r ∨ p) ∧ (7r))), unde p, r ∈ V, poate fi


reprezentata simplificat prin cuvântul: A1 = 7p ⇒ (r ∨ p) ∧ 7r.

Daca am renunta la toate parantezele, atunci din A2 = 7p ⇒ r ∨ p ∧ 7r nu am obtine


prin reconstituire A, ci A3 = ((7p) ⇒ (r ∨ (p ∧ (7r)))).

În continuare vom lucra numai cu reprezentarile simplificate ale formulelor si nu vom


mai face distinctie între o formula si reprezentarea ei simplificata, cea obtinuta prin omiterea
anumitor paranteze.
Sisteme bazate pe cunostinte 41

Definitia 2.9. Daca A ∈ Fp atunci multimea partilor lui A, notata π(A), se defineste
inductiv prin:
1) daca A ∈ V atunci π(A) = {A};
b) daca A = 7B, unde B ∈ Fp , atunci π(A) = π(B) ∪ {A};
c) daca A = B # C, unde B, C ∈ Fp si # ∈ L \ {7}, atunci π(A) = π(B) ∪ π(C) ∪ {A}.

Observatia 2.1. Rezulta din definitia de mai sus ca multimea π(A) are cardinalul egal
cu 1 daca si numai daca A ∈ V (A este o variabila propozitionala). În acest caz A se numeste
formula atomica sau atom. Daca A ∈ Fp si A nu este atom, atunci formula va fi de forma A
= 7B sau A = B # C, cu # ∈ L \ {7}, caz în care formula A se numeste formula compusa, iar 7
sau # se numeste operatie dominanta a formulei. Elementele lui π(A) se numesc subformule
ale lui A.

Exemplul 2.8. Fie p, r ∈ V si formula A = 7p ⇒ (r ∨ p) ∧ 7r.


A este formula compusa. π(A) = {A, 7p, (r ∨ p) ∧ 7r, p, r ∨ p, 7r, r}, iar operatia
dominanta este ⇒.

Tinând seama de caracterul inductiv al definitiei formulei în calculul propozitional,


vom putea aplica inductia matematica pentru a demonstra proprietati referitoare la formulele
din calculul propozitional. Astfel, poate fi formulata o schema a inductiei matematice pentru
formulele din calculul propozitional.

Teorema 2.1. Fie µ este o proprietate referitoare la formulele din calculul


propozitional. Notam cu µ (A) faptul ca proprietatea µ este adevarata pentru A, A ∈ Fp . Daca
au loc:

a) µ(A), oricare ar fi A o formula atomica;


b) daca din µ(A1 ) si µ(A2 ), A1 , A2 fiind formule oarecare, se deduce µ(7A1 ), µ(A1 ∧
A2 ), µ(A1 ∨ A2 ), µ(A1 ⇒ A2 ), µ(A1 ⇔ A2 )
atunci µ(A) are loc, oricare ar fi A ∈ Fp .

Aceasta schema inductiva este o aplicare a inductiei complete pentru cazul multimii
Fp , inductia facându-se dupa lungimea formulei (numarul de operatii logice continute de
aceasta).
Toate elementele prezentate pâna aici reprezinta sintaxa calculului propozitional;
semantica (întelesul) limbajului calculului propozitional poate fi precizata folosind notiunea
de evaluare.
42 Bazele logice ale inteligentei artificiale

2.2.2 Semantica pentru calculul propozitional

Definitia 2.10. Se numeste evaluare a formulelor în calculul propozitional extensia


unica a oricarei functii v : V → {adevarat, fals} la Fp , extensie pe care o vom nota tot cu v, v :
Fp → {adevarat, fals} (este vorba despre prelungirea obisnuita din teoria functiilor, a functiei
v, definita pe multimea variabilelor propozitionale, la multimea formulelor în calculul
propozitional), si care se calculeaza dupa regulile sintetizate în urmatoarele tabele (în acestea
am notat v(x) cu xv – valoarea evaluarii v pentru x - si adevarat cu a, respectiv fals cu f):

Tabelul 2.1. Tabelul 2.2.


Av (7A)v Av Bv (A ∧ B)v (A ∨ B)v (A ⇒ B)v (A ⇔ B)v
a f a a a a a a
f a a f f a f f
f a f a a f
f f f f a a

Din definitia evaluarii se poate remarca semnificatia operatiei logice de implicatie, cea
care are o importanta deosebita si pentru functionarea SE. Se constata ca, daca subformula A
din fata implicatiei este evaluata la fals, atunci rezultatul evaluarii implicatiei este adevarat,
indiferent de evaluarea subformulei B de dupa implicatie. În logica se spune în acest sens ca:
“falsul implica orice”. Tinând seama de caracterul recursiv al definitiei formulei în calculul
propozitional, se constata ca pentru determinarea lui Av pentru o formula data este suficient sa
cunoastem valorile lui v pentru toate variabilele propozitionale ce apar în A.

Definitia 2.11. O formula A se numeste


Fp tautologie (sau lege logica) daca oricare ar fi v o
evaluare a formulelor, avem Av = adevarat. Daca
Tautologii A este tautologie, atunci se foloseste notatia |=A.
Contradictii
Definitia 2.12. O formula A se numeste
realizabila (consistenta, verificabila) daca exista
Formule o evaluare v astfel încât Av = adevarat. O formula
realizabile A se numeste nerealizabila (contradictie, falsa)
Fig. 2.1. O împartire a multimii formulelor daca oricare ar fi v o evaluare avem Av = fals.
din calculul propozitional Pe baza definitiilor de mai sus putem
constata ca multimea Fp capata o împartire
conform fig. 2.1. Orice tautologie este si formula realizabila, în timp ce o formula realizabila
nu este neaparat tautologie. Formulele realizabile si respectiv contradictiile determina o
partitionare a multimii Fp .
Sisteme bazate pe cunostinte 43

Se pot formula urmatoarele teoreme în legatura cu aceste definitii.

Teorema 2.2. O formula este tautologie daca si numai daca negatia ei este contradictie.

Teorema 2.3. O formula este realizabila daca si numai daca negatia ei nu este
tautologie.
Demonstratiile sunt imediate pe baza definitiei evaluarii. Teorema 2.2 ne arata o
posibilitate de a demonstra ca o formula este tautologie: se arata ca negatia ei este
contradictie. Aceasta este calea urmata de demonstrarea automata a teoremelor.

Definitiile privind realizabilitatea si nerealizabilitatea se extind pentru multimi de


formule.

Definitia 2.13. O multime I ⊆ Fp este realizabila (consistenta) daca exista o evaluare v


astfel încât oricare ar fi A ∈ I sa avem Av = adevarat. O multime I ⊆ Fp este nerealizabila
(inconsistenta) daca oricare ar fi v o evaluare, exista A ∈ I astfel încât Av = fals.
Este usor de observat ca orice multime de formule este sau realizabila sau
nerealizabila. Pentru SBC ne va interesa ca baza de cunostinte sa fie pastrata realizabila.

Desi în definitia tautologiei se cere Av = adevarat pentru oricare evaluare v, si exista o


infinitate de evaluari, se poate decide într-un numar finit de pasi daca formula A este
tautologie pe baza observatiilor urmatoare:

a) în formula A intra un numar finit de variabile proportionale; fie acestea p1 , p2 ,. . .,pn .


b) daca v si w sunt doua evaluari astfel încât: piv = piw ∀ i = {1, ..., n}, atunci Av =
Aw.
c) exista 2n evaluari distincte pe multimea {p 1 , . . . pn }.

Rezulta astfel ca vom avea de testat cel mult 2n cazuri pentru a decide daca A este
tautologie.

Pentru calculul propozitional exista mai multi algoritmi ce pot fi aplicati pentru a
decide asupra caracterului de tautologie al unei formule [Mal 87], [Met 98], [Cro 85]; unul
dintre acestia este prezentat în continuare.
Asociem pentru fiecare variabila propozitionala p o variabila numerica p cu valori în
multimea {0, 1}. Pentru orice formula A, ale carei variabile propozitionale sunt p1 , . . . , pn ,
asociem un polinom A depinzând de variabilele numerice p1 , . . . , p n . Aceasta asociere o
facem pe baza urmatoarelor reguli de calcul:
44 Bazele logice ale inteligentei artificiale

1) daca A ∈V, deci A = p, atunci A = p


2) daca A = 7B, B ∈ Fp , atunci A = 1 − B
3) daca A = B ∧ C, B, C ∈ Fp , atunci A = B · C
4) daca A = B ∨ C, B, C ∈ Fp , atunci A = B + C − B · C
5) daca A = B ⇒ C, B, C ∈ Fp , atunci A = 1 − B + B · C
6) daca A = B ⇔ C, B, C ∈ Fp , atunci A = 1 − B − C + 2 B · C

Se remarca faptul ca prin regulile de mai sus orice polinom A va lua valori în
multimea {0, 1}.

Teorema 2.4. Daca v este o evaluare oarecare si oricare ar fi p, p ∈ V, îi asociem p ,


astfel încât p = 1 daca pv = adevarat si p = 0 daca pv = fals, atunci oricare ar fi A, A ∈ Fp , Av
= adevarat daca si numai daca valoarea polinomului A (asociat lui A conform celor sase
reguli de calcul de mai sus), pentru valorile corespunzatoare ale variabilelor numerice p de
care depinde este A = 1.

Demonstratie.
Folosim schema inductiei matematice pentru formulele din calculul propozitional.
Proprietatea µ este în cazul acesta: “A v = adevarat daca si numai daca A = 1”. Din ipoteza
teoremei rezulta ca are loc µ(A), oricare ar fi A atom. Fie A1 , A2 ∈ Fp , pentru care au loc
µ(A1 ) si µ(A2 ). Trebuie sa demonstram ca au loc si µ(7A1 ), µ(A1 ∧ A2 ), µ(A1 ∨ A2 ), µ(A1
⇒ A2 ), µ(A1 ⇔ A2 ).
Astfel (7A1 )v = adevarat daca si numai daca (A1 )v = fals (conform definitiei evaluarii).
Deoarece µ(A1 ) are loc rezulta ca (A1 )v = fals daca si numai daca A1 = 0. Conform regulii 2 de
calcul pentru asocierea dintre A si A , rezulta ca A1 = 0 daca si numai daca (7 A1 ) = 1, astfel
ca µ(7A1 ) are loc.
Fie (A1 ∧ A2 )v = adevarat. Aceasta se întâmpla daca si numai daca (A1 )v = adevarat si
(A2 )v = adevarat (definitia evaluarii). Atunci, deoarece µ(A1 ) si µ(A2 ) au loc, A1 = 1 si A2 =
1. Folosind regula 3 de asociere, rezulta ca A1 = 1 si A2 = 1 daca si numai daca polinomul
asociat formulei A1 ∧ A2 are valoarea 1. Astfel am demonstrat si µ(A1 ∧ A2 ). În mod similar
se demonstreaza celelalte trei cazuri ramase.

Rezulta, pe baza teoremei 2.4, algoritmul pentru a decide daca o formula A este
tautologie:
Sisteme bazate pe cunostinte 45

1) se construieste polinomul A asociat formulei A;


2) se verifica daca A este o functie polinomiala identic egala cu 1.

Pentru aplicarea algoritmului este util sa observam ca daca x este o variabila ce ia


valori în multimea {0,1} atunci x2 = x si x(1-x) = 0. Aceasta observatie poate ajuta în
rezolvarea pasului al doilea al algoritmului.

Exemplul 2.9. Fie formula A = p ⇒ (q ⇒ p ∧ q), p, q ∈ V. Pentru a demonstra ca are


loc |=A construim A folosind regulile de asociere.

A = 1– p + p (q ⇒ p ∧ q)= 1– p + p (1 – q + q p ∧ q ) = 1– p + p (1 – q + q p q )=
= 1 − p + p − p q + p q = 1.
unde am tinut seama de observatia de mai sus. Am demonstrat astfel ca are loc |=A.

Teorema 2.5. Fie A ∈ Fp , o formula ce contine variabilele propozitionale p1 , . . ., pn si


fie B formula obtinuta din A prin substitutia simultana a variabilelor p1 , . . , pn , respectiv cu
formulele C1 , . . .Cn (se poate demonstra, de exemplu folosind inductia matematica pentru
formulele din calculul propozitional, ca si B este formula). Daca A este tautologie atunci si B
este tautologie.

Demonstratie.
În enuntul teoremei p1 , . . ., pn pot fi toate, sau o parte din variabilele propozitionale
care apar în A. Fie v o evaluare oarecare. Trebuie sa aratam ca Bv = adevarat. Construim
evaluarea w care satisface egalitatile: p1 w = C1 v , p2 w = C2v , . . ., pn w = Cnv . Din aceasta
constructie si din felul în care a fost obtinuta B rezulta: Aw = Bv . Cum din ipoteza teoremei
are loc |= A, înseamna ca Aw = adevarat si deci Bv = adevarat, ceea ce trebuia demonstrat.

Din aceasta teorema rezulta ca în Fp exista o infinitate de tautologii, de exemplu


obtinute dintr-o unica tautologie prin substitutii repetate ale variabilelor propozitionale din
aceasta, cu alte formule. Exista însa o serie de tautologii de baza, utilizate mai des. Acestea
sunt date de urmatoarea teorema.

Teorema 2.6. Daca A, B, C ∈ Fp atunci au loc:

1) |= A ⇒ A
2) |= A ⇔ A (legea identitatii pentru echivalenta)
3) |= A ⇔ 77A (negarea negatiei)
46 Bazele logice ale inteligentei artificiale

4) |= A ∨ 7A (legea tertului exclus)


5) |= A # B ⇔ B # A, # ∈ {∧, ∨, ⇔} (legi de comutativitate pentru conjunctie,
disjunctie si echivalenta)
6) |= (A # B) # C ⇔ A # (B # C), # ∈ {∧, ∨, ⇔} (legi de asociativitate pentru
conjunctie, disjunctie si echivalenta)
7) |= A # 1 (B # 2 C) ⇔ (A # 1 B) # 2 (A # 1 C), # 1 , # 2 ∈ {∧, ∨, ⇔} (legi de distributivitate
pentru conjunctie, disjunctie si echivalenta)
8) |= (A ⇒ B) ⇔ (7A ∨ B) (înlocuirea implicatiei cu disjunctie)
9) |= (A ⇒ B) ∧ (B ⇒ C) ⇒ (A ⇒ C)
10) |= (A ⇔ B) ⇔ (A ⇒ B) ∧ (B ⇒ A) (înlocuirea echivalentei cu dubla implicatie)
11) |= 7(A ∧ B) ⇔ (7A ∨ 7B) (lege a lui De Morga n)
12) |= 7(A ∨ B) ⇔ (7A ∧ 7B) (lege a lui De Morgan)
13) |= (A ⇒ B) ⇔ (7B ⇒ 7A) (legea contrapozitiei)
14) |= (A ⇒ B) ⇒ ((B ⇒ C) ⇒ (A ⇒ C)) (lege a silogismului)
15) |= (A ⇒ (B ⇒ C)) ⇔ ((A ∧ B) ⇒ C) (legea transportarii)
16) |= A ⇒ A ∨ B si |= B ⇒ A ∨ B (introducerea disjunctiei)
17) |= A ∧ B ⇒ A si |= A ∧ B ⇒ B (eliminarea conjunctiei)
18) |= 7A ∧ (A ∨ B) ⇒ B si |= 7B ∧ (A ∨ B) ⇒ A (rezolutia unitara)
19) |= (A ∨ B) ∧ (7B ∨ C) ⇒ (A ∨ C) (rezolutia, importanta în demonstrarea automata
a teoremelor)
20) |= A ⇒ (B ⇒ A)
21) |= (A ⇒ (B ⇒ C)) ⇒ (B ⇒ (A ⇒ C)) (schimbarea premiselor)
22) |= A ∧ (A ⇒ B) ⇒ B (modus ponens sau regula detasarii, importanta pentru SE)
23) |= (A ⇒ B) ∧ 7B ⇒ 7A (modus tollens)

Demonstratia se poate face aplicând algoritmul precizat anterior, privind verificarea


caracterului de tautologie al unei formule.

Definitia 2.14. Daca A si B sunt formule ele sunt echivalente daca este tautologie A ⇔
B (conform definitiei evaluarii, acesta este acelasi lucru cu a spune ca A si B iau aceleasi
valori de adevar pentru orice evaluare).
Exemple de formule echivalente sunt furnizate de lista anterioara de tautologii. În
demonstrarea automata a teoremelor se foloseste frecvent echivalenta formulei A ⇒ B cu
formula 7A ∨ B (punctul 8 din teorema 2.6).
Sisteme bazate pe cunostinte 47

2.2.3 Elemente de teoria deductiei în calculul propozitional

Partea din logica folosita ca un punct de plecare pentru capitolele de IA de


demonstrare automata a teoremelor si SE este teoria deductiei. Astfel, în IA ne intereseaza ca
programele sa deduca în mod automat noi fapte adevarate.

Definitia 2.15. Daca I ⊆ Fp este o multime de formule si A ∈ Fp , spunem ca formula


A este o consecinta logica din multimea de ipoteze I, daca oricare ar fi v o evaluare cu
proprietatea ca Bv = adevarat, ∀B ∈ I, atunci Av = adevarat.

Observatia 2.2.

1) Daca A este o consecinta logica din multimea I de formule, atunci folosim


notatia: I |= A.
2) Daca I = φ (multimea vida) atunci faptul ca φ |= A revine conform definitiei 2.15
la conditia ca oricare ar fi v o evaluare sa avem Av = adevarat, adica A este tautologie. Altfel
spus, o tautologie poate fi considerata ca o consecinta logica din multimea vida de ipoteze.
3) Daca I = {B1 , . . ., Bn } – I este o multime finita – atunci în locul notatiei
{B1 , . . . , Bn } |= A se foloseste si notatia B1 , B2 , . . ., Bn |= A.
4) Din definitia consecintei logice si din semnificatia operatiei logice de implicatie,
rezulta ca B1 , . . ., Bn |= A daca si numai daca are loc |= B1 ∧ B2 . . . ∧ Bn ⇒A. Aceasta
observatie este importanta pentru demonstrarea automata a teoremelor.
5) Daca multimea I este astfel încât nu exista nici o evaluare v pentru care sa avem Bv
= adevarat, ∀B ∈ I, atunci I |= A, ∀A, A ∈ Fp , adica dintr-o multime de ipoteze
contradictorii se poate deduce orice consecinta logica.

Definitia 2.16. Se numeste regula de deductie orice relatie I |= A unde I este finita si
nevida.
Daca I = {B1 , . . ., Bn } si I |= A este regula de deductie, atunci B1 , . . . Bn se numesc
ipoteze, iar A concluzie.
Pe baza punctului 4 din observatiei 2.2 rezulta ca orice regula de deductie se poate
transforma într-o tautologie, si respectiv orice formula care este tautologie si la care operatia
dominanta este implicatia poate fi scrisa ca regula de deductie. În plus, si tautologiile la care
operatia dominanta nu este implicatia ci disjunctia, pot fi reformulate ca formule care sa
contina implicatia, tinând seama de echivalenta data de punctul 8 din teorema 2.6. Totusi,
doar o serie de tautologii sunt mai importante ca reguli de deductie. Dintre acestea pentru
SBC sunt de interes regula de deductie modus ponens: A, A ⇒ B |= B, si, într-o mai mica
masura, regula de deductie modus tollens: 7B, A ⇒ B |= 7A.
48 Bazele logice ale inteligentei artificiale

Definitia 2.17. Fie I o multime de formule. Se numeste deductie (de lungime p) din
multimea de ipoteze I, sirul de formule D1 , D2 , . . ., Dp , astfel încât oricare ar fi i ∈ {1, . . ., p}
are loc una din conditiile:

a) Di ∈ I
b) |= Di
c) Di se obtine din formulele precedente din sir pe baza unei reguli de deductie.

Un exemplu de construire a unei deductii este dat în demonstratia la teorema 2.8.

Definitia 2.18. Daca I ⊆ Fp , A ∈ Fp , formula A se obtine prin deductie (se deduce)


din multimea I de ipoteze, daca exista o deductie din I care se termina cu A.

Teorema 2.7. Daca A se deduce din I, atunci I |= A (reciproca are si ea loc daca I este
finita).
Demonstratia se poate face prin inductie dupa lungimea deductiei. Pe baza acestei
teoreme rezulta o modalitate pentru a demonstra I |= A: daca se construieste o deductie a lui A
din I, atunci înseamna ca are loc I |= A.
Exista o infinitate de reguli de deductie, corespunzatoare diferitelor tautologii. Dintre
regulile de deductie un rol deosebit îl joaca regula modus ponens, asa cum rezulta din teorema
urmatoare.

Teorema 2.8. Daca B1 , . . ., Bm |= A este o regula de deductie, atunci exista o deductie


a lui A din multimea {B1 , . . ., Bm} în care singura regula de deductie folosita este modus
ponens.

Demonstratie.
Conform exemplului 2.9 are loc |= p ⇒ (q ⇒ p ∧ q). Notam aceasta tautologie cu (T).
Din ipoteza teoremei avem B1 , . . ., Bm |= A, ceea ce conform observatiei 2.2 punctul 4
este echivalent cu: |= B1 ∧ B2 . . . ∧ Bm ⇒ A. Construim o deductie a lui A din multimea de
ipoteze {B1 , . . ., Bm} în care singura regula de deductie folosita va fi modus ponens.

1) B1 - ipoteza
2) B1 ⇒ (B2 ⇒ B1 ∧ B2 ) - tautologia (T)
3) B2 ⇒ B1 ∧ B2 - din 1) si 2) cu regula de deductie modus ponens
4) B2 - ipoteza
5) B1 ∧ B2 - din 3) si 4) cu regula de deductie modus ponens
6) B1 ∧ B2 ⇒ (B3 ⇒ B1 ∧ B2 ∧ B3 ) - tautologia (T)
Sisteme bazate pe cunostinte 49

7) B3 ⇒ B1 ∧ B2 ∧ B3 - din 5) si 6) cu regula de deductie modus ponens


8) B3 - ipoteza
9) B1 ∧ B2 ∧ B3 - din 7) si 8) cu regula de deductie modus ponens

...

4m-3) B1 ∧ B2 . . . ∧ Bm - din 4m-4) si 4m-5) cu regula modus ponens


4m-2) B1 ∧ B2 . . . ∧ Bm ⇒ A - tautologie (ipoteza teoremei)
4m-1) A - din 4m-3) si 4m-2) cu regula modus ponens

Aceasta teorema justifica felul în care SE pot lucra folosind o singura regula de
deductie, si anume modus ponens.

Logica propozitiilor, la fel ca si alte sisteme matematice, poate fi axiomatizata,


devenind un sistem formal. Un sistem formal este format din: un alfabet, o sintaxa, o multime
de axiome si reguli de deductie. Primele doua aspecte sunt deja discutate. În ceea ce priveste
sistemul de axiome al calculului propozitional exista mai multe variante, dintre care una
frecvent folosita este aceea a lui Lukasiewicz [Mal 87], [Met 98]. Aceasta are urmatoarele
formule drept axiome (A, B, C ∈ Fp ):

(A1) A ⇒ (B ⇒ A)
(A2) (A ⇒ (B ⇒ C)) ⇒ ((A ⇒ B) ⇒ (A ⇒ C))
(A3) (7A ⇒ 7B) ⇒ (B ⇒ A)

Se poate verifica faptul ca (A1) – (A3) sunt tautologii, ceea ce creeaza legatura între
aspectele sintactice si cele semantice ale sistemului formal dezvoltat. Datorita caracterului
deosebit, aratat prin teorema 2.8, drept regula de deductie (derivare) în sistemul formal al
calculului propozitional se foloseste regula modus ponens. În plus, conform teoremei 2.5, din
cele 3 axiome putem forma oricâte alte axiome (tautologii) prin substituirea formulelor A, B
si C cu alte formule din acelasi limbaj. De aceea se spune uneori ca, alaturi de modus ponens,
substitutia formulelor este si ea o regula de deductie a sistemului, iar (A1) – (A3) se numesc si
scheme de axiome, în sensul ca pot fi aplicate substituind pe A, B si C cu formule convenabil
alese. Pe baza celor 3 scheme de axiome si a regulii de derivare alese pot fi realizate
demonstratii în sistemul formal creat.

Definitia 2.19. Se numeste demonstratie în sistemul formal al calculului propozitional


un sir de formule D1 , D2 , . . ., Dp , (Di ∈ Fp ), astfel încât oricare ar fi i ∈ {1, . . ., p} are loc una
din conditiile:
50 Bazele logice ale inteligentei artificiale

a) Di este o axioma;
b) Di se obtine din formulele precedente din sir pe baza regulii de deductie modus
ponens.
Dp din definitia anterioara se numeste teorema în sistemul formal respectiv, iar sirul de
formule care o precede se numeste demonstratia lui Dp .

Exemplul 2.10. Fie sirul de formule:

D1 = p ⇒ ((q ⇒ p) ⇒ p) - este axioma (A1) în care am substituit pe A cu p, B cu (q ⇒ p)


D2 = (p ⇒ ((q ⇒ p) ⇒ p)) ⇒ ((p ⇒ (q ⇒ p)) ⇒ (p ⇒ p)) – este (A2) în care am substituit
pe A cu p, B cu (q ⇒ p) si C
cu p
D3 = (p ⇒ (q ⇒ p)) ⇒ (p ⇒ p) - este obtinuta din D1 si D2 folosind modus ponens
D4 = p ⇒ (q ⇒ p) - este (A1) în care am substituit pe A cu p si B cu q
D5 = p ⇒ p - din D3 si D4 folosind modus ponens.

Deci A ⇒ A este o teorema în sistemul formal al calculului propozitional.

Teorema 2.9. Sistemul axiomatic dat de (A1 ) – (A3 ) (respectiv sistemul formal creat)
este complet, în sensul ca orice tautologie din calculul propozitional poate fi obtinuta ca
teorema, si este corect, în sensul ca orice teorema dedusa în acest sistem este tautologie.
Demonstratia se poate face pe baza teoremei 2.7.

Notiunea de deductie, definita anterior prin 2.17, se poate particulariza pentru sistemul
formal al calculului propozitional, dupa cum urmeaza.

Definitia 2.20. Fie L ⊆ Fp . Se numeste deductie din L în sistemul formal al calculului


propozitional sirul de formule D1 , D2 , . . ., Dp , astfel încât oricare ar fi i ∈ {1, . . ., p} are loc
una din conditiile:

a) Di ∈ L;
b) Di este o axioma;
c) Di se obtine din formulele precedente din sir pe baza regulii de deductie modus
ponens.
Despre formula Dp se spune ca se deduce din L în sistemul formal al calculului
propozitional. Comparând cu definitia 2.19 rezulta ca o teorema este o deductie din multimea
vida.
Sisteme bazate pe cunostinte 51

Exemplul 2.11. Fie L = {A}. Din multimea L putem construi urmatoarea deductie:

D1 = A - D1 ∈ L
D2 = A ⇒ (B ⇒ A) - axioma (A1 )
D3 = B ⇒ A - din D1 si D2 folosind modus ponens
D4 = (B ⇒ A) ⇒ (7A ⇒ 7B) - este axioma (A3 ) în care am substituit A cu 7B si B cu 7A
D5 = 7A ⇒ 7B - din D3 si D4 folosind modus ponens

Despre formula obtinuta: 7A ⇒ 7B spunem ca se deduce din L = {A} în sistemul


formal al calculului propozitional.

În legatura cu deductia dintr-o multime L se formuleaza urmatoarea teorema.

Teorema 2.10. Fie L ⊆ Fp (L este o multime de formule, nu neaparat nevida) si A, B∈


Fp . Daca din L ∪ {A} se deduce B, atunci din L se deduce formula A ⇒ B.

Demonstratia se poate face prin inductie dupa numarul formulelor din sirul de
deductie a lui B [Mal 87]. Teorema 2.10 este numita teorema deductiei si este adevarata si
reciproca acesteia.

Un aspect pe care nu l-am scos în evidenta în prezentarea calculului propozitional este


acela al metalimbajului, folosind elementele de metalimbaj în mod implicit. Fara a intra în
amanunte, metalimbajul pentru calculul propozitional este limbajul folosit pentru a rationa
asupra formulelor din calculul propozitional si a exprima proprietati ale acestora. De exemplu,
o exprimare de forma “A este tautologie”, sau teorema 2.10, care poate fi privita ca descriind
o tehnica a deductiei, apartin metalimbajului.

Este util ca un SBC sa poata fi validat ca sistem formal, care sa contina initial în baza
de cunostinte un numar de axiome, adica tautologii caracterizând universul de discurs la care
se refera SBC respectiv si care sa deduca noi fapte (teoreme), astfel încât sa rezolve problema
propusa de utilizator. Expresivitatea bazei de cunostinte ar fi însa redusa daca ne-am limita la
calculul propozitional si extinderea necesara este aceea la calculul cu predicate.
52 Bazele logice ale inteligentei artificiale

2.3. Calculul cu predicate

Calculul propozitional are dezavantajul ca nu permite modelarea enunturilor în care


apar cuantificatori. Conform celor precizate în 2.1 aceasta presupune folosirea predicatelor si a
variabilelor, fiind vorba de partea din logica numita calculul predicatelor.

2.3.1. Sintaxa calculului cu predicate

Definitia 2.21. Numim alfabetul calculului cu predicate multimea SP =VI Ú VF Ú VP Ú


SL Ú SA. Am notat cu Ú reuniunea disjuncta; A Ú B are semnificatia reuniunii obisnuite, A ∪ B, cu
conditia ca A, B sa fie multimi disjuncte. Altfel spus, multimile a caror reuniune creeaza SP nu trebuie
sa aiba elemente comune. Aceste multimi au urmatoarele semnificatii:

VI – este o multime infinit numarabila, numita a variabilelor individuale; elementele ei le


numim pe scurt variabile si le notam cu x, y, z, eventual cu indici (x1, x2, …).
VF = VF 0 Ú VF1 Ú . . . Ú VF n - este multimea variabilelor functionale, tot infinit
numarabila.
VF0 - este multimea variabilelor functionale de aritate (grad) 0, pe care le numim si constante
si le notam cu literele c, d, e, . . ., eventual cu indici.
VFn (n > 0) – este multimea variabilelor functionale de aritate n, pe care le notam cu f, g,
h,..., eventual cu indici; aritatea unei variabile functionale exprima numarul de argumente al acesteia.
VP = VP 0 Ú VP1 Ú . . . Ú VP n – este multimea variabilelor predicative (sau a
predicatelor), fiind multime infinit numarabila.
VP0 – este multimea variabilelor predicative de aritate 0, numite si variabile propozitionale
si care sunt notate cu p, q, r, . . ., eventual cu indici.
VPn (n > 0) – este multimea variabilelor predicative de aritate n, pe care le notam cu P, Q,
R, S, . . ., eventual cu indici.
SL – este multimea simbolurilor logice: SL = {7, ∧, ∨, ⇒, ⇔, ∃, ∀}.
SA = {(, , , )} – este multimea simbolurilor auxiliare, continând parantezele si virgula.

Definitia 2.22. Se numeste termen orice cuvânt t ∈ (SP)* ce satisface una din conditiile:

(1) t∈ VI
(2) t∈ VF0
(3) t = f(t1, . . ., tn) unde f ∈ VFn si t1, . . .tn sunt termeni.
Sisteme bazate pe cunostinte 53

Definitia termenului este o definitie inductiva. Notam cu T multimea termenilor.

Exemplul 2.12. Daca f ∈ VF3, g ∈ VF2, c ∈ VF0, x, y ∈ VI, atunci:


t = f(g(x, c), g(g(x, y), y), c) este un termen.

Definitia 2.23. Se numeste formula în calculul cu predicate orice cuvânt A ∈ (SP)* ce


satisface una din conditiile (notam multimea formulelor în calculul cu predicate cu FP):

1) A ∈ VP0
2) A = P(t1, . . ., tn), unde P ∈ VPn (n>0) si t1, t2, . . ., tn ∈ T
3) A = (7B), unde B ∈ FP
4) A = (B # C), unde # ∈{∧, ∨, ⇒, ⇔}, B, C ∈ FP
5) A = (∃ x)B, unde x ∈VI, B ∈ FP
6) A = (∀x)B, unde x ∈VI, B ∈ FP.

Observatia 2.3.

1) În cazul punctelor 5 si 6 din definitia de mai sus formula B se numeste scopul


cuantificatorului ∃, respectiv scopul cuantificatorului ∀. Multimea V a variabilelor propozitionale
folosita în paragraful 2.2 (definitia 2.6) este una si aceeasi cu VP0 din alfabetul calculului cu
predicate, astfel încât are loc incluziunea: VP0 ⊆ Fp ⊆ FP. Aceasta înseamna ca orice formula în
calculul propozitional este formula si în calculul cu predicate; în acest sens vom putea constata cum
calculul cu predicate este o extensie a calculului propozitional si elementele valabile acolo îsi
pastreaza valabilitatea.
2) Conform punctului 2 al definitiei de mai sus argumentele unui predicat pot fi termeni, dar
nu pot fi alte predicate. Aceasta definitie este cea folosita în calculul cu predicate de ordin întâi.

Definitia 2.24. Un predicat este de ordin întâi daca argumentele sale nu sunt predicate. Un
predicat care are cel putin un argument al sau un predicat de ordin întâi este un predicat de ordin doi,
s. a. m. d., un predicat este de ordin n daca macar un argument al sau este un predicat de ordin n –
1. IA se limiteaza cel mai frecvent la cadrul calculului cu predicate de ordin întâi (se folosesc formule
în care apar numai predicate de ordinul întâi), situatie în care rezultatele logicii matematice sunt
eficient utilizabile în IA.

Exemplul 2.13. Daca P, Q ∈ VP2, R ∈ VP1, p ∈ VP0, f ∈ VF2, c ∈ VF0, x, y ∈ VI,


atunci:
54 Bazele logice ale inteligentei artificiale

A1 = (((7P(x, f(x, c))) ∧ p) ∨ ((∃ x) Q(x, y) ⇒ (∀y) R(f(x, y)))) este formula în calculul cu
predicate; se observa cum cuantificatorii se ataseaza variabilelor.

Ca si în calculul propozitional se poate renunta la unele paranteze din reprezentarea unei


formule A, obtinând un cuvânt mai simplu A’, daca se poate reconstitui din A’ formula A în mod
unic, pe baza urmatoarelor reguli:

1) parantezele se reconstituie pentru ∃ ,∀, 7, ∧, ∨, ⇒, ⇔ în aceasta ordine;


2) daca A ∈ FP, x1, . . ., xn ∈ VI atunci cuvântul ∃x1 ∃x2 . . . ∃xn A reprezinta formula:
(∃x1)(∃x2) . . .(∃xn)A, iar ∀x1 ∀x2 . . . ∀xn A reprezinta formula: (∀x1)(∀x2) . . . (∀xn )A;
3) daca A ∈ FP atunci cuvântul 77 . . . 7A reprezinta formula: (7 (7 (. . . (7A)). . .) );
4) daca A1, A2, . . ., An ∈ FP si # ∈{∧, ∨, ⇒, ⇔} atunci cuvântul A1 # A2 #. . . #An
reprezinta formula: (. . . ((A1 # A2) #. . . #An).

Constam extinderea corespunzatoare a regulilor de reconstituire a parantezelor din calculul


propozitional.

Exemplul 2.14. Formula A1 din exemplul anterior se reprezinta simplificat prin:


A1 = 7P(x, f(x, c)) ∧ p ∨ (∃x Q(x, y) ⇒ ∀yR(f(x, y)))
Constatam cum, la fel ca în calculul propozitional, nu putem renunta la toate parantezele; în
exemplul considerat a trebuit sa fie pastrata perechea de paranteze din jurul implicatiei. În continuare
vom lucra cu reprezentarea simplificata a formulelor.

Definitia 2.25. Daca A ∈ FP atunci multimea partilor (subformulelor) lui A, notata prin
π(A) se defineste inductiv astfel :

1. Daca A ∈ VP0 sau A = P(t1, . . ., tn) unde P ∈ VPn si t1, t2, . . ., tn ∈ T, atunci π(A) =
{A};
2. Daca A = 7B sau A =∃xB sau A = ∀xB, unde B ∈ FP si x ∈ VI atunci π(A) = π(B) ∪
{A};
3. Daca A = B # C unde B, C ∈ FP, # ∈ {∧, ∨, ⇒, ⇔} atunci π(A) = π(B) ∪ π(C) ∪
{A}.

Pe baza acestei definitii se formuleaza, la fel ca în calculul propozitional, definitiile pentru


formula compusa, formula atomica, subformula si operatie dominanta a unei formule în calculul cu
predicate.
Sisteme bazate pe cunostinte 55

Definitia 2.26. Fie A ∈ FP si x ∈ VI astfel încât x apare ca simbol în A. Numim intrare a


lui x în A orice aparitie a lui x ca simbol în A. O intrare a lui x în A se numeste intrare legata daca
este îndeplinita una din conditiile:

a) intrarea respectiva este precedata de cuantificatorul ∃ sau ∀;


b) intrarea lui x în A face parte dintr-o subformula a lui A care este scopul cuantificatorului
∃x sau al lui ∀x.

O intrare a lui x în A care nu este legata se numeste intrare libera.


Daca toate intrarile unei variabile x în A sunt legate se spune ca x este variabila legata în
formula A. Daca exista macar o intrare libera a variabilei x în A, atunci x se numeste variabila libera
în formula A.

Exemplul 2.15. Fie P ∈ VP2, Q ∈ VP3, f ∈ VF1, x, y, z ∈ VI si A ∈ FP de forma:


A = ∀x ∃z (P(x, z) ⇒ 7 ∃y Q(x, f(y), z)) ∨ ∀y (P(x, y) ∧ ∃z Q(y, z, f(z)))
În cazul considerat avem x variabila libera în formula A (intrarea lui x în subformula: ∀y
(P(x, y) ∧ ∃z Q(y, z, f(z))) este intrare libera), iar y si z sunt variabile legate în formula A.

Definitia 2.27. Daca x ∈ VI, t ∈ T, A ∈ FP, spunem ca termenul t este liber pentru
variabila x în formula A, daca pentru orice variabila y care apare în t, x nu intra liber într-o parte
(subformula) a lui A de forma ∃yB sau ∀yB.

Exemplul 2.16. Fie formula A = ∃yP(x, y) si termenul t=f(z), unde P∈VP2, f∈VF1, x,y,
z∈VI. Termenul t este liber pentru x în formula A deoarece singura variabila care apare în t este z si
nu exista parti ale lui A de forma ∃zB sau ∀zB. În schimb y nu este liber pentru x în formula A.
Astfel, y considerat ca termen contine variabila y si x intra liber în ∃y P(x, y) care este parte a lui A.
În schimb, f(y) sau y sunt termeni liberi pentru y în A, deoarece y nu intra liber în ∃y P(x, y) care este
parte a lui A, ci intra legat. Anticipând modul de folosire a acestei notiuni în teoria deductiei, ideea
este aceea de a preciza situatii în care termenul t poate substitui variabila x într-o formula. Astfel, t =
f(z) este liber pentru x în formula A si substituind pe x cu t nu denaturam pe A. În schimb, t = y nu
este liber pentru x în A, ceea ce ne arata ca substituind pe x cu t = y denaturam pe A; în adevar,
într-un asemenea caz A devine ∃y P(y, y) ceea ce este o formula închisa (vezi definitia urmatoare),
spre deosebire de formula initiala pentru care x era variabila libera.

Definitia 2.28. Un termen fara variabile individuale se numeste termen de baza (în engleza
”ground term”). O formula care nu contine variabile individuale se numeste formula de baza. O
formula este închisa daca toate variabilele sale sunt legate. Daca A este o formula si x1, x2, . . ., xn
56 Bazele logice ale inteligentei artificiale

sunt toate variabilele ce intra liber în A, atunci ∀x1 ∀x2 . . . ∀xn A se numeste închidere universala
a lui A, iar ∃x1 ∃x2. . . ∃xn A se numeste închidere existentiala a lui A. Evident aceste închideri sunt
formule închise.

Exemplul 2.17. Daca P, Q ∈ VP2, c ∈ VF0, x, y ∈ VI, atunci formula A = P(x, y) ∨


7Q(x, c) nu este formula închisa, în timp ce B = ∀x ∀y (P(x, y) ∨ 7Q(x, c)) este formula închisa -
este închiderea universala a lui A.
Daca f, g ∈ VF2, c, d ∈ VF0, atunci termenul t = f(g(c, d), g(c, c)) este un termen de baza.

2.3.2. Semantica pentru calculul cu predicate

La fel ca în calculul propozitional, pentru fixarea semanticii este necesar sa evaluam


formulele, stabilind valori de adevar pentru acestea. Datorita variabilelor si cuantificatorilor, definitia
evaluarii, numita în calculul cu predicate interpretare, este mai complexa fata de situatia din calculul
propozitional. Astfel, trebuie sa plecam de la o multime de baza - multimea D în definitia urmatoare -
cu rolul universului de discurs.

Definitia 2.29. Fie D o multime nevida si n ∈ N (N este multimea numerelor naturale).


Numim n-D - functie (functie n-ara pe D):

a) orice functie f : Dn → D daca n > 0;


b) un element fixat din D daca n = 0.

Numim n-D - predicat sau predicat pe D:

a) orice functie P : Dn → {adevarat, fals} daca n > 0;


b) o valoare de adevar fixata daca n = 0.

Notam cu F multimea n-D functiilor si cu P multimea n-D predicatelor.

Exemplul 2.18. Daca D = R (R este multimea numerelor reale), f1 : R x R x R → R data


prin f1(x, y, z) = x + y + z este o 3- R functie; numarul real 3,5 este o 0- R functie; P1 : R x R →
{adevarat, fals}, dat prin P1(x, y) = adevarat, daca x = y si P1(x, y) = fals, în caz contrar este un 2-
R predicat.
Sisteme bazate pe cunostinte 57

Definitia 2.30. Fie D ≠ φ un univers de discurs. Se numeste alocare a variabilelor orice


functie Al, Al: VI → D (unei variabile individuale i se pune în corespondenta un element din universul
de discurs). Numim D- interpretare (pe scurt, interpretare) orice functie i, i: VF ∪ VP → F ∪
P, care duce un element u din domeniul de definitie în ui (adica am notat i(u) prin ui) dupa regulile:

1. Daca f ∈ VFn (n ∈ N) atunci fi este o n-D - functie (fi ∈ F, unei variabile functionale de
aritate n îi corespunde, prin interpretarea i, o n-D functie).
2. Daca P∈ VPn (n ∈ N) atunci Pi este un n-D - predicat (Pi ∈ P, unui predicat de aritate n
îi corespunde un n-D – predicat).

O data fixata o alocare a variabilelor si o interpretare putem interpreta (evalua) termenii si


formulele din calculul cu predicate. Situatia este analoaga cu aceea din calculul propozitional, unde
evaluarea formulelor era definita prin extensia functiei de evaluare de la multimea variabilelor
propozitionale la multimea formulelor, pe baza unor reguli de calcul precizate (vezi definitia 2.10). În
mod similar, în calculul cu predicate vom da reguli pentru interpretarea termenilor si apoi a
formulelor. Astfel, tinând seama de toate situatiile posibile privind definitia unui termen, interpretarea
lui t ∈ T, în D- interpretarea i si alocarea variabilelor Al, se calculeaza prin regulile urmatoare.

a. Daca t ∈ VI, atunci ti = Al(t) ∈ D (interpretarea unei variabile este data de alocarea
variabilelor folosita, si va fi un element din universul de discurs);
b. Daca t ∈VF0, adica t = c, atunci ti = ci, ceea ce este un element din D, conform
punctului 1 al definitiei D- interpretarii;
c. Daca t = f(t1, . . ., tn) unde tj ∈ T (j = 1, n) si f ∈ VFn, n > 0, atunci ti = fi(t1i, t2i, . . ., tni),
definitia fiind de tip recursiv, iar fi determinându-se conform punctului 1 al definitiei D-
interpretarii.

Dupa ce am dat interpretarea termenilor, putem interpreta formulele. Daca A ∈ FP, i este o
D– interpretare si Al o alocare a variabilelor, atunci Ai este dat prin:

a. Daca A ∈ VP0, adica A = p, atunci Ai = pi - pi fiind definit conform punctului 2 al


definitiei D- interpretarii;
b. Daca A = P(t1, . . ., tn), unde tj ∈T (j = 1, n) si P ∈ VPn, n > 0, atunci Ai = Pi(t1i, . .
., tni) - Pi fiind definit prin punctul 2 al definitiei D- interpretarii, iar tji conform interpretarii
termenilor;
58 Bazele logice ale inteligentei artificiale

c. Daca A = 7B sau A = B # C, unde B, C ∈ FP, # ∈ {∧, ∨, ⇒, ⇔}, atunci Ai este


determinat în functie de Bi si Ci conform tabelelor:

Tabelul 2.3. Tabelul 2.4.


B i
(7B) i
Bi Ci (B ∧ C)i (B ∨ C)i (B ⇒ C)i (B ⇔ C)i
a f a a a a a a
f a a f f a f f
f a f a a f
f f f f a a

d. Daca A = ∃x B, unde x ∈ VI si B ∈ FP, atunci Ai = adevarat, daca exista d ∈ D astfel


încât Bi = adevarat pentru orice alocare a variabilelor Al, care satisface conditia Al(x) = d, si
fals în caz contrar.
e. Daca A = ∀x B, unde x ∈ VI si B ∈ FP, atunci Ai = adevarat, daca pentru orice d ∈ D,
Bi = adevarat pentru orice alocare a variabilelor Al, care satisface conditia Al(x) = d, si fals
în caz contrar.

Interpretarea formulelor în calculul cu predicate a fost stabilita tot inductiv, ca si evaluarea în


calculul propozitional. Putem observa ca pentru a putea calcula valoarea unei interpretari pentru o
formula trebuie sa cunoastem valorile interpretarii pentru toate variabilele functionale si predicative
care apar în formula si, numai în anumite situatii, sa cunoastem alocarea variabilelor. Conform
cazurilor d si e de mai sus, rezulta ca în situatia în care apare un cuantificator, nu conteaza alocarea
variabilelor pentru variabila cuantificata, ci conteaza felul în care elementele universului de discurs fac
sau nu adevarata formula care este scopul cuantificatorului, atunci când aceste elemente se substituie
variabilei cuantificate; de altfel, aceasta este în concordanta cu definitia generala (definitia 2.5) cu
privire la formarea de enunturi în care sa apara cuantificatorii.

Exemplul 2.19. Fie P ∈ VP2, f ∈ VF2, c ∈ VF0, x, y ∈ VI si A ∈ FP,


A = ∀x ∃ y (P(f(x, y), f(y, x)) ∧ P(f(x, y), c))

Construim urmatoarea interpretare, notata cu i:


D = R * (multimea numerelor reale, mai putin 0), Pi : R * x R * → {adevarat, fals}, Pi(u,v) =
adevarat daca u = v si fals în caz contrar; fi : R * x R * → R *, fi (u,v) = u ⋅ v; ci = 1. O data ce am
stabilit valorile lui i pentru P, f si c putem calcula interpretarea formulei A (deocamdata nu facem nici
o specificare asupra alocarii variabilelor Al în care lucram).
Sisteme bazate pe cunostinte 59

Conform punctului e din explicatia cu privire la interpretarea formulelor, Ai = adevarat daca


pentru orice numar a, a ∈ R *, Bi = adevarat, pentru orice alocare a variabilelor Al care satisface
conditia Al(x) = a, unde B este subformula lui A, anume B = ∃ y (P(f(x, y), f(y, x)) ∧ P(f(x, y), c)).
Folosind punctul d al explicatiei interpretarii formulelor în calculul cu predicate, rezulta Bi =
adevarat, daca exista un numar b, b ∈ R * astfel încât Ci = adevarat, pentru orice alocare a
variabilelor Al care satisface conditia Al(y) = b, iar C este subformula lui B, C = P(f(x, y), f(y, x)) ∧
P(f(x, y), c).
În continuare cercetam situatia în care Ci = adevarat. Deoarece C este o conjunctie de doua
subformule, dupa tab. 2.4, Ci = adevarat daca [P(f(x, y), f(y, x))]i = adevarat si [P(f(x, y), c)]i =
adevarat. Pentru prima conditie, tinând seama de felul în care a fost definita interpretarea i pentru P si
f, ca si de conditiile pe care le satisface alocarea variabilelor Al, rezulta: [f(x, y)]i = [f(y, x)]i, de unde
deducem fi(xi, yi) = fi(yi, xi), respectiv a ⋅ b = b ⋅ a. Pentru a doua conditie procedam în mod similar
si tinând seama si de definitia interpretarii i pentru c, obtinem: [f(x, y)]i = ci, de unde rezulta fi(xi, yi) =
ci, respectiv a ⋅ b = 1. Reluând si începutul interpretarii pentru formula A, concluzia este ca Ai =
adevarat daca pentru orice numar a ∈ R *, exista un numar b ∈ R *, astfel încât sa aiba loc: a ⋅ b = b ⋅
a si a ⋅ b = 1. Altfel spus, formula A este în interpretarea i adevarata, daca în multimea R * exista
simetricul unui element oarecare pentru operatia de înmultire. Aceasta este una din interpretarile
posibile pentru A; schimbând pe i formula va capata o alta interpretare.

Observatia 2.4. Acest exemplu sustine remarca facuta mai sus, asupra felului în care a
intervenit alocarea variabilelor în interpretarea unei formulei în care apar cuantificatori. Ideea
respectiva poate fi generalizata: este usor de demonstrat ca putem calcula interpretarea unei formule
fara sa fixam o alocare a variabilelor, ori de câte ori avea de-a face cu o formula care nu contine
variabile libere, adica este o formula de baza sau o formula închisa. În schimb, daca luam în
considerare formula A = P(x, y), unde P ∈ VP2, x, y ∈ VI (A contine variabile libere) si folosim
aceeasi interpretare i din exemplul 2.19, constatam ca nu putem preciza Ai atâta timp cât nu stim
alocarea variabilelor pentru x si y. În adevar, pentru a determina Ai trebuie sa calculam xi si yi, si,
conform felului în care se interpreteaza termenii, xi = Al(x), yi =Al(y).

La fel ca în calculul propozitional ne va interesa sa gasim formulele care îsi pastreaza


caracterul de a fi adevarate, independent de interpretarea utilizata. În acest sens folosim urmatoarele
definitii.

Definitia 2.31. O formula A se numeste valida în interpretarea i (sau pe scurt i - valida)


daca pentru orice alocare a variabilelor are loc Ai = adevarat; formula A se numeste falsa în
interpretarea i (sau i - falsa) daca pentru orice alocare a variabilelor are loc Ai = fals. Formula A
60 Bazele logice ale inteligentei artificiale

FP este realizabila (satisfiabila) în


interpretarea i daca exista macar o
Formule valide alocare a variabilelor astfel încât Ai =
adevarat.

Formule false
De îndata ce o interpretare i
Formule
realizabile este fixata, multimea FP va fi împartita
în mai multe submultimi, conform fig.
Fig. 2.2. Împartirea multimii formulelor FP din
2.2. Daca am considera din FP
calculul cu predicate fata de o D – interpretare fixata
multimea formulelor închise, sau
multimea formulelor de baza, atunci, tinând seama de definitia interpretarii si de observatia 2.4, orice
interpretare ar partitiona aceste doua multimi de formule în doua submultimi: aceea a formulelor
valide si respectiv a formulelor false în interpretarea respectiva.

Definitia 2.32. O formula este realizabila daca este realizabila cel putin într-o interpretare;
în caz contrar, formula este nerealizabila (nesatisfiabila), ceea ce înseamna ca este falsa în orice
interpretare. O formula este tautologie daca este valida în orice interpretare.
Pentru tautologii se foloseste aceeasi notatie ca în calculul propozitional: daca A este
tautologie, atunci se noteaza |=A. Si pentru formulele din calculul cu predicate are loc o împartire
similara cu aceea din fig. 2.1, unde contradictiile sunt formulele nerealizabile; de asemenea, teoremele
2.2 si 2.3, ca si definitia 2.13 privind multimile de formule realizabile si nerealizabile din calculul
propozitional (vezi 2.2.2, unde în locul evaluarii din calculul propozitional vom avea în calculul cu
predicate interpretarea) sunt valabile si în calculul cu predicate. Astfel, conform celor mentionate si
anterior, calculul cu predicate este o extensie a celui propozitional si în acest sens orice formula A ∈
Fp care este tautologie, este tautologie si în calculul cu predicate.

Deosebirea fata de calculul propozitional apare în ceea ce priveste problema deciziei. În


logica matematica aceasta se refera la gasirea unei proceduri prin care sa se dea raspunsul (sub
forma ”Da” sau ”Nu”) la întrebarea privind caracterul de tautologie al unei formule. Daca în calculul
propozitional problema deciziei îsi gaseste solutie (de exemplu, vezi algoritmul din paragraful 2.2.2),
în calculul cu predicate problema deciziei nu este decidabila (rezolvabila algoritmic): nu se poate gasi
un algoritm care primind la intrare o formula sa gaseasca întotdeauna, în timp finit, raspunsul Da/Nu,
dupa cum aceasta este sau nu tautologie. (D. Hilbert, în 1928, a formulat problema deciziei în logica
matematica, iar în 1936 A. Church a aratat ca problema deciziei nu este decidabila). În prezent, se
stie ca problema deciziei este partial decidabila algoritmic (semidecidabila), adica se poate construi
un algoritm cu urmatoarea comportare: daca algoritmul primeste la intrare o formula care este
Sisteme bazate pe cunostinte 61

tautologie atunci algoritmul va da, într-un numar finit de pasi, raspunsul Da; în schimb, în cazul în care
formula de intrare nu este tautologie este posibil ca algoritmul sa nu se opreasca.

La fel ca în calculul propozitional, în calculul cu predicate exista o infinitate de tautologii.


Unele din acestea provin din tautologiile din calculul propozitional, luate ca atare, sau transformate în
conformitate cu urmatoarea teorema.

Teorema 2.11. Fie A o formula în calculul propozitional (A ∈ Fp), iar p1, . . ., pn variabile
propozitionale ce apar în A. Daca A este tautologie, atunci orice formula obtinuta din A prin
substitutia simultana a variabilelor p1, . . ., pn cu formulele oarecare B1, . . ., Bn din calculul cu
predicate (Bi ∈ FP) este tautologie.
Demonstratia este imediata, fiind analoga demonstratiei teoremei 2.5 din calculul
propozitional.

Exemplul 2.20. Daca p, q ∈ VP0, A = p ⇒ (q ⇒ p) este tautologie în calculul


propozitional. Substituim p ↔ ∃x∀y P(x, y) ∧ p si q ↔ ∀y P(x, y). Obtinem formula:

A’ = ∃x∀y P(x, y) ∧ p ⇒ (∀y P(x, y) ⇒ ∃x∀y P(x, y) ∧ p) si are loc |= A’.

Teorema 2.12. Fie A ∈ FP si A1 formula ce se obtine din A substituind o intrare a unei


subformule B a lui A cu formula B1 (B1 ∈ FP). Daca |= B ⇔ B1, atunci are loc |= A ⇔ A1.
Demonstratia se poate face prin inductie matematica, dupa numarul de subformule al formulei
A.

Observatia 2.5. Ca si în calculul propozitional, daca |= A ⇔ B, atunci formulele A si B se


numesc formule echivalente.

Teorema 2.13. Daca x, y ∈ VI, y nu intra în A, A ∈ FP atunci au loc urmatoarele tautologii:

|= ∃x A ⇔ ∃y A(x|y) si |= ∀x A ⇔ ∀y A(x|y), unde am notat cu A(x|y) formula care se


obtine din A substituind toate intrarile variabilei x cu variabila y.
Demonstratia se face tinând seama de definitia interpretarii.
Observatia 2.6. Pe baza teoremei 2.13 rezulta ca se poate aduce orice formula la o forma
echivalenta cu ea, în care toate intrarile unei aceleiasi variabile sa fie ori libere, ori legate; în acest
sens vom substitui variabilele care intra si liber si legat, acolo unde intra legat cu alte noi variabile.
62 Bazele logice ale inteligentei artificiale

În calculul propozitional am dat o lista de tautologii de baza (teorema 2.6); conform celor
mentionate, toate ramân valabile si în calculul cu predicate. Exista si o serie de tautologii specifice
pentru calculul cu predicate, prin aceea ca se refera la formule în care apar variabile si cuantificatori.
O parte din acestea sunt date prin urmatoarea teorema.

Teorema 2.14. Daca x, y ∈ VI, A, B ∈ FP atunci au loc:

1) |= 7 ∃x A ⇔ ∀x 7A
2) |= 7 ∀x A ⇔ ∃x 7A
3) |= ∀x A ∧ ∀x B ⇔ ∀x (A ∧ B)
4) |= ∃x A ∨ ∃x B ⇔ ∃x (A ∨ B)
5) |= ∀x ∀y A ⇔ ∀y ∀x A
6) |= ∃x ∃y A ⇔ ∃y ∃x A

Demonstram prima din aceste tautologii. Conform tab. 2.4, pentru a arata ca este tautologie
o formula care are drept operatie dominanta echivalenta, trebuie sa demonstram ca subformulele
care sunt legate prin echivalenta iau aceeasi valoare de adevar, în orice interpretare. Astfel, sa
presupunem ca i este o D – interpretare oarecare, astfel încât (7 ∃x A)i = adevarat. Tinând seama
de semnificatia negatiei rezulta (∃x A)i = fals. Conform interpretarii cuantificatorului ∃ înseamna ca
nu exista nici un element d ∈ D, astfel încât folosind o alocare oarecare Al, care sa respecte conditia
Al(x) = d, sa avem Ai = adevarat. Aceasta înseamna ca oricare ar fi d ∈ D si alocarea variabilelor
care determina Al(x) = d, vom avea Ai = fals, ceea ce este echivalent (conform interpretarii
negatiei) cu (7A)i = adevarat. Adica, oricare ar fi un element d ∈ D avem (7A)i = adevarat pentru
orice alocare a variabilelor care satisface Al(x) = d. Aceasta înseamna ca (∀x 7A)i = adevarat.
Lasam ca exercitiu demonstrarea faptului ca daca (7 ∃x A)i = fals atunci si (∀x 7A)i = fals, cât si
demonstrarea celorlalte tautologii.

Observatia 2.7. Tautologiile 1 – 4 prezentate mai sus au importanta în IA pentru


demonstrarea automata a teoremelor, si anume pentru faza de pregatire a formulelor înainte de
aplicarea procedurii de demonstrare (vezi paragraful 2.4). Este de notat forma tautologiilor 3 si 4 si
faptul ca urmatoarele doua formule nu sunt tautologii:

|? ∀x (A ∨ B) ⇔ ∀x A ∨ ∀x B
|? ∃x (A ∧ B) ⇔ ∃x A ∧ ∃x B
Sisteme bazate pe cunostinte 63

Astfel, pentru prima dintre ele se poate construi urmatorul contraexemplu, în care aratam ca
nu este tautologie implicatia: L = ∀x (A(x) ∨ B(x)) ⇒ ∀x A(x) ∨ ∀x B(x) (conform tautologiei de
baza 10 din paragraful 2.2.2, teorema 2.6, pentru a fi tautologie o formula la care operatia dominanta
este echivalenta trebuie sa fie tautologii cele doua implicatii corespunzatoare). Fie urmatoarea
interpretare i: D = N (multimea numerelor naturale), Ai: N → {adevarat, fals}, Ai(u) = adevarat,
daca u este numar par si fals în caz contrar; Bi: N → {adevarat, fals}, Bi(u) = adevarat, daca u este
numar impar si fals în caz contrar. În aceasta interpretare avem [∀x (A(x) ∨ B(x))]i = adevarat
(oricare ar fi un numar natural, acesta este sau par sau impar) si [∀x A(x) ∨ ∀x B(x)]i = fals (nu
toate numerele naturale sunt pare si nici impare). Conform interpretarii unei implicatii rezulta ca Li =
fals. Se poate construi un contraexemplu si pentru a doua formula de mai sus.

Daca formulele din observatia anterioara (în care operatia dominanta este echivalenta) nu
sunt tautologii, în schimb sunt tautologii o serie de formule la care operatia dominanta este implicatia.

Teorema 2.15. Daca x ∈ VI, A, B ∈ FP atunci au loc:

1) |= ∃x ∀y A ⇒ ∀y ∃x A
2) |= ∃x (A ∧ B) ⇒ ∃xA ∧ ∃xB
3) |= ∀x A ∨ ∀x B ⇒ ∀x (A ∨ B)
4) |= ∀x (A ⇒ B) ⇒ (∀x A ⇒ ∀x B)
5) |= ∀x (A ⇒ B) ⇒ (∃x A ⇒ ∃x B)
6) |= ∀x (A ⇔ B) ⇒ (∀x A ⇔ ∀x B)
7) |= ∀x (A ⇔ B) ⇒ (∃x A ⇔ ∃x B)

Demonstram prima dintre tautologii. Fie i o D – interpretare oarecare. Dupa tab. 2.4, cazul
care trebuie studiat este cel în care (∃x ∀y A(x, y))i = adevarat, trebuind sa demonstram ca are loc
(∀y ∃x A(x, y))i = adevarat. Conform interpretarii formulelor în calculul cu predicate, din (∃x∀yA(x,
y))i = adevarat, rezulta ca exista un element a ∈ D, astfel încât (∀y A(x, y))i = adevarat, cu
conditia ca alocarea variabilelor folosita sa satisfaca Al(x) = a. Tinând seama de interpretarea
cuantificatorului ∀, înseamna ca oricare ar fi b ∈ D, (A(x, y))i = adevarat, cu conditia ca Al(y) = b.
Atunci putem spune ca are loc (∃x A(x, y))i = adevarat, deoarece exista elementul a ∈ D astfel încât
(A(x, y))i = adevarat, cu conditia Al(x) = a, si fara vreo restrictie asupra lui Al(y), deoarece (A(x,
y))i = adevarat, oricum am aloca pe y cu un element din D. Aceasta înseamna ca oricare ar fi b
∈ D, (∃x A(x, y))i = adevarat, cu Al(y) = b, adica (∀y ∃x A(x, y))i = adevarat.
64 Bazele logice ale inteligentei artificiale

Observatia 2.8. Pentru a întelege mai bine felul în care se interpreteaza cuantificatorii este util
sa cercetam caracterul de tautologie al implicatiei inverse fata de 1) din teorema de mai sus, adica sa
vedem daca este tautologie formula: ∀y ∃x A(x, y) ⇒ ∃x ∀y A(x, y). Ar trebui sa putem demonstra
ca oricare ar fi i o D – interpretare, daca (∀y ∃x A(x, y))i = adevarat, atunci are loc si (∃x ∀y A(x,
y))i = adevarat. Din ipoteza în care lucram rezulta ca oricare ar fi a ∈ D, (∃x A(x, y))i = adevarat,
pentru o alocare a variabilelor care satisface Al(y) = a. Tinând seama de interpretarea
cuantificatorului ∃, înseamna ca exista un b ∈ D, astfel încât (A(x, y))i = adevarat, de îndata ce Al(x)
= b. În continuare ar trebui sa putem arata ca (∀y A(x, y))i = adevarat. Aceasta ar presupune ca
oricare ar fi un element a ∈ D, sa avem (A(x, y))i = adevarat, pentru o alocare a variabilelor care
satisface numai conditia Al(y) = a. Dar acest lucru nu poate fi dedus; ceea ce am dedus presupune si
restrictia ca Al(x) = b. Faptul ca formula cercetata nu este tautologie se poate demonstra si printr-un
contraexemplu.

Mai exista în calculul cu predicate o serie de tautologii care presupun anumite restrictii asupra
variabilelor care apar în formulele în cauza; o parte din acestea sunt date de teorema urmatoare.

Teorema 2.16. Daca x ∈ VI, A, B ∈ FP si x nu intra libera în B, K ∈ {∀, ∃}, si α ∈ {∧,


∨} atunci are loc:

|= Kx A(x) α B ⇔ Kx (A(x) α B)

Demonstratia se face tinând seama de interpretarea formulelor în calculul cu predicate,


analog cu cazul teoremei 2.14. Este de notat ca teorema ne da un numar de 4 tautologii, dupa
diferitele instantieri ale cuantificatorului K si operatiei logice α. Si aceasta teorema are importanta
pentru demonstrarea automata a teoremelor.

2.3.3. Elemente de teoria deductiei în calculul cu predicate

Calculul cu predicate este o extensie a celui propozitional si în ceea ce priveste teoria


deductiei. Astfel, definitiile cu privire la consecinta logica, regula de deductie si deductia, date în
paragraful 2.2.3, sunt valabile si în calculul cu predicate, cu actualizarile necesare. Acestea se refera
la înlocuirea notiunii de evaluare cu interpretarea si alocarea variabilelor. De exemplu, definitia
consecintei logice în calculul cu predicate este:
Definitia 2.33. Daca I ⊆ FP este o multime de formule în calculul cu predicate si A ∈ FP,
spunem ca formula A este o consecinta logica din multimea de ipoteze I, daca oricare ar fi i o D –
Sisteme bazate pe cunostinte 65

interpretare si Al o alocare a variabilelor, care determina ca Bi = adevarat, oricare ar fi B, B ∈ I,


atunci i si Al determina si Ai = adevarat.
De asemenea toate notatiile din teoria deductiei în calculul propozitional sunt folosite si în
calculul cu predicate.

În calculul cu predicate apar noi reguli de deductie, specifice. Câteva exemple în acest sens
sunt date de urmatoarea teorema.

Teorema 2.17. Daca x ∈ VI, t ∈ T, A, B ∈ FP atunci au loc urmatoarele reguli de


deductie:

1) ∀x(A ⇒ B), ∀xA |= ∀xB


2) ∀x(A ⇒ B), ∃xA |= ∃xB
3) ∀x(A ⇔ B), ∀xA |= ∀xB
4) ∀x(A ⇔ B), ∃xA |= ∃xB
5) ∀xA |= A(x|t) cu conditia ca t sa fie liber pentru x în formula A (ca si anterior, am notat
cu A(x|t) formula care se obtine din A substituind pe x cu t)
6) ∃xA |= A(x|f(y1, . . ., yn)) unde y1, . . ., yn sunt toate variabilele libere în formula A, iar
f ∈ VFn este o variabila functionala noua, adica una care nu apare în A (daca A nu
contine variabile libere atunci f ∈ VF0).

Demonstratia se face tinând seama de observatia 2.2, punctul 4, prin care o regula de
deductie este echivalata cu o tautologie si de interpretarea formulelor în calculul cu predicate.

Nerespectarea restrictiilor impuse la punctele 5 si 6 ale teoremei de mai sus conduce la


rezultate incorecte. De exemplu, considerând formula A = ∀x∃yP(x, y), termenul t = y nu este liber
pentru x în formula A. Daca aplicam în aceste conditii punctul 5 al teoremei 2.17, ar însemna ca din
A rezulta ca o consecinta logica B = ∃yP(y, y). Dar, de exemplu interpretarea i, pentru care D = N,
(P(x, y))i = adevarat daca x < y, este în situatia în care Ai = adevarat (oricare ar fi x un numar
natural, exista un numar natural y care satisface conditia x < y). În schimb Bi = fals (nu exista nici un
numar natural y care sa satisfaca relatia y < y) si deci nu are loc A |= B. Greseala provine din aceea
ca termenul t = y nu este liber pentru x în A si deci teorema 2.17 nu poate fi aplicata.

Ceea ce se modifica în calculul cu predicate este si sistemul formal. Astfel, în ceea ce


priveste sistemul de axiome se pastreaza cele trei axiome (A1) – (A3), precizate în calculul
propozitional, în care formulele A, B, C pot fi formule oarecare din calculul cu predicate, la care se
66 Bazele logice ale inteligentei artificiale

mai adauga alte doua axiome, specifice pentru FP. Acestea sunt necesare pentru a pastra caracterul
de completitudine si corectitudine al sistemului formal (vezi teorema 2.9) si au urmatoarea forma:

(A4) A ⇒ ∀x A, unde A ∈ FP, x ∈ VI si x nu apare libera în A.


(A5) ∀x A ⇒ A(x|t), unde A ∈ FP, x ∈ VI, t ∈ T si este respectata conditia ca t sa fie liber
pentru x în formula A.

La fel ca si celelalte trei axiome, cele doua de mai sus trebuie privite ca scheme de axiome;
ele pot fi folosite oricum am substitui pe A cu formule din FP. Se remarca absenta cuantificatorului ∃
în sistemul de axiome (A1) – (A5); explicatia este aceea ca ∃ poate fi exprimat cu ajutorul lui ∀. În
adevar, este usor de demonstrat tautologia |= ∃xA ⇔ 7 ∀x 7A pe baza tautologiilor date de
teorema2.14, punctul 2) si teorema 2.6 punctul 3).

Ca si în sistemul formal al calculului propozitional, în calculul cu predicate este suficienta


regula de deductie modus ponens. Se poate însa remarca faptul ca axioma (A5) este o rescriere a
regulii de deductie 5) din teorema 2.17. Aceasta înseamna ca am putea folosi un sistem formal al
calculului cu predicate în care sa renuntam la (A5) si sa admitem ca regula de deductie, pe lânga
modus ponens, si regula 5) din teorema 2.17.

Si în calculul cu predicate sunt folosite notiunile de demonstratie, teorema si deductie în


sistemul formal, cu acelasi înteles ca în calculul propozitional (definitiile 2.19 si 2.20); de asemenea,
este valabila teorema deductiei (teorema 2.10). Axiomele (A1) – (A5) formeaza un set minimal care
asigura corectitudinea si completitudinea sistemului formal, adica si aici are loc teorema 2.9. A
efectua deductii dintr-o multime L de ipoteze (vezi definitia 2.20), în sistemul formal astfel creat, ceea
ce este adesea sarcina unui SBC, este o chestiune ce poate fi simplificata prin introducerea de noi
axiome (renuntam la minimalitatea setului de axiome pentru eficienta sistemului) sau de noi ipoteze
(acestea vor fi de obicei faptele initiale din baza de fapte).
Ca deosebire fata de calculul propozitional, daca un SBC lucreaza dupa sistemul formal al
calculului cu predicate, sunt clare complicatiile care pot apare datorita faptului ca acesta este
semidecidabil: daca sistemul încearca sa verifice validitatea (caracterul de tautologie) pentru o
formula, prin construirea unei deductii, se poate întâmpla ca procedura respectiva sa fie infinita.
Sisteme bazate pe cunostinte 67

2.4. Demonstrarea automata a teoremelor

În IA s-au dezvoltat mai multe metode de efectuare a rationamentelor. Cea care


depinde direct de partea de logica matematica, ramânând într-un cadru formal riguros, este
demonstrarea automata a teoremelor (fundamentata de Robinson, în 1965); datorita acestei
legaturi s-a preferat prezentarea metodei în cadrul acestui capitol.

Definitia 2.34. Daca L ∈ FP , L se numeste literal daca este o formula atomica sau
negatia unei formule atomice. Daca A este formula atomica, atunci L1 = A se numeste literal
pozitiv, iar L2 = 7A se numeste literal negativ.

Definitia 2.35. O formula C ∈ FP se numeste clauza daca este de forma:

C = ∀x1 ∀x2 . . . ∀xm (L1 ∨ L2 ∨ . . . ∨ Ln ),

unde n≥ 0, L1 , . . ., Ln sunt literali, iar x1 , x2 , . . ., xm sunt toate variabilele care apar în L1 , L2 ,


. . ., Ln . Prin conventie, pentru n = 0 clauza C se numeste clauza vida (fara nici un literal).
Clauza vida se noteaza cu , ea având un rol ajutator în demonstrarea automata a teoremelor.
Clauza vida trebuie privita ca o formula nerealizabila.

Definitia 2.36. O formula C ∈ FP este în forma clauzala daca este o conjunctie de


clauze.

Observatia 2.9. Tinând seama de forma unei clauze (este o formula închisa) si de
teorema 2.16 care ne permite în anumite conditii sa scoatem cuantificatorii în fata unei
conjunctii, rezulta ca o formula A care este în forma clauzala se va putea scrie întotdeauna ca:

A = ∀x1 ∀x2 . . . ∀xn (C 1 ∧ C2 . . . ∧ Ck ),

unde C1 , . . ., Ck sunt disjunctiile de literali corespunzatoare clauzelor ce formeaza pe A, iar


x1 , x2 , . . ., xn ∈ VI sunt toate variabilele ce intra liber în C1 , . . ., Ck . Vom prefera aceasta
forma a lui A, care este o forma normala prenex; practic aducerea la forma normala prenex va
presupune scoaterea în fa ta formulei a tuturor cuantificatorilor, aspect discutat ulterior.

Exemplul 2.21. Daca p, q, r ∈ VP0 , despre formulele A, B, C, D ∈ Fp se poate spune:


A = p – este un literal pozitiv; B = 7q – este un literal negativ;
C = p ∨ 7q – este o clauza; D = (p ∨ 7q) ∧ (7p ∨ 7q ∨ r) – este o formula în forma
clauzala.
68 Bazele logice ale inteligentei artificiale

Exemplul 2.22. Daca Q ∈ VP1 , P, S ∈ VP2 , R ∈ VP3 , f ∈ VF1 , x, y, z ∈ VI, despre


formulele A, B, C, D ∈ FP se poate spune:

A = P(x, y) – este un literal pozitiv; B = 7Q(f(y)) – este un literal negativ;


C = ∀x∀y∀z (P(x, y) ∨ 7Q(f(y)) ∨ R(x, y, z)) – este o clauza; D = ∀x∀y 7S(f(x), y) –
este o clauza;
E = ∀x∀y∀z(P(x, y) ∨ 7Q(f(y)) ∨ R(x, y, z)) ∧ ∀x∀y 7S(f(x), y) – este o formula în
forma clauzala, formata din cele doua clauze C, D. Tinând seama de faptul ca variabilele x, y,
z au numai intrari legate, aplicând teorema 2.16 putem rescrie pe E în forma normala prenex,
adica E = ∀x∀y∀z((P(x, y) ∨ 7Q(f(y)) ∨ R(x, y, z)) ∧ 7S(f(x), y) ).

Observatia 2.10. Uneori vom nota un literal cu eL, pentru a putea apoi nota cu eL
negatul lui eL; acesta înseamna ca daca, de exemplu, eL = P(x, y), atunci eL = 7P(x, y), iar
daca eL = 7P(x, y), atunci eL = P(x, y).

Din punct de vedere al teoriei deductiei, demonstrarea automata a teoremelor foloseste


o regula de deductie diferita de modus ponens, regula care se numeste rezolutie si care se va
aplica formulelor în forma clauzala. Aceasta provine din tautologia 19 a teoremei 2.6. În
adevar, tautologia respectiva se poate rescrie, conform observatiei 2.2 punctul 4, ca o regula
de deductie:

A ∨ B, 7B ∨ C |= A ∨ C,

unde A, B, C pot fi formule oarecare din calculul cu predicate. Daca ne limitam la cazul
calculului propozitional si consideram pe A, B, C ca fiind literali, atunci constatam ca atât
ipotezele cât si concluzia în regula de deductie de mai sus sunt clauze. În plus, regula poate fi
generalizata pentru situatia în care ipotezele contin mai multi literali, în forma data prin
urmatoarea definitie.

Definitia 2.37. Daca A1 , A2 , . . ., An1 , C1 , C2 , . . ., Cn2 , B sunt literali în calculul


propozitional, n1 , n2 fiind numere naturale, atunci regula de deductie:

A1 ∨ A2 ∨ . . . ∨ An1 ∨ B, 7B ∨ C1 ∨ C2 ∨ . . . ∨ Cn2 |= A1 ∨ A2 . . . ∨ An1 ∨ C1 ∨ C2 . . . ∨ Cn2

se numeste rezolutie; concluzia rezolutiei se nume ste clauza rezolventa (pe scurt rezolventa) a
clauzelor ce sunt ipoteze.

Se observa ideea acestei reguli de deductie: se folosesc drept ipoteze doua clauze care
se bucura de proprietatea ca un acelasi literal apare în ele, în una ca literal pozitiv, iar în a
Sisteme bazate pe cunostinte 69

doua ca literal negativ, concluzia obtinându-se din disjunctia tuturor literalilor din cele doua
clauze, mai putin cei doi mentionati (se spune ca literalul pozitiv dintr-o clauza se anihileaza
cu cel negativ corespunzator, din a doua clauza). Regula de deductie respectiva este aplicabila
si în cazul în care n1 si/sau n2 sunt nule. O situatie particulara, care va fi exploatata în
demonstrarea automata a teoremelor, este aceea în care n1 = n2 = 0. În acest caz regula de
deductie folosita este B, 7B |= , adica printr-o rezolutie obtinem clauza vida daca clauzele
ipoteze sunt contradictorii, ceea ce înseamna ca ele ar corespunde formulei B ∧ 7B, care este
în forma clauzala si este nerealizabila (în acest sens trebuie privita ca o formula
nerealizabila).

Deoarece în demonstrarea automata a teoremelor obiectul de studiu îl constituie numai


formulele în forma clauzala, se pot face o serie de simplificari de notatie. Astfel, în locul
formulei A = ∀x1 ∀x2 . . .∀xn (C 1 ∧ C2 . . . ∧ Ck ), vom putea lucra cu multimea SA = {C 1 , . . .,
Ck }, stiind ca în fata subformulelor ce compun prin conjunctie pe A trebuie sa apara,
cuantificate cu ∀, toate variabilele din aceasta. La rândul ei, fiecare clauza C = ∀x1 ∀x2 . . .
∀xm (L1 ∨ . . . ∨ Lr) va fi tratata în continuare ca o multime de literali Ci = {L1 , . . ., Lr}.
Aceasta abordare, adica faptul ca ordinea clauzelor în formula si ordinea literalilor în clauza
nu sunt tinute în evidenta, nu are consecinte, din cauza comutativitatii operatiilor de
conjunctie si disjunctie. În continuare vom lucra cu multimi de clauze si multimi de literali, în
locul formulelor în forma clauzala, respectiv în locul clauzelor.
Tinând seama de echivalarea precizata mai sus, putem reformula definitia 2.37
folosind multimi si operatii cu acestea.

Definitia 2.38. Fie C1 , C2 doua clauze în calculul propozitional (C 1 , C2 ∈ Fp ). Daca


literalul eL satisface conditia: eL ∈ C1 si eL ∈ C2 , atunci clauza rezolventa a lui C1 , si C2 ,
care se noteaza Rez(C 1 , C2 ), este Rez(C 1 , C2 ) = (C1 – eL) ∪ (C 2 – eL).
În definitia de mai sus operatia “ – ” este diferenta a doua multimi.

Teorema 2. 18. Daca C = rez(C 1 , C2 ), atunci C1 , C2 |= C.


Demonstratia este imediata, conform definitiei 2.37.

Exemplul 2.23. Fie p, q, r ∈ VP0 . C1 = {7p, q, r}, C2 = {7q, r} doua clauze.


Rez(C 1 , C2 ) = {7p, r}. Revenind la notatia de formule, am avea: 7p ∨ q ∨ r, 7q ∨ r |= 7p ∨ r.

Daca dorim sa folosim rezolutia în calculul cu predicate, atunci o problema


suplimentara este creata de situatia în care argumentele literalilor care trebuie sa se anihileze
nu coincid (de exemplu, L = P(x, y), iar 7L = 7P(z, w)). Pentru rezolvarea acestei situatii,
Robinson a formulat un algoritm de unificare. Acesta pleaca de la notiunea de substitutie.
70 Bazele logice ale inteligentei artificiale

Definitia 2.39. Se numeste substitutie o multime de forma:

α = {x1 |t1 , . . ., xn |tn },

unde x1 , . . ., xn ∈ VI, iar t1 , . . ., tn ∈ T, cu respectarea conditiilor ca xi sa nu apara în


tj, oricare ar fi i, j ∈ {1, . . ., n}, si xi ≠ xj, oricare ar fi i, j ∈ {1, . . ., n}.

Daca A ∈ FP si α este substitutia din definitia de mai sus, atunci Aα = A(x1 |t1 , . . .,
xn |tn ), adica este formula A în care înlocuim: toate intrarile variabilei x1 cu termenul t1 ,
s.a.m.d., toate intrarile variabilei xn cu termenul tn .

Definitia 2.40. Fie M = {L1 , . . . , Lk }, k ≥ 2 o multime de literali pozitivi ce încep cu


aceeasi variabila predicativa. Se numeste unificator pentru multimea M, o substitutie α care
îndeplineste conditia: L1 α = L2 α = . . . = Lk α. Daca exista un unificator pentru M, atunci
rezultatul unificarii se numeste factor.

Exemplul 2.24. Fie P ∈ VP3 , f ∈ VF2 , c ∈ VF0 , x, y, z, w ∈ VI si L1 , L2 urmatorii


literali:

L1 = P(x, f(x, y), c), L2 = P(f(z, c), w, y)

Daca M = {L1 , L2 } urmatoarea substitutie este unificator pentru M:

α = {x|f(z, c), w|f(f(z, c), c), y|c}, iar factorul este F = P(f(z, c), f(f(z, c), c), c).

Robinson a gasit un algoritm de unificare. Acesta primeste la intrare multimea M


= {L1 , . . . , Lk } de literali pozitivi ce încep cu aceeasi variabila predicativa si determina la
iesire raspunsul DA, unificatorul α si factorul F în cazul în care acestia exista pentru multimea
M, si respectiv raspunsul NU, în caz contrar. Scris într-o forma de tip pseudo-cod, algoritmul
de unificare este:

begin
α: = { } ; initial substitutia este multimea vida
unif: = DN ; unif este un flag, initializat cu o valoare diferita de DA si NU
while (unif = DN) do
begin
if (L1 α = L2 α = . . .= Lkα)
then
Sisteme bazate pe cunostinte 71

begin
unif: = DA
F: = L1 α
end
else
begin
D:= DEZ (L1 α, L2 α, . . ., Lkα)
If (În D exista x ∈ VI si t ∈ T, astfel încât x nu apare în t)
then α: = α(x|t) ∪ {x|t}
else unif: = NU
end
end
end

În algoritm apare multimea DEZ, care este dezacordul unei multimi de literali pozitivi
ce încep cu aceeasi variabila predicativa. DEZ se poate calcula usor daca folosim asa numita
notatie frontala a literalilor. Astfel, stiind ca literalii pozitivi sunt de forma L = P(t1 , . . ., tn ),
unde P ∈ VPn , iar tj sunt termeni, în notatia frontala se renunta la paranteze si la virgule.
Aceasta presupune sa fie cunoscuta aritatea lui P si a fiecarei variabile functionale care apare
în termenii tj, situatie în care se va putea reveni la forma obisnuita a literalilor, în mod univoc.

Exemplul 2.25. L = P(x, f(x, c), f(x, y)), unde P ∈ VP3 , f ∈ VF2 , c ∈ VF0 , x, y ∈ VI; în
notatie frontala avem L = P x f x c f x y.

Multimea DEZ (L1 , . . ., Lk ) se poate determina în felul urmator. Se aseaza literalii unii
sub altii, folosind scrierea în notatie frontala. Daca P este variabila predicativa cu care încep
literalii vom avea:

L1 = P t1 t2 . . . ti t 1i+1 . . . tn1
L2 = P t1 t2 . . . ti t i2+1 . . . tn2
...
Lk = P t1 t2 . . . ti t ik+1 . . . tnk

unde tj sunt termeni. Consideram, de la stânga spre dreapta, prima pozitie (prima coloana) în
care simbolurile difera, multimea dezacord fiind formata din simbolurile care apar pe coloana
respectiva, adica DEZ (L1 , . . ., Lk ) = { t 1i+1 , t i2+1 , . . ., t ik+1 }.
72 Bazele logice ale inteligentei artificiale

Exemplul 2.26. Fie P ∈ VP3 , f ∈ VF2 , g ∈ VF1 , c ∈ VF0 , x, y, z, v, w, s ∈ VI si


multimea de literali pozitivi M = {P(x, f(x, c), f(x, y)), P(y, f(g(c), v), f(g(v), y)),
P(z,f(g(c), w), f(z, g(s)))}. Asezând literalii unul sub altul, în notatie frontala, putem calcula
dezacordul lui M:

Pxfxcfxy
Pyfgcvfgvy
Pzfgcwfzgs
DEZ(M) = {x, y, z}.

Pentru multimea M se poate pune problema sa aplicam algoritmul de unificare.


Urmarind pseudo-codul dat mai sus, vom avea initial α = { }, situatie în care unificarea nu se
produce. Multimea dezacord este cea precizata mai sus, si în consecinta substitutia se
actualizeaza, luând valoarea: α = {x|y}. Aplicând aceasta substitutie multimea M devine: M
= {P(y, f(y, c), f(y, y)), P(y, f(g(c), v), f(g(v), y)), P(z, f(g(c), w), f(z, g(s)))}. Cum unificarea
nu s-a produs înca, dezacordul curent este DEZ(M)= {y, z}. Substitutia actualizata este: α =
{x|z, y|z} (este de remarcat felul în care se actualizeaza α, conform relatiei date în algoritmul
de unificare: α : = α(x|t) ∪ {x|t}). Aplicând noua substitutie obtinem: M = {P(z, f(z, c),
f(z, z)), P(z, f(g(c), v), f(g(v), z)), P(z, f(g(c), w), f(z, g(s)))}. În acest moment dezacordul în
notatie frontala este: DEZ(M) = {z, gc}, sau revenind la notatia obisnuita DEZ(M) =
{z, g(c)}; observam ca în multimea respectiva trebuie sa apara termeni si nu parti ale acestora
(variabila functionala g a trebuit sa fie luata împreuna cu argumentul ei, c). Se actualizeaza
substitutia, care devine: α = {x|g(c), y|g(c), z|g(c)}. Dupa aplicarea lui α, M devine: M =
{P(g(c), f(g(c), c), f(g(c), g(c))), P(g(c), f(g(c), v), f(g(v), g(c))), P(g(c), f(g(c), w), f(g(c),
g(s)))}. Este usor de urmarit cum parcurgând înca doi pasi ai algoritmului de unificare se
ajunge la α = {x|g(c), y|g(c), z|g(c), v|c, w|c, s|c}, substitutie pentru care se obtine unificarea.
Factorul este F = P(g(c), f(g(c), c), f(g(c), g(c))).

Exemplul 2.27. Fie M1 , M2 urmatoarele doua multimi de literali pozitivi, M1 = {P(x,c),


P(y, f(y))}, M2 = {P(x, x), P(y, f(y))}. Aplicând algoritmul de unificare vom constata ca
pentru aceste multimi nu exista un unificator si deci nici factorul F. Astfel, în cazul lui M1 ,
dupa determinarea primei multimi DEZ(M) = {x, y}, rezulta substitutia α = {x|y}. În acest
moment DEZ(M) = {c, f(y)}, situatie în care algoritmul de unificare se opreste cu raspunsul
NU, deoarece în DEZ(M) nu exista nici o variabila individuala. Pentru M2 , dupa substitutia α
= {x|y}, obtinem DEZ(M) = {y, f(y)}, situatie în care algoritmul de unificare esueaza de
asemenea, nefiind respectata conditia ca variabila individuala ce ar urma sa fie substituita sa
nu apara în termenul de substitutie (o înlocuire de forma: y|f(y) nu poate fi substitutie – vezi
definitia 2.39).
Sisteme bazate pe cunostinte 73

Putem acum generaliza notiunea de rezolventa de la calculul propozitional (definitia


2.38) la calculul cu predicate. Obtinerea rezolventei în acest caz presupune folosirea regulii de
deductie a rezolutiei, dupa ce în prealabil s-a aplicat, acolo unde este cazul, unificarea
literalilor care urmeaza sa se anihileze.

Definitia 2.41. Fie C1 , C2 doua clauze în calculul cu predicate (C 1 , C2 ∈ FP ). Se


numeste clauza rezolventa a lui C1 si C2 (în raport cu variabila predicativa P, care apare în
ambele clauze) clauza C obtinuta în felul urmator. Se fac, daca este cazul, redenumiri ale
variabilelor din clauzele C1 si C2 astfel încât sa avem doua clauze C1 ’, C2 ’ fara variabile
individuale comune. Se aleg din C1 ’ câtiva literali eL1 , . . ., eLm care contin variabila
predicativa P, toti de acelasi tip (pozitivi sau negativi), cu conditia m > 0. Se aleg din C2 ’
câtiva literali care contin P, eLm+1 , . . ., eLn (toti de tip diferit tipului ales din C1 ’), cu conditia
m < n. Se formeaza multimea M = {L1 , L2 , . . ., Lm, Lm+1 , . . ., Ln } de literali pozitivi. Se cauta
unificatorul si factorul F pentru multimea M, folosind algoritmul de unificare. Fie acestia α si
F. Atunci C = Rez(C 1 , C2 ) = (C 1 ’α – eF) ∪ (C 2 ’α – eF).

În legatura cu aceasta definitie se pot face mai multe observatii.

Observatia 2.11.

1) Tinând seama de definitia 2.35 a clauzei si de teorema 2.13 rezulta ca redenumirea


variabilelor în clauze va determina lucrul cu formule echivalente.
2) Se poate demonstra ca si în calculul cu predicate are loc teorema 2.18.
3) Fiind date doua clauze acestea pot avea zero sau mai multe rezolvente. Rezolventa a
doua clauze depinde de alegerea variabilei predicative P, de alegerea literalilor în C1 ’ si C2 ’ si
de alegerea numerelor m si n.
4) Definitia de mai sus este o generalizare a celei din calculul propozitional. În adevar,
daca P = p, p ∈ VP0 , factorul este chiar p, nemaifiind necesara nici o unificare si definitia de
mai sus va coincide cu definitia 2.38.

Exemplul 2.28. Fie Q ∈ VP1 , P, S ∈ VP2 , f ∈ VF1 , c ∈ VF0 , x, y, z ∈ VI, si


urmatoarele doua clauze: C1 =∀x ∀y(7P(x, y) ∨ Q(x) ∨ S(x, f(y))), C2 = ∀x ∀z (P(x, c) ∨
P(c, z) ∨ 7S(x, z))). Înainte de a calcula rezolvente din cele doua clauze redenumim variabila
x în C2 , deoarece aceasta apare si în C1 , obtinând C2 ’ = ∀w ∀z (P(w, c) ∨ P(c, z) ∨ 7S(w, z))).
Scriem cele doua clauze ca multimi: C1 = {7P(x, y), Q(x), S(x, f(y))}, C2 ’ = {P(w, c), P(c, z),
7S(w, z)}. Putem deduce o rezolventa din C1 si C2 ’ în raport cu P, care determina un literal
negativ în C1 si doi literali pozitivi în C2 ’; formam din toti acesti literali multimea M =
{P(x,y), P(w, c), P(c, z)} (conform definitiei 2.41 în M literalii negativi îsi pierd negatia). Este
usor de aplicat algoritmul de unificare în acest caz. Obtinem unificatorul α = {x|c, w|c, y|c,
74 Bazele logice ale inteligentei artificiale

z|c}, iar factorul este F= P(c, c). Aplicând formula de calcul a rezolventei din definitia 2.41
obtinem: Rez(C 1 , C2 ’) = {Q(c), S(c, f(c)), 7S(c, c)}. Este de observat felul în care am aplicat
substitutia α în cele doua clauze înainte de a construi rezolventa. Acest rezultat, conform
teoremei 2.18, ne spune ca are loc urmatoarea deductie:

∀x∀y(7P(x,y)∨ Q(x)∨ S(x,f(y))),∀w∀z(P(w,c)∨ P(c,z) ∨ 7S(w,z))) |= Q(c)∨S(c,f(c))∨7S(c,c)

Putem obtine si alta rezolventa a celor doua clauze, luând în locul lui P variabila
predicativa S. În acest caz se ajunge, dupa formarea multimii M, gasirea lui α = {x|w, z|f(y)}
si a lui F = S(w, f(y)), la : Rez(C 1 , C2 ’) = {7P(w, y), Q(w), P(w, c), P(c, f(y))}.

Exemplul 2.29. Fie P ∈ VP2 , f ∈ VF1 , c ∈ VF0 , x, y ∈ VI. Consideram urmatoarele


doua clauze, scrise direct ca multimi: C1 = {P(x, c)}, C2 = {7P(f(c), y)}. Ele admit o
rezolventa în raport cu P. Substitutia unificator este imediata: α = {x|f(c), y|c}, rezultând
factorul F = P(f(c), c) si Rez(C 1 , C2 ) = (clauza vida). Conform celor mentionate si anterior,
acest lucru ne arata ca formula în forma clauzala din care provin cele doua clauze,
∀x∀y(P(x,c) ∧ 7P(f(c), y)) este nerealizabila, aspect evident pe formula respectiva. O
asemenea situatie este folosita în demonstrarea automata a teoremelor.

Definitia 2.42. Fie S o multime de clauze. Se numeste deductie sau derivare prin
rezolutie a clauzei C din multimea S, sirul de clauze C1 , C2 , . . ., Cn astfel încât Cn = C si
oricare ar fi i∈{1, . . ., n} are loc una din conditiile:

a) Ci ∈ S
b) Ci = Rez (C j, Ck ), unde 1 ≤ j, k ≤ i

Conform acestei definitii, sirul de clauze C1 , C2 , . . ., Cn contine clauze din multimea


de plecare, precum si rezolvente ale clauzelor precedente din sir. Pe baza elementelor
discutate pâna aici putem prezenta teorema urmatoare, numita teorema (principiul) rezolutiei
sau teorema lui Robinson (formulata în 1965).

Teorema 2.19. Multimea S de clauze este nerealizabila daca si numai daca exista o
deductie prin rezolutie a clauzei vide din S.

Enuntul teoremei trebuie înteles în sensul ca multimea S de clauze reprezinta, conform


echivalarii mentionate anterior, o formula în forma clauzala si pentru formula respectiva se
furnizeaza o conditie necesara si suficienta de nerealizabilitate.
Sisteme bazate pe cunostinte 75

Acest rezultat este fundamental pentru demonstrarea automata a teoremelor: ne da o


cale pentru a demonstra ca o formula A este nesatisfialbila: derivarea prin rezolutie a clauzei
vide din multimea de clauze S corespunzatoare lui A. Pe baza teoremei 2.2, conform careia o
formula este tautologie daca si numai daca negatia ei este nerealizabila, rezulta ca avem o
noua cale pentru a dovedi caracterul de tautologie al unei formule.

Exemplul 2.30. Fie p, q, r, s ∈ VP0 . Pentru formula A ∈ Fp , A = p ∧ (7p ∨ 7q) ∧ r ∧


(7r ∨ 7s) ∧ (7p ∨ s ∨ q) sa se arate ca este nesatisfiabila. Formula A este în forma clauzala si
multimea de clauze corespunzatoare este: S = {p, 7p ∨ 7q, r, 7r ∨ 7s, 7p ∨ s ∨ q}. Vom
construi un sir de clauze, continând clauzele din S si clauze rezolvente, în încercarea de a
obtine .

C1 = p; C2 = 7p ∨ 7q; C3 = r; C4 = 7r ∨ 7s; C5 =7p ∨ s ∨ q; (toate acestea sunt clauze


din S); C6 = 7q (este Rez(C 1 , C2 )); C7 = 7p ∨ s (este Rez(C 6 , C5 )); C8 = s (este
Rez(C 7 ,C1 )); C9 = 7s (este Rez(C 3 , C4 )); C10 = (este Rez(C 8 , C9 ). O deductie prin
rezolutie se poate reprezenta printr- un
p 7p∨ 7q arbore, ca în fig. 2.3.

7q 7p∨ s ∨ q Exemplul 2.31. Fie P, Q, T ∈ VP1 ,


R ∈ VP2 , f ∈ VF1 , a ∈ VF0 , x, y, z, w, u
7p ∨ s p 7r ∨ 7s r ∈ VI, si fie S o multime de clauze. Vom
+s arata ca formula care corespunde acestei
s 7s multimi este nesatisfiabila prin
construirea unei deductii prin rezolutie a
clauzei vide din S. Clauzele din
Fig. 2.3. Derivarea prin rezolutie a clauzei vide multimea S sunt date fara a se mai nota
pentru multimea S din exemplul 2.30
cuantificatorii universali din fata
formulelor respective si cu literalii scrisi în notatie frontala. Sirul de clauze din deductia
respectiva cuprinde mai întâi cele 5 clauze ale multimii S.

C1 = Rya
C2 = Px ∨ 7 Rfax
C3 = 7 Pz ∨ Qz
C4 = 7 Pw ∨ 7 Tfa
C5 = 7 Qu ∨ Tfu
C6 = Pa (este Rez(C 1 , C2 ), unde substitutia folosita este α = {y|f(a), x|a}
C7 = Qa (este Rez(C 6 , C3 ), unde substitutia folosita este α = {z|a}
C8 = 7 Tfa (este Rez(C 6 , C4 ), unde substitutia folosita este α = {w|a}
C9 = 7 Qa (este Rez(C 8 , C5 ), unde substitutia folosita este α = {u|a}
76 Bazele logice ale inteligentei artificiale

C10 = (este Rez(C 10 , C7 ).

Felul în care teorema rezolutiei a condus la o modalitate automata de efectuare a


rationamentelor este urmatorul. Se urmareste obtinerea de catre calculator a unei concluzii pe
baza unui grup de fapte. Rezolvarea problemei implica doua aspecte: o reprezentare
corespunzatoare a grupului de fapte si o metoda de deducere a concluziilor. Demonstrarea
automata a teoremelor se ocupa de cel de-al doilea aspect, plecând de la o reprezentare a
faptelor sub forma de formule în calculul cu predicate; se poate arata ca aceasta nu este o
restrictie, deoarece celelalte reprezentari folosite în IA se pot echivala cu aceasta varianta de
reprezentare a cunoasterii. A obtine o concluzie din niste fapte înseamna formal a deduce acea
concluzie ca o consecinta logica pe baza faptelor, privite ca ipoteze caracterizând universul de
discurs (vezi definitia 2.15), adica este vorba de o relatie de forma: I |= C. Daca multimea de
ipoteze este I, I = {B1 , . . ., Bn }, atunci, pe baza observatiei 2.2, punctul 4), I |= C este
echivalent cu |= B1 ∧ B2 . . . ∧ Bn ⇒ C. Cu alte cuvinte a demonstra concluzia C din multimea
I de ipoteze este echivalent cu a verifica daca formula A = B1 ∧ B2 . . . ∧ Bn ⇒ C este
tautologie. Dupa teorema 2.2 ultima chestiune poate fi înlo cuita cu verificarea caracterului de
nerealizabilitate al formulei 7A si în acest sens Robinson a gasit un algoritm pentru a arata ca
o formula este nerealizabila.

Putem urmari felul în care algoritmul a condus la reprezentarea formulelor în forma


clauzala. Astfel, înlocuind implicatia cu disjunctia, formula A de mai sus se poate rescrie A =
7(B1 ∧ B2 . . . ∧Bn ) ∨ C. Conform strategiei schitate, în locul formulei A, vom lucra cu 7A,
pentru care trebuie sa dovedim ca este nerealizabila. Avem, pe baza legilor lui De Morgan si
asociativitatii, 7A = B1 ∧ B2 . . . ∧ Bn ∧ 7C.
Se observa ca formula la care am ajuns este într-o forma conjunctiva, ceea ce pentru
calculul cu predicate are corespondentul în forma clauzala si în acest sens metoda lui
Robinson este destinata acestei forme a formulelor. Putem acum recapitula pasii pe care îi
implica demonstrarea automata a teoremelor, atunci când este folosita ca metoda de efectuare
a rationamentelor în SBC.

1) Scopul de atins (concluzia de demonstrat) trebuie reprezentat ca o formula A, A ∈


FP , pentru care trebuie sa verificam daca este tautologie.
2) Construim B = 7A, pentru care trebuie sa aratam ca este nerealizabila.
3) Formula B trebuie adusa la forma clauzala.
4) B în forma clauzala este echivalata cu multimea S de clauze.
5) Construim rezolvente din S pâna la obtinerea clauzei vide. Daca ajungem la clauza
vida ne-am atins scopul; conform teoremei lui Robinson B este nerealizabila, deci
A este tautologie.
Sisteme bazate pe cunostinte 77

Pentru a putea aplica aceasta metoda se observa ca în pasul al treilea trebuie sa


aducem formula cu care lucram la forma clauzala. Problema aducerii unei formule la forma
clauzala se rezolva (în cazul general, al calculului cu predicate) în trei etape:

a) aducerea formulei la forma normala prenex;


b) rescrierea formulei prin eliminarea cuantificatorilor existentiali, folosind functii
Skolem.
c) rescrierea ca o conjunctie de disjunctii, adica obtinerea formei clauzale.

Daca etapele a) si c) asigura lucrul cu formule echivalente, în etapa b), formula de la


care plecam si pe care o prelucram prin functii Skolem este nesatisfiabila, daca si numai daca
formula la care ajungem la sfârsitul etapei b) este nesatisfiabila. În acest fel etapa b) nu
afecteaza scopul urmarit, acela de a arata ca o formula este nerealizabila. Descriem în
continuare fiecare din aceste etape.

Definitia 243. O formula A, A ∈ FP , se numeste în forma normala prenex, daca


satisface una din conditiile:

a) A nu contine cuantificatori;
b) A = K1 x1 K2 x2 . . . Kn xn B, unde K1 , K2 , . . ., Kn ∈ {∃ , ∀}, x1 , x2 , . . ., xn ∈ VI,
iar B ∈ FP , este o formula care nu contine cuantificatori.

În conformitate cu aceasta definitie, o formula este în forma normala prenex daca este
sau fara cuantificatori, sau cu toti cuantificatorii scosi în fata formulei. Daca formula A este în
situatia b) din definitia de mai sus, atunci K1 x1 K2 x2 . . . Kn xn se numeste prefixul formulei, iar
B se numeste matricea formulei A. Urmarind definitiile 2.35, 2.36 si observatia 2.9 se
constata ca o clauza si o formula în forma clauzala sunt si formule în forma normala prenex.
În legatura cu aducerea unei formule la forma normala prenex se poate enunta urmatoarea
teorema, a carei demonstratie, de tip constructiv, ne da solutia problemei.

Teorema 2.20. Oricare ar fi A, A ∈ FP , formula A admite o formula în forma normala


prenex, echivalenta cu ea.

Demonstratia foloseste teorema 2.12, conform careia daca într-o formula A înlocuim o
parte a acesteia B cu o formula echivalenta B1 , vom obtine o formula A1 echivalenta cu A.
Înlocuirile le vom face în scopul scoaterii cuantificatorilor în fata formulei. Sunt posibile
urmatoarele situatii, unde în paranteza am dat justificarea pentru |= B ⇔ B1 (x∈ VI, C, D∈FP ):

a) B = 7 ∃x C, atunci B1 = ∀x 7C (conform teoremei 2.14);


78 Bazele logice ale inteligentei artificiale

b) B = 7 ∀x C, atunci B1 = ∃x 7C (conform teoremei 2.14);


c) B = Kx C α D unde α ∈ {∧ ,∨}, K ∈ {∃ , ∀}, sunt posibile doua cazuri:
c1) x nu intra liber în D, atunci B1 = Kx (C α D) (conform teoremei 2.16);
c2) x intra liber în D, atunci B1 = Ky C(x|y) α D, unde y ∈ VI si y este o variabila
care nu apare nici în C si nici în D (conform teoremei 2.13); dupa aplicarea
acestei transformari vom fi în posibilitatea de a aplica transformarea din cazul
c1, scotând cuantificatorul în fata formulei;
d) B = C ⇒ D, atunci B1 = 7C ∨ D (conform teoremei 2.6, punctul 8), dupa care
vom putea continua cu unul din cazurile anterioare;
e) B = C ⇔ D, atunci B1 = (C ⇒ D) ∧ (D ⇒ C) (conform teoremei 2.6, punctul 10),
dupa care vom putea continua cu unul din cazurile anterioare.

Teorema este demonstrata, pentru ca punctele a) – e) epuizeaza toate situatiile posibile


(conform definitiei formulei în calculul cu predicate) si prin aplicarea lor, acolo unde este
cazul în mod repetat, vom obtine aducerea la forma normala prenex, asa cum arata si
urmatorul exemplu.

Exemplul 2.32. Fie P ∈ VP2 , Q ∈ VP3 , x, y, z ∈ VI. Sa se aduca la forma normala


prenex formula: A = ∀x ∃y P(x, y) ⇔ Q(x, y, z).
Din aproape în aproape gasim formulele echivalente cu A, aplicând transformarile din
demonstratia teoremei 2.20.

A1 = (∀x ∃y P(x, y) ⇒ Q(x, y, z)) ∧ (Q(x, y, z) ⇒ ∀x ∃y P(x, y)) (conform punctului e).
A2 = (7 (∀x ∃y P(x, y)) ∨ Q(x, y, z)) ∧ (7Q(x, y, z) ∨ ∀x ∃y P(x, y)) (conform punctului d).
A3 = (∃x∀y 7P(x, y) ∨ Q(x, y, z)) ∧ (7Q(x, y, z) ∨ ∀x∃yP(x, y)) (conform punctelor a si b).
A4 = (∃u ∀v 7P(u, v) ∨ Q(x, y, z)) ∧ (7Q(x, y, z) ∨ ∀w ∃s P(w, s)) (conform punctului c2 ).
A5 = ∃u ∀v (7P(u, v) ∨ Q(x, y, z)) ∧ ∀w ∃s (7Q(x, y, z) ∨ P(w, s)) (conform punctului c1 ).
A6 = ∃u ∀v ((7P(u, v) ∨ Q(x, y, z)) ∧ ∀w ∃s (7Q(x, y, z) ∨ P(w, s))) (conform punctului c1 ).
A7 = ∃u ∀v ∀w ∃s ((7P(u, v) ∨ Q(x, y, z)) ∧ (7Q(x, y, z) ∨ P(w, s))) (conform punctului c1 ).

Formula A7 este echivalenta cu A si este în forma normala prenex.

Revenind la etapele aducerii unei formule la forma clauzala, cea de-a doua etapa se
refera la eliminarea cuantificatorilor existentiali. Ea se bazeaza pe teorema urmatoare, numita
a lui L. Skolem.

Teorema 2.21. Oricare ar fi A, A ∈ FP , A formula închisa, se poate pune în


corespondenta lui A o formula A’ fara cuantificatori existentiali, astfel încât A sa fie
nerealizabila daca si numai daca A’ este nerealizabila.
Sisteme bazate pe cunostinte 79

Fara a da demonstratia acestei teoreme, ideea este aceea data de regula de deductie 6)
din teorema 2.17. Aratam felul în care se obtine formula A’ din formula A. Mai întâi se aduce
formula A la forma normala prenex, obtinându-se A. Apoi se aplica regula: daca în prefixul
formulei A se afla ∃v (v ∈ VI), atunci se elimina cuantificatorul respectiv, înlocuindu-se
totodata în matricea lui A toate aparitiile lui v cu f(x1 , x2 , . . ., xn ), unde f ∈ VFn (n ≥ 0) si f
este o variabila functionala noua (nu apare în A sau în vreo alta formula utilizata), iar x1 , x2 , . .
., xn sunt toate variabilele care apar în prefixul lui A în fata lui v si sunt cuantificate cu
cuantificatorul ∀. Cazul particular n = 0 este acela în care în fata lui ∃v în prefixul formulei A
nu apare nici un cuantificator ∀, când f va fi o constanta noua (f ∈ VF0 ). Regula respectiva se
va aplica pentru toti cuantificatorii ∃ aflati în prefixul lui A. Se va ajunge în acest fel la
formula A’, fara cuantificatori existentiali si care se va numi în forma normala Skolem.

Exemplul 2.33. Fie P ∈ VP4 , Q∈ VP5 , R∈ VP3 , x, y, z, u, v ∈ VI, si formulele:

A1 = ∀x ∀y ∃z ∀u ∃v (P(x, y, u, v) ∨ Q(x, y, z, u, v)) si A2 = ∃z ∀x ∀y R(x, y, z).

Cele doua formule sunt formule închise, fiind deja în forma normala prenex.
Formulele corespunzatoare în forma normala Skolem sunt:

A1 = ∀x∀y∀u (P(x, y, u, f2 (x, y, u)) ∨ Q(x, y, f1 (x, y), u, f2 (x, y, u))) si A2 = ∀x∀y R(x, y, c),
unde f1 ∈ VF2 , f2 ∈ VF3 , c ∈ VF0 .

Etapa a treia a aducerii la forma clauzala, atunci când este necesara, se refera la
obtinerea formulei ca o forma conjunctiva (conjunctie de disjunctii). Pentru aceasta se
folosesc legile lui De Morgan, distributivitatea si asociativitatea pentru conjunctie si
disjunctie. Prezentam în continuare un exemplu care implica toate etapele mentionate anterior,
plecând de la niste ipoteze exprimate în limbaj natural, împreuna cu o concluzie, care trebuie
verificata prin demonstrarea automata a teoremelor.

Exemplul 2.34. Fie urmatoarele ipoteze: A1 : Unii programatori urasc esecurile; A2 :


Nici un programator nu uraste succesele. Sa se verifice, prin demonstrarea automata a
teoremelor, daca aceste ipoteze determina ca o consecinta logica urmatoarea concluzie: C:
Nici un esec nu este un succes.

O etapa preliminara necesara daca dorim folosirea demonstrarii automate a teoremelor


este aceea a exprimarii ipotezelor si concluziei ca formule în calculul cu predicate. Acest
aspect va fi dezvoltat la modelul de reprezentare a cunoasterii în limbajul calculului cu
predicate de ordin întâi. Fara a intra în amanunte, pentru a construi formule respective trebui
sa stabilim variabilele predicative, eventual si cele functionale de care avem nevoie. În cazul
80 Bazele logice ale inteligentei artificiale

nostru acestea sunt urmatoarele variabile predicative, pentru care definim si interpretarea care
ne intereseaza:

P ∈ VP1 , si Pi(x) = adevarat, daca x este programator.


E ∈ VP1 , si Ei (x) = adevarat, daca x este esec.
U ∈ VP2 , si U(x, y) = adevarat, daca x uraste pe y.
S ∈ VP1 , si Si(x) = adevarat, daca x este succes.

Mai trebuie precizat universul de discurs D, care este în cazul discutat o colectivitate,
continând programatori, împreuna cu rezultate ale activitatii acestora, rezultate care pot face
adevarat, prin interpretarea i, predicatul E si/sau predicatul S. Folosind aceste variabile
predicative, ipotezele si concluzia se modeleaza prin urmatoarele formule:

A1 = ∃x (P(x) ∧ ∀y (E(y) ⇒ U(x, y))); ideea acestei modelari este aceea ca exista unii
programatori si acestia urasc toate esecurile, ceea ce explica felul în care am folosit
cuantificatorii.
A2 = ∀x (P(x) ⇒ ∀y (S(y) ⇒ 7U(x, y))); ideea de modelare este similara cu aceea de
la A1 , dar acum toti programatorii sunt în situatia de a nu urî succesele, oricare ar fi acestea;
în plus se observa si felul în care am folosit operatiile logice: în A1 interpretarea este aceea ca
sunt unii care sunt programatori si care urasc esecurile, în timp ce în A2 , este vorba de faptul
ca daca o persoana este programator, atunci, oricare ar fi ea, nu uraste nici un succes
(cuvintele de legatura pe care le-am scos în evidenta, dar mai ales întelesul frazelor modelate
ne conduc la modelarea corecta prin formule).
C = ∀x (E(x) ⇒ 7S(x)); ideea este aceea ca daca x are proprietatea de a fi un esec,
oricare ar fi acesta, atunci x nu este un succes.

De îndata ce am stabilit aceste formule, ceea ce avem de verificat este deductia: A1 , A2


|= C. Aceasta este echivalenta cu tautologia: |= A1 ∧ A2 ⇒ C. În locul acesteia vom folosi
formula D = 7 (A1 ∧ A2 ⇒ C), pentru care trebuie sa verificam daca este nerealizabila. Prin
prelucrari simple obtinem: D = 7 (7 (A1 ∧ A2 ) ∨ C) = A1 ∧ A2 ∧ 7C. Putem acum explicita pe
D:

D=∃x(P(x) ∧ ∀y(E(y) ⇒ U(x,y))) ∧ ∀x(P(x) ⇒ ∀y(S(y) ⇒ 7U(x,y))) ∧ 7(∀x(E(x) ⇒ 7S(x)))

D nu este formula în forma clauzala, astfel ca aplicam cele trei etape necesare obtinerii
acestei forme. În loc sa lucram cu formula D, este mai convenabil sa observam ca D este o
conjunctie a trei subformule, sa le prelucram pe acestea si apoi sa revenim la D. Cu alte
cuvinte folosim relatia D = A1 ∧ A2 ∧ A3 , unde A3 = 7C. Mai întâi procedam la aducerea la
forma normala prenex a celor trei subformule.
Sisteme bazate pe cunostinte 81

A1 = ∃x(P(x) ∧ ∀y(E(y) ⇒ U(x, y))) = ∃x∀y (P(x) ∧ (E(y) ⇒ U(x, y)))


A2 = ∀x(P(x) ⇒ ∀y(S(y) ⇒ 7U(x, y))) = ∀x∀y (P(x) ⇒ (S(y) ⇒ 7U(x, y)))
A3 = 7(∀x(E(x) ⇒ 7S(x))) = ∃x 7(E(x) ⇒ 7S(x))

În prelucrarile de mai sus am tinut seama de punctele c1) si b) din demonstratia


teoremei 2.20. Urmeaza etapa în care se elimina cuantificatorul ∃ prin folosirea functiilor
Skolem

A1 = ∀y (P(a) ∧ (E(y) ⇒ U(a, y)))


A3 = 7(E(b) ⇒ 7S(b))

În prelucrarile de mai sus a, b ∈ VF0 si am folosit semnal “=” desi noile formule la
care am ajuns nu sunt echivalente cu acelea de plecare; ideea este cea spusa si anterior: ne
intereseaza doar caracterul de nerealizabilitate. Formula A2 nu a fost prelucrata, necontinând
cuantificatorul ∃. Urmeaza cea de-a treia etapa, în care vom scrie cele trei formule în forma
clauzala, adica sub forma de conjunctii de disjunctii.

A1 = ∀y (P(a) ∧ (E(y) ⇒ U(a, y))) = ∀y (P(a) ∧ (7E(y) ∨ U(a, y)))


A2 = ∀x∀y (7P(x) ∨ (S(y) ⇒ 7U(x, y))) = ∀x∀y (7P(x) ∨ (7S(y) ∨ 7U(x, y))) =
∀x∀y (7P(x) ∨ 7S(y) ∨ 7U(x, y)) = ∀x∀z (7P(x) ∨ 7S(z) ∨ 7U(x, z))
A3 = 7(E(b) ⇒ 7S(b)) = 7(7E(b) ∨ 7S(b)) = E(b) ∧ S(b)

În prelucrarile de mai sus am înlocuit implicatia cu disjunctia si am folosit


asociativitatea si legile lui De Morgan. În plus, în A2 am schimbat numele unei variabile
deoarece aplicarea rezolutiei presupune ca o aceeasi variabila sa nu apara în mai multe clauze.
Revenind la formula D, care era conjunctia între A1 , A2 si A3 , putem scrie multimea S de
clauze corespunzatoare lui D:

S = {P(a), 7E(y) ∨
P(a) 7P(x) ∨ 7S(z) ∨ 7U(x, z)
U(a,y), 7P(x) ∨ 7S(z) ∨ 7U(x, z),
E(b), S(b)}
7S(z)∨7U(a, z) S(b) E(b) 7E(y) ∨ U(a, y)
Folosind cele 5 clauze
U(a, b) trebuie sa construim rezolvente
7U(a, b)
pentru obtinerea clauzei vide.
Arborele corespunzator deductiei
prin rezolutie a clauzei vide din
Fig. 2.4. Deductia prin rezolutie a clauzei vide multimea S este dat în fig. 2.4.
pentru cazul din exemplul 2. 34.
Aceasta ne arata ca din cele doua
82 Bazele logice ale inteligentei artificiale

ipoteze A1 si A2 se deduce drept consecinta logica concluzia C.

În concluzie, metoda demonstrarii automate a teoremelor furnizeaza o modalitate usor


materializabila în programe de calculator pentru efectuarea rationamentelor. În acest sens ea
sta la baza programarii logice, aceea implementata în limbajul PROLOG. Este însa de
mentionat ca atunci când se aplica în calculul cu predicate poate determina situatii de impas,
explicabile în contextul caracterului de semidecidabilitate al acestuia. Trebuie sa avem în
vedere ca teorema lui Robinson ne spune doar ca pentru o formula nerealizabila exista o
deductie a clauzei vide; problema ramâne cautarea acelei deductii. Trebuie sa generam cât
mai multe clauze rezolvent pâna ajungem la clauza vida. Neplacut este faptul ca procesul de
generare a clauzelor rezolvent are un caracter exploziv (asa numita explozie combinatoriala;
de exemplu, din 7 clauze putem ajunge la 10 000 de rezolvente). Apare necesitatea stapânirii
acestui proces si exista în prezent strategii de control al procesului generarii clauzelor
rezolvent, în sensul ghidarii procesului catre obtinerea clauzei vide [Met 98], [Cha 73],
[Flo 94].
Sisteme bazate pe cunostinte 83

2.5. Concluzii – întrebari si probleme

SBC, privite ca sisteme materializate pe calculatoarele actuale, pot fi modelate si


validate prin intermediul logicii matematice. Aceasta se refera atât la partea de baza de
cunostinte, cât si la motorul de inferente. Desi un univers al discursului va fi reflectat în cazul
general printr-un model în calculul cu predicate, putem fi în cazul în care, pentru a reduce
complexitatea calculelor si a evita problemele de decidabilitate ale acestuia, vom lucra în
calculul propozitional. Privit dintr-un alt punct de vedere, calculul propozitional constituie o
baza si pentru partea de hardware, unde, de exemplu circuitele combinationale îsi vor avea
corespondentul în formule din calculul propozitional.

Un SBC, privit ca un sistem formal, va contine în baza de cunostinte o multime de


axiome. Din acest punct de vedere trebuie gasit numarul corespunzator de axiome, în
principiu cât mai mic, care sa modeleze universul de discurs. O axioma folosita într- un sistem
formal este independenta, daca nu poate fi demonstrata în acel sistem formal. Sunt însa
situatii când un SBC va lucra cu un numar neminal de axiome (ceea ce înseamna ca acestea
nu sunt independente) pentru a facilita efectuarea rationamentelor (obtinerea teoremelor dorite
prin demonstratii cât mai scurte).
Motorul de inferente aplica în mod repetat regulile de deductie admise în sistemul
respectiv. Conform celor precizate în acest capitol, este suficient ca un SBC sa lucreze
folosind o singura regula de deductie, si anume modus ponens. Daca un univers de discurs
poate fi modelat în calculul propozitional, atunci, conform elementelor teoretice precizate în
acest capitol, orice fapt (scop) referitor la acel univers va putea fi demonstrat, în timp finit, de
SBC respectiv. Daca ne referim însa la calculul cu predicate, complexitatea algoritmilor
specifici îndeplinirii anumitor tipuri de scopuri creste si pot apare si cazuri de nedeterminare.
În IA s-au construit diferite tipuri de modele de reprezentare a cunoasterii – tratate în capitolul
urmator, unele mai apropiate de partea formala a logicii, altele introducând simplificari,
pentru evitarea dificultatilor mentionate si pentru obtinerea eficientei din punct de vedere
computational.

Întrebari si probleme

1. Fiind dat textul: “Polinomul 2x5 + 4x3 + 2x se divide cu polinomul Q(x)” precizati
daca textul respectiv reprezinta un enunt, o propozitie si/sau un predicat (de ce aritate); de
asemenea stabiliti care sunt subiectele si care este partea predicativa.
2. Care este numarul evaluarilor în calculul propozitional? Dar numarul interpretarilor
în calculul cu predicate?
84 Bazele logice ale inteligentei artificiale

3. Daca A ∈ Fp explicati de ce numarul variabilelor propozitionale care intra în A este


finit (pe aceasta se bazeaza explicatia cu privire la deducerea, într-un numar finit de pasi, a
caracterului de tautologie pentru o formula din calculul propozitional).
4. Fiind data formula A = (((7p) ∧ q) ⇒ ((p ∧ (7q)) ∨ r)), unde p, q, r ∈ VP0 sa se
gaseasca reprezentarea simplificata a lui A, prin omiterea, acolo unde este posibil, a
parantezelor.
5. Fiind data formula A = (p ⇒ q ∨ r ⇔ p) ∨ (7q ⇒ r) ∧ 7p ∧ r sa se determine π(A).
6. Fie A ∈ Fp , o formula ce contine variabilele propozitionale p1 , . . ., pn si fie cuvântul
B obtinut din A, prin substitutia simultana a variabilelor p1 , . . , pn , respectiv cu formulele C1 ,
. . ., Cn . Sa se demonstreze ca B este formula în calculul propozitional (aceasta proprietate este
folosita în teorema 2.5 din 2.2.2).
7. Demonstrati caracterul de tautologie al formulelor din teorema 2.6 folosind
algoritmul dat în 2.2.2.
8. Fiind data multimea I = {A ∨ 7C, 7B ⇒ 7A, 7C ⇒ D, 7D}, unde A, B, C, D ∈ Fp sa
se construiasca o deductie a lui 7B din multimea I.
9. Fie A ∈ FP , A = ∃x (∀y (P(x, y) ∧ Q(y) ⇒ R(x, z)) ∨ (∃z Q(z) ∧ ∃y R(x, y))), unde
Q ∈ VP1 , P, R ∈ VP2 , x, y, z ∈ VI. Precizati daca x, y, z sunt variabile libere sau legate în
formula A.
10. Fie A ∈ FP , A = ∃x P(f(x), y) ∧ ∀z Q(x, z), P, Q ∈ VP2 , f ∈ VF1 , x, y, z ∈ VI.
Precizati daca termenii t1 = f(x) si t2 = z sunt liberi pentru y în formula A.
11. Demonstrati urmatoarea proprietate: daca A ∈ FP si A este formula închisa, atunci
oricare ar fi i o D – interpretare, A este: sau i – valida, sau i – falsa.
12. Fie A ∈ Fp si |=A. Demonstrati ca A este tautologie în calculul cu predicate.
13. Demonstrati caracterul de tautologie al formulelor din teoremele 2.14 si 2.15.
14. Fie A = P(x, y), unde P ∈ VP2 , x, y ∈ VI si interpretarea i data prin: D = R
(multimea numerelor reale), Pi : R x R → {adevarat, fals}, Pi(u, v) = adevarat daca u < v si
fals în caz contrar. Precizati daca A este i – valida, i – falsa, sau realizabila în interpretarea i.
Aceeasi întrebare pentru formula: A = ∀x ∃ y P(x, y).
15. Fie A ∈ Fp , A = (7p ∧ 7q) ∨ (7q ∧ 7r) ∨ (7s ∧ 7r) ∨ (q ∧ r) ∨ (q ∧ s) ∨ (p ∧ r), unde
p, q, r, s ∈ VP0 . Aratati, prin demonstrarea automata a teoremelor, ca A este tautologie.
16. Fie S = {p, q ∨ r, 7q ∨ s, 7r ∨ s, 7p ∨ 7q ∨ 7s, 7p ∨ 7r ∨ 7s}, unde p, q, r, s ∈ VP0 .
Construiti o deductie prin rezolutie a clauzei vide pentru S.
17. Fie A ∈ FP , A = ∀x (∃y P(x, y) ∨ Q(x)) ⇒ ∃x∀y∀z R(x, y, z), unde Q ∈ VP1 ,
P ∈ VP2 , R ∈ VP3 , x, y, z ∈ VI. Sa se aduca A la forma clauzala.
18. Fie S = {P(a) ∨ 7Q(x, y), 7R(x) ∨ Q(a, x), 7P(x) ∨ 7T(y), R(b), T(b)}, unde P, R, T ∈
VP1 , Q ∈ VP2 , a, b ∈ VF0 , x, y ∈ VI. Construiti o deductie prin rezolutie a clauzei vide
pentru S. Aceeasi problema pentru multimea S = {7P(x) ∨ 7Q(x, a), Q(x, y), P(x) ∨ R(a, f(a)),
Sisteme bazate pe cunostinte 85

P(x) ∨ R(f(x), y), 7R(a, x) ∨ 7R(x, b) ∨ P(g(x))}, unde P ∈ VP1 , Q, R ∈ VP2 , f, g ∈ VF1 ,
a, b ∈ VF0 , x, y ∈ VI.
19. Fie urmatoarele ipoteze: “Nu toti cei prezenti la examenul oral au promovat.”, “Toti
cei prezenti la examenul oral au dat proba scrisa.” Sa se verifice prin demonstrarea automata a
teoremelor daca este adevarata concluzia: “Sunt unii care au dat proba scrisa si nu au
promovat.”
20. Fiind data ipoteza: “Studentii sunt cetateni.” sa se verifice prin demonstrarea
automata a teoremelor concluzia: “Voturile studentilor sunt voturi ale cetatenilor. ”
21. Fie 3 cuburi asezate într-un turn, conform fig. 2.5 (Problema lui Moore [Cha 73]). Se
stie despre cubul A ca are culoarea verde, iar despre cubul C se stie ca nu este verde. Sa se
arate, prin demonstrarea automata a teoremelor, ca exista un cub de culoare verde care este
asezat pe un cub ce nu este verde.

A
B
C

Fig. 2.5. Problema lui Moore


3.1. Cerinte pentru un model de reprezentare a cunoasterii

Pentru construirea unui SBC se folosesc modele de reprezentare a cunoasterii. Desi


este vorba despre doua aspecte aflate în conexiune, cunostintele si modul în care acestea sunt
reprezentate într-un SBC sunt chestiuni distincte. În functie de cunostintele folosite rezulta
competenta unui SBC (la ce anume poate fi acesta folosit), iar modul de reprezentare a
cunoasterii determina codificarea cunostintelor în program (mai întâi codificarea formala, la
care ne referim în primul rând aici, apoi cea de la nivelul implementarii), influentând
performantele SBC (viteza de lucru, memorie ocupata). Distinctia este aceea între ceea ce
poate face un sistem si cum poate face. Daca în primele SBC aceasta separare nu a fost
considerata importanta, accentul punându-se pe partea de implementare, în prezent sunt
cercetate ambele probleme [Dav 93][Rus 95]. Chestiunea poate fi privita fie la proiectarea si
realizarea unui SBC, sau la analiza si utilizarea acestuia. Astfel, la dezvoltarea unui SBC vom
avea de parcurs urmatoarele doua faze distincte.

1. Prima etapa este aceea a acumularii cunostintelor necesare în rezolvarea problemelor


ce vor fi propuse SBC. Oricât de performante ar fi tehnicile de programare, sistemul nu va fi
capabil sa depaseasca limitele cunoasterii achizitionate; exceptia pot fi sistemele dedicate
extinderii cunoasterii unui domeniu, dar si în acest caz trebuie mai întâi acumulate elementele
de metacunoastere care sa permita SBC sa dezvolte teoria domeniului de plecare. Achizitia de
cunostinte nu înseamna simpla adaugare de elemente. Pentru ca o data cu acumularea sa se
îmbunatateasca performantele de cunoastere, este necesara o clasificare a noilor cunostinte;
astfel acestea vor putea fi regasite atunci când sunt relevante. De asemenea, noile cunostinte
de multe ori sunt în interactiune cu cele vechi, si aceste relatii trebuie puse în evidenta.
Cunoasterea este achizitionata prin procese de observare a realitatii, învatare, abstractizare si
achizitia de cunostinte a devenit în prezent un subdomeniu decisiv pentru SBC.

Cunoasterea este alcatuita din piese de cunoastere, adica elemente care au o anumita
semnificatie, datorita careia (pentru care) au fost achizitionate. În mod deosebit distingem
doua tipuri de piese de cunoastere:
Sisteme bazate pe cunostinte 87

- conceptele sunt cele care condenseaza rezultatele procesului de abstractizare prin


care specificam însusirile esentiale, necesare si suficiente pentru a decide apartenenta
obiectelor la anumite clase;
- instantele sunt obiecte individuale.

Facând legatura cu capitolul anterior, conceptele vor avea corespondentul în


variabilele predicative si cele functionale, iar instantele în constante.

2. Dezvoltarea programelor care sa codifice si proceseze cunostintele acumulate, în


scopul rezolvarii, în mod autonom, a unor probleme propuse, este cea de-a doua etapa în
realizarea unui SBC. Desi codificarea este facuta si în programarea conventionala, pentru
SBC apar deosebiri importante, deoarece aici ea trebuie sa faciliteze atât gasirea faptelor
relevante pentru o problema din baza de cunostinte, cât si efectuarea de rationamente pe
cunostintele extrase pentru obtinerea solutiei la problema în lucru.
Regasirea a ceea ce este relevant pentru o problema devine important într-o baza de
cunostinte ampla. În SBC actioneaza în acest sens legaturile ce exista în baza de cunostinte
între diferitele elemente. Pentru obtinerea acestor legaturi, la construirea SBC daca se stie ca o
anumita structura de date va putea fi într-un anumit rationa ment în legatura cu o alta, se va
stabili în baza de cunostinte o conexiune între ele. Daca se stie ca mai multe structuri vor fi în
mod obisnuit folosite împreuna, atunci vor fi grupate într-o structura mai ampla.
Efectuarea de rationamente apare în sistemele de IA în sensul ca acestea trebuie sa
determine ceva ce nu a fost “învatate” în mod explicit. De exemplu, daca în baza de
cunostinte se gasesc faptele: “IRB 1400 este un robot” si “Robotii se misca”, atunci sistemul
poate sa raspunda în mod direct la întrebarile: “Este IRB 1400 un robot?”, “Se misca
robotii?”; în schimb, pentru a raspunde la întrebarea: “Se misca IRB 1400?”, trebuie sa
efectueze un rationament. În rezolvarea problemelor de IA, sistemele respective trebuie sa fie
capabile sa deduca si verifice noi fapte, pe lânga cele furnizate explicit de utilizator.
Prin rationament întelegem un lant de judecati (procese de gândire) al carui obiectiv
este obtinerea de noi adevaruri. Într- un rationament un grup de enunturi numite premise
(ipoteze) este legat de un enunt concluzie printr-o operatie logica numita inferenta. Am pus
astfel în evidenta raportul care exista între notiunile de rationament si inferenta, ele fiind
adesea folosite în mod echivalent. Este evident ca partea dintr-un SBC care va determina
rezolvarea acestei faze este motorul de inferente.

Cele doua etape – acumularea cunostintelor si respectiv codificarea acestora – sunt în


principiu secventiale, desi adesea realizarea unui SBC poate fi sub forma unui ciclu, în care
cele doua etape se repeta de mai multe ori. Astfel, mai întâi trebuie achizitionate cunostintele
si apoi gasit un model de reprezentare a cunoasterii adecvat universului de discurs si care sa
permita atât încorporarea cunostintelor, cât si folosirea eficienta a acestora în efectuarea
88 Reprezentarea cunoasterii

rationamentelor de catre un sistem de calcul. În acest capitol ne ocupam de cea de-a doua
etapa, iar în urmatorul de achizitia de cunostinte.

Si pentru faza de analiza si utilizare a unui SBC, separarea cunostinte – reprezentare a


acestora este importanta; se va evidentia felul în care acestea contribuie la rezolvarea unei
probleme, ceea ce poate conduce la perfectionarea si actualizarea mai usoara a sistemului, la
transferarea metodelor de reprezentare de la un domeniu la altul. În plus, în prezent se admite
utilitatea solutiilor hibride, în sensul ca se folosesc mai multe tipuri de cunostinte si/sau mai
multe metode de reprezentare a acestora.

Un model de reprezentare a cunoasterii furnizeaza o metoda de codificare a


cunostintelor, care sa fie utilizabila în realizarea bazei de cunostinte a unui SBC. Daca la
începutul folosirii SE, partea de modelare implicata îsi gasea solutii ad-hoc, în prezent este
recunoscuta importanta acesteia. Astfel, construirea unui SBC poate fi considerata ca
dezvoltarea unui set de structuri, obtinute prin modelarea de abilitati specifice de rezolvare a
problemelor si care trebuie sa fie implementabile computational. O faza de modelare poate
exista si în programarea conventionala, dar pentru un model folosit în SBC sunt impuse o
serie de calitati, dupa cum urmeaza.

1) Sa descrie obiectele lumii reprezentate si proprietatile lor esentiale, adica sa aiba


suficienta putere de expresivitate. Din acest punct de vedere am putea spune ca un model de
reprezentare în limbaj natural ar avea maxim de expresivitate; conform cerintelor urmatoare o
asemenea varianta nu este utilizabila.
2) Sa fie clar, în sensul de a face explicite relatiile dintre obiecte, conform cerintei
mentionate anterior privind regasirea pieselor de cunoastere relevante în rezolvarea unei
probleme.
3) Sa fie complet si concis, suprimând detaliile nesemnificative; în acest fel se va
obtine atât posibilitatea de codificare a cunostintelor referitoare la un univers de discurs, cât si
eficienta implementarii.
4) Sa fie neambiguu si independent de context, facilitând astfel efectuarea de
inferente. Din acest punct de vedere, limbajul natural, caracterizat prin ambiguitate si
dependenta de context, este la limita inferioara, iar limbajul matematic este cazul cel mai
favorabil.
5) Sa fie eficient din punct de vedere computational, ceea ce înseamna atât
posibilitatea de a adauga, modifica si sterge elemente din baza de cunostinte, cât si
posibilitatea de a gasi metode aplicabile pe calculator pentru a efectua rationamente. Din acest
punct de vedere a existat o evolutie în SBC, conform careia, initial s-a dorit obtinerea unei
separari între partea de baza de cunostinte si cea de motor de inferente; o asemenea arhitectura
atrage dupa sine o serie de avantaje, comentate în 1.6. În prezent despartirea celor doua
aspecte nu mai este atât de neta, în sensul ca partea de model de reprezentare a cunoasterii,
Sisteme bazate pe cunostinte 89

conducând la baza de cunostinte, este de organizata în asa fel încât sa serveasca efectuarea
rationamentelor, adica sa faciliteze realizarea motorului de inferente.

Orice model de reprezentare a cunoasterii se defineste prin conventiile sintactice si


semantice folosite. Sintaxa se refera la colectia de simboluri admise – alfabetul reprezentarii -
si la modul cum pot fi combinate aceste simboluri. Semantica ne da întelesul aranjamentelor
de simboluri permise de sintaxa. Prin modelele de reprezentare a cunoasterii transpunem în
calculator cunostinte asupra universului de discurs (vezi fig. 3.1). Conform semanticii
2 modelului utilizat, o anumita
Structura_1 Structura_2 structura admisa de sintaxa
reprezinta un fapt din lumea
Model de reprezentare exterioara (sageata notata cu 1
a cunoasterii 1 3
în fig. 3.1). Sintaxa trebuie sa
Univers de discurs fie în asa fel construita, încât
SBC sa fie capabil ca, prin
4
Fapt_1 Fapt_2 mecanisme computationale, sa
deduca în mod eficient noi
structur i din cele initiale
Fig. 3.1. Corespondenta univers de discurs – model
de reprezentare a cunoasterii (sageata notata cu 2). La rândul
ei semantica trebuie sa asigure
ca acestea sa corespunda unor enunturi (fapte) valide din universul de discurs (sageata notata
cu 3), enunturi pe care altfel le-ar putea deduce si un observator al acelui univers de discurs,
prin mecanisme de inferenta (sageata notata cu 4).

Pentru a putea realiza un model de reprezentare a cunoasterii trebuie rezolvate


aspectele ontologice si cele epistemologice ale reprezentarii. Ontologia studiaza trasaturile
generale ale existentei. În cazul SBC, corespunzator universului de discurs avut în lucru,
trebuie stabilite piesele de cunoastere existente (ce exista în mediul considerat). Mai concret,
este vorba de a preciza conceptele si instantele necesare în modelare, iar acestea la rândul lor
pot fi obiecte sau relatii ale acestora. Semantica modelului depinde de aceste elemente, adica
depinde de ontologia modelului. În principiu, un model va necesita o ontologie generala si
una specifica; de exemplu, construind un model pentru un mediu industrial, existenta unei
relatii de apartenenta între obiecte din acel univers corespunde unei ontologii generale, iar
proprietatea de programabilitate a unui robot industrial este un aspect al ontologiei specifice.
Posibilitatile ontologice difera în functie de expresivitatea metodei de reprezentare folosite.
De exemplu, anticipând în ceea ce priveste modelul bazat pe logica matematica, în cazul
folosirii doar a calculului propozitional va putea fi modelata numai existenta sau inexistenta
unui obiect. În calculul cu predicate, ontologia va fi extinsa în sensul ca vom putea modela si
existenta unor relatii între obiecte, prin folosirea unor variabile predicative sau functionale, iar
extinderea poate continua; exista logici temporale, care ne permit sa luam în considerare si
90 Reprezentarea cunoasterii

evolutia în timp a obiectelor din universul de discurs. Din punct de vedere epistemologic,
adica al teoriei cunoasterii, un model trebuie sa exprime felul în care poate fi interpretata
cunoasterea asupra elementelor admise de ontologie. În acest sens, de exemplu, logica binara
considera ca un fapt de cunoastere asupra universului de discurs poate fi adevarat sau fals, în
timp ce logica fuzzy lucreaza cu valori de adevar aflate în corespondenta cu un interval real.

Ramânând în logica clasica, partea de ontologie a unui model de reprezentare a


cunoasterii ridica mai multe probleme. Astfel, ea poate fi fixata prin intermediul unor
elemente primitive, numite primitive semantice; denumirea este legata de faptul ca ele
determina semantica modelului realizat. Primitive semantice sunt acele elemente care se
utilizeaza, dar nu pot fi definite în cadrul sistemului (se definesc prin ele însele). Cu alte
cuvinte, ele sunt celule atomice, nedecompozabile, în care se poate descompune întelesul
pieselor de cunoastere folosite în descrierea universului de discurs. De exemplu, în modelul
dat de limbajul calculului cu predicate de ordin întâi, primitivele semantice corespund
variabilelor predicative si celor functionale ce se folosesc. Utilizarea stricta a unor primitive
semantice în modelele de reprezentare a cunoasterii din SBC ridica dificultati. Astfel,
ontologia aleasa trebuie sa fie adecvata atât din punct de vedere epistemologic, cât si
pragmatic [Dav 93]. Prima cerinta presupune ca modelul sa poata distinge si reprezenta toate
elementele universului de discurs. Din acest punct de vedere, stabilirea si folosirea unor
primitive semantice ar fi de dorit, în sensul ca identificând elementele primitive din punct de
vedere semantic, vom putea apoi ca prin combinarea acestora sa reprezentam orice piesa de
cunoastere cu privire la universul de discurs respectiv.
Contradictia apare la momentul adecvarii pragmatice. Ontologia aleasa este adecvata
pragmatic atunci când permite o implementare eficienta a inferentelor pe calculator, si din
acest punct de vedere folosirea unor primitive semantice nu mai este cea indicata. Chiar daca
nu exista un consens privind numarul primitivelor semantice necesare într-un caz general,
acesta variind de la 10 dupa unii autori, la 100 dupa altii [Leh 92], este total ineficient ca,
indiferent de problema în lucru, sa trebuiasca sa ajungem la acestea. Este ca si cum, de
exemplu, pentru un mediu al unor circuite electrice, am folosi un model bazat pe primitiva
semantica electron. Desi electronul ar fi în adevar un element primitiv din punct de vedere al
semanticii acelui univers de discurs, pentru un SBC destinat diagnozei circuitelor electrice va
fi mult mai convenabil sa lucram, ca elemente primitive, cu tipurile de circuite (SI, SAU,
etc.), cu nivelele atasate semnalelor de lucru, s.a.m.d. Pentru a ajunge la compromisul necesar
între adecvarea epistemologica si cea pragmatica vor fi folosite primitive reprezentationale,
adica acele elemente la care se opreste descompunerea întelesului în cazul universului de
discurs avut în lucru.
Privita într-o asemenea abordare construirea unui model de reprezentare a cunoasterii
va ridica problema alegerii granularitatii reprezentarii [Ric 91]. Aceasta înseamna sa stabilim
nivelul de detaliere la care ne oprim si în functie de acesta rezulta primitivele
reprezentationale. Exista argumente atât în favoarea unei detalieri de amanunt, cât si în
Sisteme bazate pe cunostinte 91

favoarea uneia mai grosiere. Astfel, folosirea unor primitive reprezentationale de nivel scazut
(de detaliu, apropiate de sensul de primitive semantice) poate facilita scrierea unor reguli
simple pentru efectuarea inferentelor, în termenii acestor primitive. Este ca si cum am avea de
construit un SBC pentru rezolvarea ecuatiilor algebrice, si folosim ca primitiva ecuatia de
gradul întâi, situatie în care regula de rezolvare a acesteia este usor de exprimat. Problema
este aceea ca nu toate ecuatiile pot fi reduse la acest caz elementar si nici nu este eficient sa
procedam în acest fel.
Exista mai multe argumente pentru fixarea unui nivel de granularitate mai înalt decât
cel minim. Astfel, folosirea unui nivel minim va impune stocarea unor structuri complicate,
cele reprezentând descrierea unor entitati în termeni ai primitivelor de nivel scazut, chestiune
ce se evita ridicând nivelul granularitatii (în exemplul nostru, ecuatia de gradul 2, poate fi si
ea o primitiva reprezentationala, care nu mai trebuie descompusa). În plus, descompunerea la
un nivel scazut al granularitatii va însemna si un consum de timp si ineficienta a algoritmilor
de cautare aplicati pe modelul respectiv, în timpul rezolvarii problemelor.
Un alt dezavantaj major este acela ca initial cunoasterea este data, de exemplu, în
limbaj natural, adica într-o forma în care nu apar detaliile cele mai intime. Aducerea
cunoasterii respective la forma unor combinatii ale unor primitive semantice poate fi dificila
si nenecesara, atâta timp cât rezolvarea problemelor de care se ocupa SBC se obtine fara a fi
nevoie sa crestem nivelul de detaliere. De exemplu, se poate ca un expert în domeniul
proiectarii sistemelor cu microprocesoare sa nu mai faca referire la functionarea
tranzistorului.
Cea de-a treia problema a folosirii unor elemente ce ar reprezenta în adevar primitive
semantice este aceea a dificultatii identificarii acestora. Fie ca este vorba de complexitatea
unui anumit domeniu, sau de faptul ca informatiile sunt incomplete, primitivele
reprezentationale trebuie sa se opreasca la un nivel de detaliere mai mare decât cel minim. Un
exemplu de felul în care primitivele reprezentationale influenteaza un SBC este acela dat în
3.3.3 (fig. 3.13).
Concluzia este ca primitivele reprezentationale se vor alege la acel grad de
granularitate care este adecvat universului de discurs, sarcinii de rezolvat de catre SBC si care
sa asigure si eficienta implementarii. Problema este una dificila; câteva idei care pot ghida
aceasta alegere sunt acelea cu privire la calitatile unor bune primitive reprezentationale:

1. Finititudine - numarul primitivelor reprezentationale trebuie sa fie finit si mai mic


decât numarul elementelor al caror înteles trebuie modelat.
2. Comprehensiune - setul de primitive reprezentationale trebuie sa fie adecvat pentru
a exprima si distinge sensurile tuturor elementelor al caror înteles trebuie modelat.
3. Independenta - nici o primitiva reprezentationala nu trebuie sa poata fi definita prin
alte primitive reprezentationale.
Toate aceste aspecte pot fi urmarite pe tipurile de reprezentare a cunoasterii prezentate
în continuare.
92 Reprezentarea cunoasterii

3.2. Reprezentarea cunoasterii în limbajul calculului cu predicate de


ordin întâi

Este varianta de model derivata direct din logica matematica. Astfel, în aceasta
reprezentare piesele de cunoastere sunt descrise ca formule în calculul cu predicate, iar
sintaxa si semantica sunt cele cunoscute din logica. Avantajele metodei sunt:

- exista un set de reguli de inferenta (regulile de deductie din calculul cu predicate)


prin care din niste fapte pot fi deduse alte fapte;
- faptele ce sunt deduse, plecând de la tautologii, prin rationamente folosind aceasta
reprezentare, sunt garantate a fi adevarate;
- rationamentele pot fi efectuate pe baza de metode computationale clare, ca de
exemplu demonstrarea automata a teoremelor.

Dezavantajul metodei este acela al dificultatii de captare a trasaturilor relevante ale


pieselor de cunoastere.

3.2.1. Etapele construirii reprezentarii în limbajul calculului cu predicate de


ordin întâi

Pentru obtinerea reprezentarii cunoasterii în limbajul calculului cu predicate de ordin


întâi plecam de la caracteristica de functie propozitionala a predicatului, adica aceea de a crea
a propozitie. De aceea, descrierea unei piese de cunoastere, exprimata initial în limbaj natural,
este descompusa mai întâi în propozitii, numite si asertiuni; acestea au aceeasi semnificatie cu
enunturile din logica (vezi definitia 2.1). Fiecare asertiune este generata de un predicat
(variabila predicativa) cu un numar finit de locuri (aritatea predicatului), în care pot apare
variabile individuale (obiecte neprecizate ale universului de discurs), sau constante (obiecte
fixate din universul de discurs, adica instante). În consecinta, reprezentarea cunoasterii în
cazul acestei variante de modelare urmeaza doua etape:

1) reprezentarea propozitionala, în care descrierea piesei de cunoastere este


descompusa în asertiuni, legate între ele prin operatiile logice.
2) reprezentarea predicativa în care fiecare asertiune este descompusa în
componentele sale: predicat si obiecte asupra carora se efectueaza predicatia.

Detaliile acestor doua etape sunt descrise în continuare. Plecam de la urmatorul


exemplu, care contine un fragment din descrierea în limbaj natural a piesei de cunoastere
“Robotul 1”.
Sisteme bazate pe cunostinte 93

Exemplul 3.1. “Robotul 1 este compus din baza, brat si apucator. Bratul avanseaza
daca un operator apasa butonul P si daca magazia contine piese.”
Prima propozitie este si prima asertiune, pe care o notam cu A1. Urmatoarea fraza este
alcatuita din asertiunile: A2 - bratul avanseaza; A3 - un operator apasa butonul P; A4 - magazia
contine piese. Am eliminat cuvintele de legatura – daca, si – urmând a tine seama de ele
atunci când stabilim operatiile logice dintre asertiuni.
Cunoasterea despre robotul 1, data prin textul de mai sus, se va reprezenta prin
urmatoarele formule, pe care le consideram a fi tautologii.

|= A1
|= A3 ∧ A4 ⇒ A2 (3.1)

În aceasta reprezentare am pus în evidenta operatiile logice între asertiunile care apar
în fraza în limbaj natural. Rezultatul acestei faze îsi are corespondentul în logica în partea de
calcul propozitional, în sensul în care A1 ÷ A4 ar putea fi privite ca variabile propozitionale.
Cel mai frecvent ele urmeaza a fi înlocuite cu formule din calculul cu predicate, în faza a
doua, pentru a putea surprinde o serie de aspecte date în descrierea initiala si care nu apar în
modelul (3.1).

În etapa a doua, aceea a reprezentarii predicative, trebuie sa rafinam cunoasterea,


identificând semnificatia componentelor fiecarei asertiuni. Principalele aspecte de care trebuie
sa tinem seama în aceasta etapa sunt:

a) orice asertiune (enunt) are, conform celor precizate în paragraful 2.1, structura de
forma subiect/subiecte – parte predicativa;
b) partea predicativa va fi reprezentata printr-un simbol de predicat (variabila
predicativa), în ale carui locuri sunt plasate subiectele;
c) unele componente din descrierea în limbaj natural au rolul de a modifica valoarea
de adevar în functie de acoperirea multimii (domeniului) în care variabilele iau valori, dând
astfel o semnificatie cantitativa, care este surprinsa cu ajutorul cuantificatorilor.

Vom aplica aceste elemente pe cazul exemplului 3.1. A1 se poate exprima cu ajutorul
predicatului ESTE_COMPUS(obiect_compus, componenta_1, componenta_2, componenta_3) ,
iar instantele din exemplul nostru ce determina ca interpretarea predicatului sa fie adevarat
sunt: ESTE_COMPUS(robot_1, baza, brat, apucator). Avem în vedere o D- interpretare, în
care D se refera la o celula de fabricatie. Aceasta varianta de reprezentare are doua
dezavantaje:
94 Reprezentarea cunoasterii

- la efectuarea de rationame nte se întâmpla frecvent sa nu avem nevoie simultan de


toate componentele predicatului;
- numarul de argumente ale predicatului (aritatea) fiind prestabilit, eventuala rafinare
ulterioara a cunoasterii care ar adauga noi componente, va implica schimbarea predicatului.

Se pot evita aceste deficiente prin reformularea asertiunii în forma logic echivalenta de
conjunctie de predicate mai simple (adesea este necesar sa reformulam un enunt în limbaj
natural, într-o forma logic echivalenta, pentru obtinerea modelului corespunzator). Astfel,
folosind predicatul de aritate doi ESTE_COMPONENTA(obiect_compus, componenta), cu
instantele din exemplul considerat, rezulta pentru A1 :

|= ESTE_COMPONENTA(robot_1, baza) ∧ ESTE_COMPONENTA(robot_1, brat) ∧


ESTE_COMPONENTA(robot_1, apucator) (3.2)

În acest caz vom putea usor completa modelul, atunci când se achizitioneaza noi piese
de cunoastere, de exemplu, adaugând în conjunctia de mai sus termenul:

ESTE_COMPONENTA(robot_1, sistem_actionare)

Pentru asertiunile A2 , A3 , A4 vom folosi predicatele:

APASA(x, y), CONTINE(z, w), AVANSEAZA(t)

si descrierea devine:

|= APASA(operator, buton_P) ∧ CONTINE(magazia, piesa) ⇒ AVANSEAZA(brat) (3.3)

Subliniem faptul ca atunci când folosim un predicat, pentru a fixa semantica acestuia,
trebuie sa stim D– interpretarea în care lucram. Conform definitiei acesteia (vezi definitia
2.30), vom putea preciza interpretarea unei variabile predicative numai daca stim multimea
(conceptul, domeniul) în care fiecare argument al sau ia valori (se instantiaza). În functie de
instantierele argumentelor, de felul în care acestea sunt eventual cuantificate si de
interpretarea folosita, un predicat va fi interpretat ca adevarat sau fals.

În cele prezentate pâna acum argumentele predicatelor au fost substituite cu obiecte


individuale precizate, ceea ce corespunde constantelor din logica. Nu întotdeauna aceasta este
situatia convenabila. De exemplu, daca descrierea corespunzatoare asertiunii A1 are un
caracter de generalitate, ea ar trebui repetata pentru fiecare instanta a conceptului robot.
Considerând ca aceasta descriere este adevarata pentru întregul concept (pentru întreaga clasa
de obiecte numite roboti) putem introduce în model predicatul ROBOT(x), predicat ce
Sisteme bazate pe cunostinte 95

reprezinta conceptul si care va fi interpretat ca adevarat, ori de câte ori x este înlocuit cu o
instanta a conceptului respectiv. Aceasta ar însemna ca în locul lui A1 sa avem asertiunea A0 :
“Un robot este compus din baza, brat si apucator”, prin subiectul “un robot” trebuind sa
întelegem caracterul de generalitate, pe care îl modelam cu cuantificatorul ∀. Obtinem atunci
pentru A0 (am pastrat predicatul ESTE_COMPONENTA, cu semnificatia deja precizata în
(3.2)):

|= ∀x(ROBOT(x) ⇒ ESTE_COMPONENTA(x, baza)) ∧


∀x(ROBOT(x) ⇒ ESTE_COMPONENTA(x, brat)) ∧ (3.4)
∀x(ROBOT(x) ⇒ ESTE_COMPONENTA(x, apucator))

În aceste conditii vom avea în baza de cunostinte, pentru prima asertiune din exemplul
3.1, în locul tautologiei (3.2), tautologia de mai sus, împreuna cu:

|= ROBOT(robot_1) (3.5)

Putem în mod similar considera ca obiectele baza, brat, apucator nu sunt nici ele
obiecte individuale, ci componente generice. În acest caz am putea specifica prin predicatie,
de exemplu, caracteristica de a fi brat. Ar urma sa avem un predicat drept argument în alt
predicat:

∀x(ROBOT(x) ⇒ ESTE_COMPONENTA(x, Brat(x))) (3.6)

În acest caz ESTE_COMPONENTA ar fi un predicat de ordinul 2 si o asemenea


situatie este de evitat (multe din rezultatele deduse în capitolul anterior sunt valabile numai
pentru predicatele de ordin întâi). Pentru aceasta, de exemplu, putem beneficia de existenta
unei relatii între fiecare instanta a conceptului ROBOT si fiecare instanta a conceptului BRAT:
orice robot are un anumit tip de brat. Rezulta atunci ca putem defini o variabila functionala cu
un argument (de aritate 1):

Brat: R → B (3.7)

care este o aplicatie de la multimea R a robotilor la multimea B a bratelor de robot. În felul


acesta formula (3.6), în care folosim variabila functionala Brat, ramâne în calculul cu
predicate de ordin întâi.

Sunt situatii când nu toate elementele unei multimi satisfac o proprietate, dar se
cunoaste faptul ca exista cel putin un element (o instanta) care o satisface. Un asemenea caz
96 Reprezentarea cunoasterii

este modelat în calculul cu predicate prin cuantificarea existentiala a variabilei


corespunzatoare. Astfel, fraza a doua a exemplului 3.1 poate fi “recitita” sub forma:

“Bratul avanseaza daca exista un operator care apasa butonul P si daca magazia
contine cel putin o piesa.”

si în locul formei (3.3) ajungem la:

|= ∃x (OPERATOR(x) ∧ APASA(x, buton_P)) ∧ ∃y (PIESA(y) ∧


(3.8)
CONTINE(magazia, y)) ⇒ AVANSEAZA(Brat(robot_1))

În (3.8) am folosit si predicatele OPERATOR si PIESA a caror semantica este


evidenta. În concluzie, pentru exemplul 3.1, în care prima afirmatie am considerat-o ca
general valabila pentru roboti, varianta de reprezentare în modelul discutat în acest paragraf
este aceea data de (3.4) – completata conform (3.6) si (3.7) – (3.5) si (3.8). A fost vorba
numai despre un fragment din descrierea universului de discurs al unei celule de fabricatie, si
este de observat cum legatura dintre diferitele formule ale modelului este asigurata de
constanta robot_1. Mai trebuie sa întelegem ca avem de-a face cu un model al realitatii, si, ca
un aspect cunoscut în modelare, acesta introduce un grad de aproximare. De exemplu, în
anumite situatii (sistemul de actionare al robotului 1 s-a defectat!), bratul robotului nu mai
avanseaza în cazul în care cele doua conditii aflate în fata implicatiei în (3.8) sunt adevarate si
atunci formula respectiva nu mai este tautologie.

3.2.2. Aspecte deosebite ale reprezentarii în limbajul calculului cu predicate de


ordin întâi

Desi în paragraful anterio r am precizat o procedura sistematica de construire a


reprezentarii cunoasterii în limbajul calculului cu predicate de ordin întâi, gasirea unui model
corect necesita experienta; sunt de interes în acest sens observatiile si exemplele discutate în
continuare. Dupa cum am aratat si în 2.1 (vezi exemplul 2.1), subiectele din punct de vedere
al modelarii logice nu sunt aceleasi cu subiectele gramaticale. Trebuie determinate toate
subiectele care apar într-un enunt, ele fiind cele despre care se vorbeste în asertiunea
respectiva. Acestea vor forma în modelul dezvoltat variabile functionale (în cazul particular în
care subiectele sunt instante, ele vor fi în reprezentare variabile functionale de aritate zero,
adica vor fi constante) si variabile individuale. De asemenea, în cazul în care enuntul este cu
privire la o proprietate (sau actiune) a unui concept, atunci un subiect poate fi modelat printr-o
variabila predicativa. Asa se întâmpla în cazul formulei (3.6), care reprezinta asertiunea:

“Orice robot are drept componenta un brat.”


Sisteme bazate pe cunostinte 97

În aceasta, unul din subiecte este “robot”, care a devenit în model o variabila
predicativa.
Trebuie sa identificam actiunile, relatiile în care subiectele sunt implicate si care vor
forma variabile predicative. Operatiile logice între diferitele variabile predicative le vom
determina tinând seama de anumite cuvinte de legatura din exprimarea în limbaj natural, dar
mai ales de sensul logic al asertiunilor respective. Operatia de conjunctie este reprezentata în
limbajul natural prin cuvinte ca: “si”, “de asemenea”, “cât si”. Operatia de implicatie este
determinata de cuvinte ca: “daca”, “atunci”, “când”, dar adesea aceste cuvinte lipsesc si
necesitatea folosirii ei trebuie sa o determinam din logica asertiunii: exista doua parti în
enuntul modelat, P1 si P2 , care sunt în relatia ca daca P1 este adevarat, atunci si P2 este
adevarat.

Daca în asertiunea pe care o reprezentam exista obiecte care nu sunt instante, atunci
vom folosi pentru acestea variabile individuale, care vor fi argumente ale predicatelor
(eventual, daca este vorba despre concepte modelate prin variabile functionale de aritate mai
mare ca zero, variabilele individuale pot apare si ca argumente ale acestora, ca în (3.6)).
Aproape fara exceptie aceste variabile vor trebui cuantificate, ajungându-se la formule
închise, pentru care, în conformitate cu cele aratate în paragraful 2.3.3, orice interpretare le va
evalua fie ca formule valide, sau ca formule false (deci o valoare de adevar fixata, si nu va fi
cazul unor formule realizabile). Aceasta înseamna ca trebuie sa gasim cuantificatorul care sa
lege fiecare variabila. Cuantificatorul ∀ este determinat de situatii ca: “Toti x au proprietatea
…”, sau “Este întotdeauna adevarat ca x are proprietatea …”, dar adesea aceste cuvinte nu
apar si trebuie sa ne dam seama ca asertiunea respectiva se refera la un întreg concept.

Exemplul 3.2. “Politicienii sunt mincinosi.”


Deoarece este o singura asertiune nu vom mai parcurge etapa reprezentarii
propozitionale. Subiectul este politicienii, care se refera la o întreaga multime (concept) si va
fi modelat în consecinta printr-o variabila predicativa, de aritate 1: P(x). Pentru a reprezenta
relatia (proprietatea) în care este implicat subiectul mai introducem o variabila predicativa de
aritate 1: M(x). D– interpretarea i în care lucram este aceea în care [P(x)]i = adevarat, daca xi
este politician, [M(x)]i = adevarat, daca xi este mincinos, si D este multimea oamenilor. Este
clar ca în asertiunea respectiva exista o semnificatie cantitativa, pe care o vom surprinde
folosind cuantificatorul ∀. Acesta trebuie atasat în mod corespunzator. Astfel am putea avea
urmatoarele trei situatii distincte:

a) ∀x (P(x) ⇒ M(x))
b) ∀x P(x) ⇒ ∀x M(x) (3.9)
c) ∀x P(x) ⇒ M(x)
98 Reprezentarea cunoasterii

Tinând seama de D- interpretarea folosita, rezulta ca varianta a) modeleaza asertiunea:


“Daca un om este politician, atunci el este mincinos.”, sau “Oricare ar fi un om care este
politician, acel om este mincinos” sau “Toti oamenii care sunt politicieni sunt mincinosi”
(sunt mai multe exprimari în limbaj natural ale aceluiasi enunt din punct de vedere logic si
care sunt echivalente cu acela de la care am plecat). Varianta b) corespunde enuntului: “Daca
toti oameni sunt politicieni, atunci toti oamenii sunt mincinosi”, ceea ce este diferit de cazul
a). În fine, c) ne spune: “Daca toti oamenii sunt politicieni, atunci x este mincinos”; aici
neexistând nici o cuantificare pentru x din M(x) – x este variabila libera în formula respectiva,
interpretarea nu poate fi precizata. Ar trebui sa stim alocarea variabilelor, ceea ce ar face
modelul de reprezentare a cunoasterii pe care îl construim foarte specific si neutilizabil în
prelucrari ulterioare. Se ilustreaza si întareste astfel ideea pe care am precizat-o anterior,
anume aceea ca în modelele pe care le dezvoltam trebuie sa ajungem la formule închise.

Cuantificatorul existential este determinat de situatii ca: “Unii x au proprietatea …”,


sau de cuvinte precum: “câtiva”, “exista”, “un”, iar alteori prezenta cuantificatorului ∃ trebuie
determinata din context.

Exemplul 3.3. “Unii politicieni sunt de încredere.”


Formula corespunzatoare este:

∃x (P(x) ∧ I(x)) (3.10)

unde am folosit variabila predicativa I, de aritate 1, care se interpreteaza la valoarea adevarat


atunci când x se interpreteaza ca fiind de încredere. Variabila predicativa P si D interpretarea
folosita sunt aceleasi ca în exemplul anterior.
Adesea în aceeasi reprezentare apar ambii cuantificatori, situatie care trebuie
manevrata cu atentie, chestiune ilustrata în exemplul urmator.

Exemplul 3.4. “Daca toti politicienii sunt mincinosi, atunci nici un politician nu este de
încredere.”
Putem construi usor modelul, bazându- ne pe cele doua exemple anterioare. Este vorba
despre doua asertiuni între care operatia logica este implicatia; prima asertiune este aceeasi cu
aceea din exemplul 3.2 si folosim varianta corecta de modelare, adica formula a) de la (3.9),
iar a doua asertiune este negatia celei din exemplul 3.3. În acest fel ajungem la formula:

∀x (P(x) ⇒ M(x)) ⇒ 7(∃y (P(y) ∧ I(y))) (3.11)

unde variabilele predicative folosite sunt cele din cele doua exemple anterioare. Este de
observat ca în formula (3.11) nu este necesar ca variabila individuala din prima subformula sa
fie aceeasi cu aceea din a doua subformula si astfel am folosit doua variabile distincte. Totusi,
Sisteme bazate pe cunostinte 99

în acest caz întelesul nu s-ar schimba daca am folosi o singura variabila, existând însa situatii
când trebuie sa alegem cu grija variabilele individuale, ca în exemplul urmator.

Exemplul 3.5. Fie urmatoarea formula:

∀x P(x) ∧ ∃y Z(y) (3.12)

unde P, Z sunt variabile predicative de aritate 1, D = N (multimea numerelor naturale, inclusiv


zero), si D interpretarea folosita este aceea conform careia: [P(x)]i = adevarat, daca xi este
numar pozitiv (mai mare sau egal cu zero) si [Z(x)]i = adevarat, daca xi este zero. În aceasta
situatie, formula (3.12) se interpreteaza la valoarea adevarat – orice element din D este pozitiv
si exista în D un element egal cu zero. În schimb, daca utilizam în cele doua subformule
aceeasi variabila, atunci ajungem la:

∀x P(x) ∧ ∃x Z(x) (3.13)

si în aceeasi interpretare ca mai sus, noua formula se evalueaza la valoarea fals (nu este
adevarat ca orice numar din D care este pozitiv este si egal cu zero). Concluzia este aceea ca
folosirea repetata a aceleiasi variabile în mai multe subformule ale unei formule, determina
restrictii în plus, aspect similar, de exemplu, cu folosirea repetata a unei variabile în
programarea bazata pe reguli.

Modul în care se fixeaza scopul cuantificatorilor (subformula asupra careia acestia


actioneaza) poate de asemenea influenta întelesul formulei. De exemplu, daca în formula
(3.11) schimbam scopul cuantificatorilor, conform expresiei:

∀x ∃y ((P(x) ⇒ M(x)) ⇒ 7 (P(y) ∧ I(y))) (3.14)

si pastram aceeasi D interpretare ca în exemplul (3.4), întelesul va fi altul fata de acela al


formulei (3.11), si anume: “Pentru fiecare politician care este mincinos, exista un om care nu
are atât proprietatea de a fi politician, cât si aceea de a fi de încredere (nu este în acelasi timp
si politician si de încredere).” Cu alte cuvinte, în acest caz formula se interpreteaza ca
adevarata daca exista un singur politician care nu este de încredere, pe când în formula (3.11)
întelesul era acela ca toti politicienii nu sunt de încredere. Ordinea cuantificatorilor este si ea
importanta, asa cum rezulta din exemplul urmator.

Exemplul 3.6. Fie variabila predicativa de aritate 2, VT(x, y), D multimea oamenilor,
si D interpretarea i, conform careia [VT(x, y)]i = adevarat, daca xi si yi reprezinta oameni care
satisfac conditia ca xi l-a votat pe yi (D este o anumita colectivitate). În aceste conditii fie
formulele urmatoare, care difera numai prin ordinea cua ntificatorilor:
100 Reprezentarea cunoasterii

∃y ∀x VT(x, y) (3.15)
∀x ∃y VT(x, y) (3.16)

Cele doua formule modeleaza în interpretarea respectiva asertiuni diferite: “Exista o


persoana pentru care a votat toata lumea” – (3.15), respectiv, “Fiecare a votat pentru cineva” –
(3.16).

3.2.3. Legatura între elementele componente ale unui sistem bazat pe cunostinte
si reprezentarea în limbajul calculului cu predicate de ordin întâi

Conform celor prezentate în primul capitol, un SBC va contine ca parti importante


baza de cunostinte (cuprinzând baza de fapte si baza de reguli) si motorul de inferente. Daca
în baza de fapte exista asertiuni (vezi si paragraful 1.8), al caror model în calculul cu predicate
poate fi obtinut conform celor precizate în paragrafele anterioare, se pune problema gasirii
modelului logic si pentru elementele din baza de reguli. Acestea vor putea fi modelate ca
formule de forma: A = S ⇒ D, unde S este o subformula reprezentând partea stânga (de
conditie) a regulii, iar D pe cea dreapta (de actiune). Legatura dintre baza de fapte si cea de
reguli o da motorul de inferente. Acesta lucreaza conform regulii de deductie modus ponens.
Astfel, atunci când în baza de fapte exista faptele conform carora Si = adevarat, motorul de
inferente, pe baza regulii de deductie mentionate, va determina punerea în executie a
actiunilor cuprinse în D, ceea ce în teoria deductiei ar însemna ca D rezulta ca o consecinta
logica din formulele S si S ⇒ D.

Datorita complicatiilor pe care le implica folosirea calculului cu predicate, determinate


de dificultatea deciziei privind caracterul de tautologie al unei formule, în SBC se lucreaza cu
unele simplificari fata de cazul general considerat în logica. Aceste simplificari se refera la
urmatoarele trei aspecte.

1) D interpretarea i în care lucreaza un SBC este materializata în mod implicit, în


sensul ca toate faptele din baza de fapte sunt considerate a reprezenta formule interpretate ca
adevarate si acelasi lucru este valabil si pentru regulile din baza de reguli. În acest fel, regula
de deductie modus ponens devine aplicabila de îndata ce un fapt sau un grup de fapte sunt
identice (daca reprezinta formule în calculul propozitional), sau unificabile (daca reprezinta
formule în calculul cu predicate) cu subformula reprezentând partea de conditie a unei reguli.
2) Se poate observa ca, din punct de vedere logic, o regula privita ca formula, poate fi
exprimata sub diferite forme, logic echivalente. Motorul de inferente al unui SBC nu va fi însa
capabil în general sa testeze toate formele echivalente ale unei reguli, asa cum rezulta din
urmatoarele exemple.
Sisteme bazate pe cunostinte 101

Exemplul 3.7. Fie regula exprimata prin formula: A ⇒ B. Conform tautologiei:


7 B, A ⇒ B
|= A ⇒ B ⇔ 7B⇒ 7A, se ajunge la regula de deductie , numita modus
7A
tollens.

Aceasta se refera la rationamentul ca daca formula A ⇒ B este adevarata si B este


falsa, atunci A este falsa. Acest tip de rationament, util în practica, nu este de obicei efectuat
în mod direct de catre un SBC. Totusi, inconvenientul poate fi depasit: atunci când utilizatorul
are nevoie de un asemenea tip de rationament, îl va putea materializa, folosind tot regula
7 B, 7 B ⇒ 7 A
modus ponens, sub forma , cu conditia ca în SBC respectiv sa poata fi
7A
materializata negatia.

Exemplul 3.8. Fie regula exprimata prin formula:

7A ∧ 7B ⇒ C (3.17)

Din punct de vedere logic aceasta are mai multe forme echivalente, pe care le vom
deduce usor pe baza tautologiei:

|=(7A ∧ 7B ⇒ C) ⇔ (A∨B∨C) (3.18)

Acestea sunt:

(7A ∧ 7C) ⇒ B (3.19)


(7B ∧ 7C) ⇒ A (3.20)
7A ⇒ (B ∨ C) (3.21)
7B ⇒ (A ∨ C) (3.22)
7C ⇒ (A ∨ B) (3.23)

Faptul ca formulele (3.19) ÷ (3.23) sunt echivalente cu formula (3.17) rezulta facând
aceeasi echivalare ca în (3.18). Dintre aceste forme echivalente, variantele (3.21), (3.22) si
(3.23) nu vor putea fi materializate într-un SBC, în care partea de actiune a unei reguli va
putea fi numai sub forma unei formule conjunctive (o regula nu poate determina o actiune sau
alta).

Exemplul 3.9. Tautologia: |= A ∨ B ⇒ C ⇔ (A ⇒ C) ∧ (B ⇒ C) este folosita în SBC,


în sensul ca de obicei partea de conditie a unei reguli nu poate fi sub forma de disjunctie, dar
aceasta nu limiteaza posibilitatile de rationament; se poate folosi a doua subformula din
102 Reprezentarea cunoasterii

echivalenta de mai sus, ceea ce înseamna scrierea a doua reguli de productie distincte, având
aceeasi parte de actiune cu regula de plecare si drept parti de conditie, subformulele aflate în
disjunctie în regula initiala.

3) Este dificil pentru un SBC sa lucreze cu elemente ce îsi au corespondentul în


formule din calculul cu predicate (se ajunge la ineficienta ca timp si/sau spatiu de memorie) si
de aceea se folosesc mai ales fapte si reguli corespunzatoare unor formele din calculul
propozitional. Aceasta presupune o folosire limitata a variabilelor. De exemplu, în mediul
CLIPS variabilele nu pot fi folosite în baza de fapte, dar pot fi folosite în baza de reguli.
Aceasta înseamna ca în CLIPS motorul de inferente foloseste urmatoarele forme ale regulii de
deductie modus ponens:

C, C ⇒ D
(3.24)
D

A( a), ∀x ( A( x ) ⇒ B( x ))
(3.25)
B( a )

unde C, D sunt formule în calculul propozitional, A, B sunt formule în calculul cu predicate


care depind de variabila x, iar a este o constanta. Forma (3.24) corespunde cazului în care nu
apar variabile nici în regula si nici în faptul sau faptele de activare a acesteia, iar forma (3.25)
cazului în care în regula sunt folosite variabile. În situatia a doua, prin procesul de potrivire
(corespunzator unificarii din demonstrarea automata a teoremelor), variabilele din regula se
leaga (instantiaza) si în functie de legarea respectiva rezulta consecinta executiei regulii.

Un motor de inferente care admite orice forma de regula de deductie din calculul cu
predicate se numeste motor de inferente de ordin 1. Denumirea provine de la partea din logica
numita calculul cu predicate de ordin întâi. Forma generala a regulii de deductie dupa care ar
lucra un asemenea motor de inferente ar fi:

∀xA( x ), ∀ x( A( x ) ⇒ B ( x ))
(3.26)
∀xB( x)
unde A, B si x au aceeasi semnificatie ca în (3.25). Acest caz înseamna ca variabilele pot fi
folosite atât în partea de baza de fapte, cât si în aceea de baza de reguli a SBC. Un motor de
inferente care lucreaza numai dupa forma particulara (3.24) a regulii de deductie modus
ponens, ceea ce înseamna absenta folosirii variabilelor, se numeste motor de inferente de
ordin 0. Cazul intermediar, acela al motorului de inferente care foloseste forma (3.25), se
numeste motor de inferente de ordin 0,5.
Sisteme bazate pe cunostinte 103

3.3. Reprezentarea cunoasterii prin modele structurate

Daca din punct de vedere al aspectelor teoretice modelul limbajului calculului cu


predicate de ordin întâi este cel mai riguros, pentru aplicatiile practice din anumite domenii si
pentru cresterea eficientei computationale s-au dezvoltat si alte tipuri de reprezentari. Astfel,
pentru situatii precum: clasificare, prelucrare a limbajului natural, planificare a activitatii
robotilor, se dovedesc utile modelele de tip structurat. Acestea si-au avut punctul de plecare în
bazele de date relationale, în care sunt puse în evidenta în mod explicit relatiile între entitati,
facilitând accesul imediat al programului la obiectele care sunt înrudite. Ideea respectiva a
fost dezvoltata, astfel încât modelele de reprezentare a cunoasterii prezentate în continuare
sunt adaptate unor mecanisme de efectuare eficienta a unor tipuri specializate de inferente. În
acest fel, desi se pierde din generalitatea pe care o are un model de tip logic, se câstiga în
apropierea fata de limbajul natural si în eficienta computationala.

3.3.1. Reprezentarea cunoasterii prin retele semantice

Retelele semantice au fost pentru prima data dezvoltate de Quillian, în anul 1968,
plecând de la caracterul de asociativitate al memoriei umane; de aceea s-au numit si retele
asociative. Un obiect, eveniment sau situatie are o anumita structura ce poate fi modelata
printr-un graf. De aici, într-o retea semantica primitivele reprezentationale sunt nodurile si
arcele, care sunt si elementele acesteia, adica o retea semantica este un graf orientat si
etichetat. Atât nodurile cât si arcele sunt etichetate. Etichetele nodurilor pot fi: concepte,
instante, valori si proceduri. Arcele sunt etichetate cu relatii ce exista între noduri. Astfel, un
nod concept este unit cu un nod instanta a sa printr- un arc este-un (este-o), iar doua concepte,
dintre care unul îl cuprinde pe celalalt, sunt unite prin arcul subset (fig. 3.2).
Este de observat ca arcele este-un corespund relatiei de apartenenta, iar arcele subset
corespund relatiei de incluziune din teoria multimilor. În plus, arcele subset corespund unei
relatii tranzitive, ceea ce nu mai este valabil pentru arcele este-un. În cazul din fig. 3.3, nodul
“Ion” este un nod de tip instanta, în timp ce toate celelalte noduri reprezinta concepte (vezi si
paragraful 3.1). Arcele este-un si subset creeaza într-o retea semantica o clasificare: nodurile
de la nivelul superior se refera la conceptele generice, iar cele de la nivelul de baza vor fi
instante. O asemenea varianta de model este utila pentru reprezentarea unor universuri de
discurs în care apar clasificari – taxonomii (în acest sens arcele respective se numesc si
primitive taxonomice).
În ierarhia determinata de succesiunea arcelor de tip este-un si subset, în situatia în
care se utilizeaza un singur nivel de arce este-un, apare o posibilitate de a efectua inferente pe
baza relatiei de mostenire (tranzitivitate) din ierarhia respectiva. Astfel, în exemplul din fig.
3.3 avem:
104 Reprezentarea cunoasterii

Ion este un om. Omul este mamifer.


Concept
Concept Mamiferul este fiinta.
generic
Este-un
Subset De aici concluzia:
Instanta Subconcept
Ion este o fiinta.
Fig. 3.2. Nodurile concept si
instanta si arcele corespunzatoare
În schimb, dupa cum s-a precizat mai sus,
Meserie tranzitivitatea nu se poate aplica acolo unde apare o
Fiinta înlantuire de mai multe arce este-un; astfel, în
Este-o exemplul din fig. 3.3 nu putem avea din
Subset
Programator succesiunea de arce este-un o concluzie conform
Mamifer
careia Ion este o meserie.
Este-un Subset Pentru a ilustra si celelalte doua tipuri de
Ion Om noduri ale unei retele semantice vom considera
Este-un exemplul din fig. 3.4. Este vorba despre un
Fig. 3.3. Un fragment de retea fragment de retea semantica cu privire la un mediu
semantica ce contine câteva echipamente industriale. Pentru a
reprezenta universul de discurs respectiv s-a folosit o retea semantica în care apar si
proprietati ale obiectelor. Acestea sunt descrise ca etichete ale unor arce. Un asemenea arc
pleaca dintr-un nod ce reprezinta o instanta sau un concept înzestrat cu proprietatea modelata

Apucator
Actionare
Limbaj Echipament Electrica
industrial
procedural Efector
Subset Subset
Numar grd.
Actionare
Calcul mobilitate Robot Presa Hidraulica
numar gdm Procedura industrial
Este-o
Este-un Este-un
PP 1
Este-un
Limbaj de IRB R1
RAPID programare
1400 Numar elemente
mobile
Numar grd. 3
Numar cuple
mobilitate
Valoare 3 Efector
6
Pistol de
Fig. 3.4. Fragment de retea semantica vopsire
pentru un mediu industrial
Sisteme bazate pe cunostinte 105

si ajunge într-un nod de tip valoare, adica un nod ce ne da valoarea proprietatii respective. În
acest fel, în reteaua din fig. 3.4 etichetele arcelor se refera la doua tipuri de proprietati: cele
legate de apartenenta/incluziune si respectiv celelalte tipuri de proprietati. Astfel, întelesul
este acela conform caruia:

R1 este un robot industrial. R1 are efector pistol de vopsire. Echipamentul industrial


are actionare electrica.

Reteaua semantica, în functie de modul de plasare a arcelor de tip proprietate, creeaza


si posibilitatea de mostenire a proprietatilor: orice proprietate a unui nod de pe un nivel
ierarhic superior va fi mostenita de nodurile aflate în conexiune cu acesta si pe un nivel
ierarhic inferior. Acesta este un alt tip de inferenta ce se poate efectua pe o retea semantica. În
exemplul din fig. 3.4 avem:

IRB 1400 este un robot industrial. Robotul industrial este echipament industrial.
Echipamentul industrial are actionare electrica.
De aici concluzia:

IRB 1400 are actionare electrica.

Efectuarea rationamentelor prin acest mecanism de mostenire este un avantaj pentru


retelele semantice – proprietatile pot fi atasate la nivelul cel mai înalt de abstractizare, ceea ce
atrage o eficienta în memorarea informatiilor, dar ridica si o serie de probleme. Astfel, o parte
din instantele unui concept sau unele subconcepte pot fi în situatia în care determina exceptii
de la valoarea obisnuita a proprietatii respective; altfel spus, sunt cazuri când o proprietate a
unui concept nu trebuie sa fie mostenita cu aceeasi valoare de toate instantele sale, sau de
toate subconceptele sale. Este astfel necesar ca mecanismul de mostenire a proprietatilor sa
permita manevrarea unor asemenea exceptii. Regula folosita cel mai frecvent în retelele
semantice în acest sens este: valoarea unei proprietati a unui concept sau a unei instante se va
determina de pe drumul ascendent, care pleaca din nodul concept sau instanta respectiv, de la
prima (cea mai apropiata) întâlnire a unui arc având ca eticheta acea proprietate. În acest fel,
pe exemplul considerat avem:

Robotul R1 are efector pistol de vopsire. Robotul IRB 1400 are efector apucator
(valoare mostenita de la conceptul robot industrial). Presa are actionare hidraulica. Robotul
industrial are actionare electrica (valoare mostenita de la conceptul echipament industrial).

Felul în care se produce mostenirea proprietatilor într-o retea semantica trebuie


comentat si în conexiune cu semnificatia logica a arcelor retelei. Astfel, arcele este-un si
106 Reprezentarea cunoasterii

subset pot exprima fie conditii necesare si suficiente, fie numai conditii necesare, sau
suficiente (în functie de sensul în care privim reteaua) pentru apartenenta unei instante la un
concept sau pentru incluziunea unui subconcept la un concept generic. Varianta mai putin
stricta este mai des folosita, legat de faptul ca frecvent avem cunostinte incomplete asupra
unui univers de discurs. De exemplu, putem privi reteaua din fig. 3.4 în sensul ca stim despre
robotul industrial ca este un echipament industrial, fara a sti ce alte conditii trebuie îndeplinite
pentru ca un obiect sa fie echipament industrial – a fi echipament industrial este o conditie
necesara pentru a fi robot industrial; în sens invers, daca stim despre o instanta ca este un
robot industrial, atunci vom putea spune ca este si echipament industrial - a fi robot industrial
este conditie suficienta pentru a fi echipament industrial. Nedispunând de o conditie necesara
si suficienta (nu orice echipament industrial este robot industrial), putem trage doar concluzii
de genul celor de mai sus. Pentru arcele care reprezinta proprietati diferite de apartenenta si
incluziune nu mai este vorba nici macar de conditii necesare sau suficiente. Ele exprima doar
o conditie “în general adevarata (adevarata în cele mai multe cazuri)”. De exemplu, cu referire
la reteaua discutata, un echipament industrial are cel mai adesea actionare electrica, fara ca
aceasta sa fie o conditie necesara a unui echipament industrial. În asemenea conditii aparitia
exceptiilor privind mostenirea proprietatilor este explicabila.

O alta problema legata de mostenire este determinata de tipul structurii retelei


semantice: aceasta poate fi organizata ca un arbore sau ca un graf în general. În aceasta
privinta trebuie sa facem remarca felului în care am orientat arcele folosite în retelele
semantice: arcele este-un si subset sunt îndreptate de la nodul succesor la predecesorul
acestuia (ceea ce este opus sensului folosit în mod obisnuit în arbori), în timp ce arcele
etichetate cu proprietati diferite de apartenenta/incluziune sunt îndreptate de la predecesor la
succesor. De exemplu, reteaua semantica din fig. 3.4 este un arbore, având radacina în nodul
Echipament industrial. În schimb, reteaua din fig. 3.3 nu este un arbore: nodul Ion are doi
predecesori – Om si Programator. Într-o asemenea situatie pot apare si efecte favorabile, dar
si dezavantaje. Avantajul este cel deja mentionat, acela ca informatia este stocata în mod
eficient în retea, fara memorari redondante. În cazul considerat, nodul Ion va mosteni atât
proprietatile atasate conceptului de Om, cât si celui de Programator, precum si proprietatile
de la toti predecesorii acestor noduri; de aceea, despre o asemenea retea semantica se spune ca
determina o mostenire multipla, spre deosebire de cazul unei retele care este organizata ca un
arbore si despre care se spune ca determina o mostenire de tip simplu.
Sisteme bazate pe cunostinte 107

În cazul unei retele cu mostenire multipla efectul nefavorabil apare atunci când
valorile unora din aceste proprietati mostenite pe ramuri diferite, intra în conflict, ca în cazul
din fig. 3.5. Aici nodul Robot are doi predecesori, ambii înzestrati cu proprietatea
Functionare, cu doua valori care determina o incompatibilitate atunci când sunt mostenite de
conceptul Robot. Situatii de acest fel se rezolva de la caz la caz, fie admitând ca o proprietate
sa poata avea mai multe valori (reuniunea valorilor mostenite, pentru cazul anterior aceasta
însemnând ca un robot are sau o func tionarea automata sau telecomandata), fie, în cazul în
care este necesara o determinare univoca, va trebui sa reconstruim reteaua.

Functionare
Functionare Dispozitiv de Dispozitiv lucru
Automata Telecomandata
automatizare medii periculoase

Subset Subset
Robot i
a
Fig. 3.5. Un conflict de mostenire într-o retea semantica

Este de mentionat ca nodurile valoare pot intra si ele în ierarhia data de arcele este-un
si subset, asa cum se întâmpla în fig. 3.4. Nodul RAPID este un nod valoare pentru
proprietatea Limbaj de programare atasata nodului IRB 1400 si, în acelasi timp, este o
instanta a conceptului Limbaj procedural.

Sunt situatii când nu este cel mai eficient ca pentru o proprietate sa fie fixata în mod
direct o valoare, ci aceasta sa poata fi dedusa, atunci când este necesara, pe baza informatiilor
din reteaua semantica. Într- un asemenea caz vom folosi în reteaua semantica respectiva un
nod procedura. Pentru aceasta vom completa arcele de tip proprietate (cele diferite de este-un
si subset) cu fatete. Una din aceste fatete va contine eticheta cu numele proprietatii, iar pe a
doua fateta se va specifica daca vom gasi proprietatea ca o valoare – fateta Valoare, sau vom

Valoare Procedura
Numar grd. de mobilitate Numar grd. de mobilitate

Fig. 3.6. Atasarea de fatete arcelor dintr-o retea semantica

determina valoarea proprietatii printr-o procedura – fateta Procedura. De exemplu, în cazul


din fig. 3.6 apar marite doua arce, folosite în reteaua din fig. 3.4, corespunzatoare proprietatii
Numar grade de mobilitate si care au a doua fateta, cu cele doua etichete posibile. Astfel,
arcul cu eticheta Numar grade de mobilitate ce este atasat nodului IRB 1400 are pe a doua
fateta eticheta Valoare, astfel ca la capatul arcului respectiv gasim chiar valoarea proprietatii
108 Reprezentarea cunoasterii

(în cazul considerat valoarea este 6). În schimb, nodul Robot industrial are atasat un arc
Numar grade de mobilitate cu a doua fateta purtând eticheta Procedura. În acest caz arcul
respectiv ajunge în nodul Calcul numar grade de mobilitate (gdm), nod care va determina
lansarea unei proceduri ce asigura calculul numarului gradelor de mobilitate pentru un robot
la care se cunoaste numarul de elemente mobile si numarul de cuple cinematice. De exemplu,
aceasta procedura va fi activata daca trebuie aflata valoarea proprietatii numar grade de
mobilitate pentru nodul R1. În reteaua semantica din fig. 3.4 nu am folosit o reprezentare
spatiala a arcelor si daca pentru un arc corespunzator unei anumite proprietati am folosit
numai fateta Valoare, am considerat-o pe aceasta implicita si nu am mai reprezentat-o.
Rezulta cum, de la caz la caz, vor putea fi folosite cele doua posibilitati de determinare a
valorii unei proprietati – direct ca o valoarea, sau printr-o procedura atasata.

Toate retelele semantice pe care le-am prezentat pâna acum au avut rolul de a preciza
relatii exis tente între anumite instante si concepte, relatii determinate de structura sau de
definirea acestora. Despre aceste retele semantice se spune ca sunt de tip definitional sau
structural sau inferential [Sow 91], [Leh 92]. Ultima caracterizare provine din aceea ca o
asemenea retea semantica ne permite sa efectuam în mod eficient inferente, folosind concepte
ce au atasate proprietati si tinând seama de apartenentele la diferitele concepte; constructia
unei asemenea retele se bazeaza pe arcele Este-un si Subset si pe proprietati atasate la nivelul
ierarhic potrivit. Spre deosebire de acestea, exista si retele semantice numite descriptive sau
asertionale care descriu o stare de fapt existenta la un moment dat. Fara a intra în detaliile
modelarii timpului, putem observa ca retelele semantice structurale sunt mai putin dependente
de timp (cu referire la fig. 3.5, un robot este întotdeauna un dispozitiv de automatizare), în
timp ce o retea semantica asertionala se refera la un eveniment având loc la un anume
moment de timp; de aceea, pentru acestea se foloseste si denumirea de retele evenimentiale.
Ele vor apare ca structuri de tip stea: un nod de tip eveniment din care pleaca arce spre
participantii la eveniment. Nu trebuie însa înteles despre cele doua clase de retele
(definitionale – asertionale ) ca sunt mutual exclusive, asa cum va rezulta si din exemplul
urmator, în care vor fi folosite ambele tipuri.

Exemplul 3.10. În fig. 3.7 este reprezentat printr-o retea semantica universul de discurs
pentru care în calculul cu predicate am folosit modelul dat de formulele (3.4), (3.5) si (3.8);
vom putea observa deosebiri între cele doua variante, ca si avantajele pe care le aduc fiecare.
În fig. 3.7 apare o retea la care portiunea de sus are un caracter structural, iar cea de jos unul
asertional. Apar o serie de completari în ceea ce priveste modelul de retea semantica.
Astfel, o problema care apare este aceea a aritatii relatiilor ce pot fi modelate în
aceasta varianta de reprezentare a cunoasterii. Într-o retea semantica, tinând seama ca folosim
arce legând doua noduri, sunt usor de exprimat relatiile binare (cu doua argumente); facând
corespondenta cu calculul cu predicate va fi vorba despre variabile functionale sau predicative
Sisteme bazate pe cunostinte 109

Componenta Robot
Baza
Brat_robot_1
Componenta Este-un
Apucator
Componenta
Componenta
Robot_1
Brat
Agent
Tip
2-Conjunctie Eveniment_2 Preconditie
Eveniment_1
Argument Argument
Actiune
Eveniment_4
Eveniment_3
Avanseaza
Agent
Actiune Obiect Agent Obiect
Actiune

Operator Apasa Buton_P Magazia Piesa Contine

Fig. 3.7. O retea semantica structurala si asertionala

binare. De exemplu, arcul care leaga în reteaua din fig. 3.7 Robot_1 de Brat_robot_1
corespunde unei variabile predicative cu doua argumente: Componenta(Robot_1,
Brat_robot_1). În practica vor apare însa si relatii cu un numar de argumente diferit de 2; fara
a exista o standardizare neta în acest sens, fig. 3.7 prezinta o solutie posibila. Astfel, formula
(3.5) din modelul din calculul cu predicate, care facea apel la o variabila predicativa cu un
singur argument, a fost modelata în reteaua semantica prin arcul Este-un aflat între nodurile
Robot_1 si Robot. Solutia a constat în introducerea unei noi primitive reprezentationale –
Este-un. Aceasta ne va ajuta sa modelam anumite tipuri de formule constituite din predicate
cu un singur argument. Într-un mod similar vom rezolva si o situatie de forma:

|= Sigur_în_functionare(Robot_industrial) (3.27)

Formula de mai sus va putea fi modelata prin una din cele doua variante din fig. 3.8.
De data aceasta a fost vorba de un arc ce reprezinta o proprietate care nu se refera la
apartenenta/incluziune si care ajunge în nodul valoare corespunzator. Cele doua solutii difera
prin aceea ca în cazul a) am descompus predicatul din formula (3.27) într-o proprietate si
valoarea acesteia, în timp ce în cazul b) am pastrat predicatul respectiv si am introdus eticheta
Proprietate pe arcul dintre cele doua noduri. Este de remarcat faptul ca în acest ultim caz, ca
si în situatia modelarii din fig. 3.7 a formulei (3.5), notiunile Proprietate si respectiv Este-un
110 Reprezentarea cunoasterii

au un caracter de metacunostinte,
Functionare fiind deasupra cunoasterii legate de
Robot_industrial Sigura
universul de discurs avut în lucru.
a)
Un aspect deosebit a fost si
Proprietate Sigur_în_ acela al transpunerii în reteaua
Robot_industrial functionare semantica a formulei (3.4). Fara a
b) mai lua în considerare cuantificatorul
Fig. 3.8. Doua posibilitati de modelare pentru universal, aici ar fi fost necesara o
un predicat de aritate 1 variabila predicativa cu 4 argumente:

Componenta(Robot, Baza, Apucator, Brat) (3.28)

Conform celor explicate la modelarea piesei de cunoastere respective în calculul cu


predicate (vezi si formula (3.2)), exista o distinctie între primul argument si celelalte trei.
Acestea din urma sunt componentele obiectului compus, fiind de remarcat faptul ca ordinea
lor nu are importanta din punct de vedere al semanticii. Situatia din fig. 3.7 este apropiata de
aceea din formula (3.2), dar conjunctia dintre cei termeni corespunde în reteaua semantica la 3
arce cu aceeasi eticheta – Componenta – care pleaca toate din nodul Robot. În acest fel, prin
nodul Robot, arcele cu o eticheta unica plecând din el, si nodurile în care acestea ajung, am
putut modela formula (3.28). O asemenea solutie are caracter de generalitate pentru
materializarea într-o retea semantica a unei relatii cu mai multe argumente: se foloseste un
nod din care pleaca mai multe arce cu aceeasi eticheta, în numar corespunzator aritatii relatiei
respective. Este de remarcat felul în care în acest model Robot_1 are o singura componenta
Brat_robot_1, situatie în care am procedat dupa formalismul obisnuit pentru relatiile binare în
retelele semantice: am atasat un arc cu eticheta Componenta, care ajunge în nodul ce da
valoarea proprietatii respective. În plus, aici se aplica regula cunoscuta privind mostenirea
proprietatilor: valoarea unei proprietati pentru un nod se determina de la prima întâlnire,
plecând de la acel nod, a unui arc purtând ca eticheta acea proprietate. În acest fel
interpretarea retelei este aceea conform careia un robot în general are trei componente (baza,
apucator, brat), în timp ce Robot_1 are o singura componenta, ceea ce este diferit fata de
modelul corespunzator din calculul cu predicate.

Partea de jos a retelei semantice din fig. 3.7 corespunde unei retele de tip asertional
(evenimential); se reprezinta starea de fapt corespunzatoarea evenimentelor modelate în
calculul cu predicate prin formula (3.8). În retea exista dedicat câte un nod pentru un
eveniment si din acestea pleaca arce reprezentând elementele implicate în fiecare eveniment.
Arcele respective se numesc legaturi (relatii) cazuale, denumirea provenind de la cazurile
gramaticale; daca punctul de plecare a fost analiza gramaticala, ce poate facilita sistemele de
întelegere a limbajului natural, relatiile cazuale din retelele semantice sunt atasate în functie
Sisteme bazate pe cunostinte 111

de semnificatia (semantica, rolul) participantilor unui eveniment. Relatiile cazuale cele mai
des folosite sunt :

- Actiune (Verb) exprimând actiunea ce se desfasoara în timpul evenimentului


respectiv;
- Agent coreleaza nodul eveniment de nodul reprezentând actorul evenimentului; cel
ce îndeplineste acest rol exprima autorul actiunii, care va fi identic cu subiectul
gramatical, daca verbul nu este la diateza pasiva;
- Obiect desemneaza elementul afectat de activitatea agentului, cel care sufera
actiunea desfasurata;
- Receptor exprima elementul caruia i se atribuie actiunea sau i se atribuie obiectul
implicat în actiunea respectiva;
- Instrument reprezinta entitatea folosita de un agent în realizarea unei actiuni.

O parte din aceste tipuri de arce pot fi urmarite pe exemplul din fig. 3.7. Este de
remarcat felul în care sunt plasate în jurul unui nod care reprezinta un eveniment, cu ajutorul
arcelor reprezentând relatii cazuale, toate cunostintele cu privire la acel eveniment. În functie
de universul discursului descris vor
Aduce
putea fi necesare si alte tipuri de
Actiune relatii cazuale, ca: Scop, Loc, Timp,
Receptor Obiect Piesa Durata, Distanta, a caror definitie
Operatorul Eveniment_1
este evidenta. Felul în care sunt
Agent folosite relatiile cazuale este
G ilustrat si de exemplul urmator.
a)
Robotul

Exemplul 3.11. Sa se
Pune
reprezinte, prin retele semantice,
Actiune evenimentele corespunzatoare
Receptor Obiect urmatoarelor formulari în limbaj
Robotul Eveniment_2 Piesa
natural:
Agent
G a) Robotul aduce piesa
b)
Operatorul
operatorului.
Fig. 3.9. Retelele semantice asertionale b) Operatorul pune piesa
corespunzatoare exemplului 3.11 robotului.

Reprezentarile corespunzatoare sunt cele din fig. 3.9, remarcându-se felul în care au
intervenit relatiile cazuale Agent, Obiect si Receptor. Trebuie sa observam diferenta calitativa
între nodurile unei retele semantice structurale si cele ale unei retele asertionale. În primul caz
fiecare nod are si o semnificatie independenta de celelalte elemente ale retelei si aceasta
112 Reprezentarea cunoasterii

permite ca orice fragment de retea sa poata fi folosit într- un anume rationament (de exemplu,
în cazul din fig. 3.4 pot izola 3 noduri si spune ca: “PP1 este o presa si are actionare
hidraulica”), în timp ce într-o retea asertionala trebuie preluate într-un rationament toate
nodurile si arcele din jurul unui nod eveniment. În acest sens despre nodurile dintr-o retea
semantica structurala se spune ca sunt noduri individuale, în timp ce acelea dintr-o retea
evenimentiala sunt noduri propozitionale. Diferenta dintre acestea este explicabila prin aceea
ca unele reprezinta relatii binare, iar celelalte (în retelele asertionale) relatii n-are, privite în
forma binara a arcelor.

O problema deosebita pe care o ridica retelele semantice este aceea a modelarii


operatiilor logice si a cuantificatorilor. Astfel, daca se compara formula (3.8) cu reteaua
corespunzatoare din fig. 3.7, constatam ca operatia de implicatie am modelat-o prin arcul
Preconditie care leaga cele doua evenimente corespunzatoare celor doua subformule
conectate prin operatia logica respectiva. În ceea ce priveste conjunctia, solutia a fost de tipul
celei folosite pentru reprezentarea unei relatii n-are. S-a introdus nodul auxiliar 2-Conjunctie
legat de nodul Eveniment_2 prin arcul Tip si de termenii aflati în conjunctie prin arcele
Argument.
Cu privire la cuantificatori, exista o materializare implicita a acestora în retelele
semantice. Astfel, putem face o analiza a felului în care diferitele arce dintr-o retea semantica
modeleaza sau nu formule cuantificate. Un arc Este-un nu corespunde unei formule
cuantificate, ci uneia de baza (vezi definitia 2.28); un exemplu în acest sens este formula (3.5)
si modelul ei din reteaua data în fig. 3.7, conform celor explicate anterior. Un arc Subset
corespunde unei formule cuantificate cu cuantificatorul ∀. De exemplu, formula
corespunzatoare unuia din arcele Subset din reteaua din fig. 3.5 este:

∀x (Robot(x) ⇒ Dispozitiv de automatizare(x)) (3.29)

si o transpunere similara va avea orice arc Subset. Daca luam cazul unei proprietati atasate
unui concept, asa cum este în fig. 3.8a proprietatea Functionare atasata conceptului
Robot_industrial, formula corespunzatoare în calculul cu predicate este:

∀x (Robot_industrial(x) ⇒ Functionare(x, Sigura)) (3.30)

Din cele prezentate rezulta posibilitatea echivalarii între o retea semantica si un model
în calculul cu predicate. În practica o asemenea operatie nu este întotdeauna facila. Astfel,
sunt mai dificil de reprezentat într-o retea semantica cuantificatorii si operatiile logice. Fara a
intra în detalii [Sow 91], [Leh 92], [Fin 79], [Ric 91] negatia poate fi reprezentata printr-un
arc etichetat în mod corespunzator, care sa lege o entitate si negatia acesteia, iar în ceea ce
priveste conjunctia si disjunctia un exemplu de rezolvare este acela din fig. 3.7. Pentru
cuantificatori, materializarea este una implicita, asa dupa cum s-a explicat mai sus pentru ∀,
Sisteme bazate pe cunostinte 113

sau dupa cum, în mod implicit, cuantificatorul ∃ este subînteles pentru partea de retea
semantica evenimentiala a fig. 3.7 – a se face comparatia cu formula (3.8). De asemenea, vom
putea sa pune m în corespondenta un cuantificator ∃ dintr-o formula cu un nod instanta dintr-o
retea semantica. În legatura cu aceasta comparatie, mostenirea cu restrictii practicata într-o
retea semantica este un aspect care nu poate fi încadrat în logica predicatelor de ordin întâi
(este vorba despre folosirea unor logici de ordin superior, în combinatie cu un rationament de
tip nemonoton).

În ceea ce priveste inferentele care se pot face pe o retea semantica, un tip important se
refera la determinarea unei anumite proprietati pentru un nod, tinând seama de ierarhia din
reteaua semantica si de mostenirea proprietatilor. Implementarea unei asemenea inferente
înseamna de fapt gasirea unui algoritm, care primind la intrare numele unui nod si numele
unei proprietati, sa determine la iesire raspunsul DA si valoarea proprietatii, atunci când
conceptul sau instanta reprezentata prin acel nod are proprietatea specificata si raspunsul NU
în caz contrar. Algoritmul corespunzator, în care N este nodul de intrare si P numele
proprietatii, este de urmatoarea forma:

Algoritm 3.1.

Pas 1. Coada : = {N} si Flag : = 0 ; Se initializeaza multimea Coada si bistabilul Flag.


Pas 2. Atâta timp cât (Coada ≠ ? si Flag = 0) executa:
Pas 3. A : = primul element din multimea Coada ; A este eliminat din Coada.
Pas 4. Daca A are un atasat un arc cu eticheta P atunci:
Pas 5. Daca arcul P are fateta Valoare atunci:
Pas 6. Afiseaza eticheta nodului din vârful arcului P
altfel
Pas 7. Executa procedura din nodul în care ajunge arcul P si afiseaza
rezultatul procedurii
Pas 8. Flag : = 1
altfel
Pas 9. Coada : = Coada ∪ {A1 , A1 este un nod în care ajunge un arc Este-un sau
Subset ce pleaca din A}
Pas 10. Daca Flag = 0 atunci afiseaza “ Nodul N nu are atasata proprietatea P”.

În algoritmul de mai sus am marcat prin indentare corpul buclei de tip while si
respectiv portiunile cuprinse pe ramurile daca – atunci. Folosirea unei structurii de tip coada
(FIFO) în acest algoritm determina o cautare în largime, si nu în adâncime, în graful
reprezentat de reteaua semantica, varianta mai eficient în acest caz, în comparatie cu o cautare
în adâncime.
114 Reprezentarea cunoasterii

O alta modalitate de a efectua inferente pe o retea semantica se poate obtine prin asa
numitul mecanism de potrivire (în engleza: “matching” sau “pattern matching”). Astfel,
având o baza de cunostinte organizata ca retea semantica, se va construi un fragment de retea
de acelasi tip (folosind aceleasi primitive reprezentationale), drept rezultat al cautarii unei
piese de cunoastere, cum ar fi de exemplu cazul într-un sistem de interogare dintr- un anumit
domeniu. Întrebarea care a condus la fragmentul de retea semantica determina ca în aceasta sa
existe elemente – noduri si/sau arce neprecizate. Printr-un proces de potrivire între fragmentul
construit si reteaua semantica de baza rezulta atribuirea (legarea) de valori pentru elementele
neprecizate, dupa cum se ilustreaza în exemplul urmator.

Exemplul 3.12. Pe baza retelei semantice din fig. 3.7 se poate gasi raspunsul la
întrebarea: “Cine apasa
? butonul P ?” Corespunzator
acestei întrebari se
Agent construieste fragmentul de
Actiune Obiect retea semantica evenimentia-
Apasa Eveniment_? Buton_P la din fig. 3.10, în care nodul
eveniment nu are fixat un
Fig. 3.10. Fragment de retea semantica rezultat de la un index si nici nodul în care
sistem de interogare a unei baze de cunostinte
ajunge arcul Agent nu este
precizat. Prin potrivirea pe
reteaua din fig. 3.7, nodul eveniment se suprapune peste nodul Eveniment_3 din reteaua de
baza, iar nodul agent capata eticheta Operator, obtinându-se astfel raspunsul la întrebare.

În functie de specificul universului de discurs mai pot apare si alte tipuri de inferente
pe retelele semantice; materializarea acestora în programe va presupune construirea a diferiti
algoritmi de parcurgere a grafului retelei semantice, algoritmi ghidati de cunostintele
înmagazinate în retea. Daca retelele semantice reprezinte modele în care cunostintele apar
într-o maniera structurata, un grad sporit al acestei structurari se obtine în cazul reprezentarii
prin cadre.

3.3.2. Reprezentarea cunoasterii prin cadre

Modelul de cadru (în engleza “frame”) a fost introdus de catre Minsky [Gia 89],
plecând de la ideea ca inteligenta presupune frecvent folosirea unor scheme de cunoastere,
bazate pe o experienta anterioara în domeniul problemei ce se rezolva, scheme cu ajutorul
carora se interpreteaza noile situatii ivite; adesea, comportarea inteligenta presupune, nu o
rezolvare “de la zero”, ci o adaptare a unor tipare (prototipuri) deja acumulate. Aceasta
înseamna ca acest model este mai ales adecvat pentru a reprezenta cunostinte cu un caracter
stereotip: caracteristici obisnuite ale obiectelor si relatii tipice între obiecte.
Sisteme bazate pe cunostinte 115

Organizarea informatiilor în cadre este structurata, cadrele fiind astfel încadrate în


aceeasi categorie cu retelele semantice, cu care au si o serie de elemente comune. Astfel, la fel
ca la retelele semantice, toate cunostintele despre o entitate sunt grupate – aici în acelasi cadru
si în cadrele vecine. Un aspect deosebit este acela ca într-un cadru sunt puse în evidenta
cunostintele cele mai plauzibile despre entitatea modelata. O alta diferenta este si aceea ca,
daca în retelele semantice reprezentarea este în mod obisnuit în doua dimensiuni (exista totusi
exceptii, în sensul folosirii mai multor nivele de retele interconectate pentru a creste
expresivitatea), în cadre se adauga o a treia dimensiune, prin aceea ca nodurile pot avea o
structura proprie.

Cadrele au si unele asemanari cu structurile de date folosite în programarea


conventionala, în sensul ca reprezinta colectii de obiecte ce au atasate anumite tipuri de
caracteristici, obiecte între care exista legaturi. Distinctia fata de acestea este data de tiparele
pe care le respecta, în concordanta cu dependentele logice între entitati, si de metodele de
inferenta ce sunt aplicabile pe cadre; de asemenea, structura unui cadru este mai putin rigida
decât aceea a unui articol dintr-o baza de date, ea putându-se modifica prin interventia asa
numitilor “demoni” atasati cadrului respectiv. În plus, într-o baza de cunostinte care foloseste
cadre, acestea trebuie ca ele însele,
Nume_cadru: Robot_industrial prin cunostintele înmagazinate, sa
Subset Echipament_industrial pastreze corectitudinea si
actualitatea cunostintelor.
Producator If-added: Verific_prod

Tip_robot If-added: Corelare_prod Concret, un cadru este o


structura, care se identifica printr-o
Clasa_robot Default: Programabil eticheta – numele cadrului, si în care
sunt continute perechi de forma:
Efector Default: Apucator
caracteristica (proprietate, atribut)
Default: 6 – valoare (în engleza: “slot –
Nr_grade_mobilitate
If-needed: Calcul_nr_gdm
value”). Pentru exemplificare în fig.
Nr_cuple Default: 6 3.11 este prezentata reprezentarea
printr-un cadru a conceptului de
Nr_elemente_mobile Default: 6 robot industrial (a se compara
modelul respectiv cu cel dat în
Limbaj_programare If-added: Versiune
If-removed: Actualiz_clasa reteaua semantica din fig. 3.4).
Caracteristicile se pot referi atât la
Fig. 3.11. Un cadru generic pentru Robot_industrial apartenenta/incluziune, cât si la alte
proprietati, la fel ca arcele din
retelele semantice. Prima caracteristica din cadrul Robot_industrial este Subset, cu aceeasi
semnificatie de la retelele semantice – conceptul de robot industrial este inclus în acela de
echipament industrial.
116 Reprezentarea cunoasterii

Aceasta va presupune ca în baza de cunostinte sa existe si un cadru cu numele


Echipament_industrial si în acest fel se produce si un proces de mostenire a proprietatilor
(caracteristicilor): cadrul Robot_ industrial mosteneste perechile caracteristica – valoare de la
cadrul Echipament_industrial. Se aplica aceeasi regula ca la retelele semantice. De exe mplu,
caracteristica Actionare, care nu apare în fig. 3.11, daca exista la cadrul
Echipament_industrial împreuna cu valoarea Electrica, atunci perechea respectiva va fi
mostenita de conceptul Robot_industrial si de orice instanta a sa. În situatia în care apare o
contraindicatie pentru o caracteristica, de exemplu robotul RH1 are actionare pneumatica,
atunci în cadrul cu numele RH1 va fi atasata în mod explicit caracteristica Actionare cu
valoarea Pneumatica, si aceasta va fi luata în considerare (principiul este acelasi ca la retelele
semantice: valoarea unei proprietati pentru o entitate este determinata de la întâlnirea cea mai
apropiata fata de entitatea în cauza a proprietatii respective). Rezulta ca, prin valorile atasate
caracteristicilor Subset, se creeaza legaturi între cadre, materializate prin pointeri, care permit
o stocare eficienta a informatiilor, reteaua de cadre beneficiind de procesul de mostenire. Mai
mult, aceste legaturi nu sunt realizate numai prin intermediul caracteristicii Subset, ci si
celelalte caracteristici pot avea ca valoare un alt cadru, care sa pastreze într-o organizare
corespunzatoare cunostintele privitoare la valoarea respectiva.
În cadre sunt modelate presupuneri, bazate pe experienta, privind valorile cele mai
asteptate ale caracteristicilor si sunt facilitate anumite tipuri de inferente, prin elemente de tip
procedural. Ideea, într-o forma incipienta, apare si la retelele semantice, prin fatetele atasate
arcelor. În cadre fatetele sunt atasate pentru calculul valorilor caracteristicilor. Astfel,
valoarea unei caracteristici poate fi precizata în mod direct, explicit (asa cum se întâmpla
pentru Subset în cadrul din fig. 3.11) sau cu ajutorul unor fatete. Cele mai folosite tipuri de
fatete sunt (nu s-au impus niste denumiri în limba româna):

a) default
b) if-needed
c) if-added
d) if-removed

Fateta default este cea care precizeaza valoarea cea mai asteptata (probabila) a unei
caracteristici. Daca valoarea unei caracteristici nu este data explicit, sau nu apare o indicatie
de folosire a unei alte fatete, atunci valoarea ce va fi considerata va fi aceea data de fateta
default. De exemplu, cu referire la cadrul din fig. 3.11, Efectorul unui robot industrial va avea
valoarea Apucator, iar Nr_grade_mobilitate va avea valoarea 6, daca nu apare o indicatie de
folosire a fatetei if-needed.
Fateta if-needed, la activare, ceea ce se întâmpla conform denumirii “în caz de
nevoie”, adica de obicei atunci când apare o contraindicatie privind folosirea fatetei default,
va determina executia unei proceduri. Aceasta, folosind informatiile existente în baza de
cunostinte (de exemplu, în cadrul respectiv sau în alte cadre), poate sa determine valoarea
Sisteme bazate pe cunostinte 117

caracteristicii la care este atasata fateta if-needed. În cazul considerat în fig. 3.11, fateta if-
needed atasata caracteristicii Nr_grade_mobilitate va folosi, printr-o procedura
corespunzatoare, valorile caracteristicilor Nr_cuple si Nr_elemente_mobile.
Fatetele if-added si if-removed sunt activate la introducerea, respectiv îndepartarea
valorii caracteristicii la care sunt atasate; în acest sens, despre aceste fatete se spune ca au un
rol de triggere, deoarece sunt declansate de schimbarile care se produc în baza de cunostinte.
În exemplul anterior, fatetele if-added atasate caracteristicilor Producator si Tip_robot
determina la introducerea valorilor respective o verificare si o corelare a acestora. Pentru
aceasta poate exista un cadru privind producatorii de roboti industriali, care sa contina
informatiile necesare acestor doua proceduri. Caracteristica Limbaj_programare are atasata
atât o fateta if-added, care va verifica versiunea pentru valoarea adaugata, cât si o fateta if-
removed, care va fi activata la îndepartarea valorii caracteristicii respective. Într-o asemenea
situatie, adica atunci când este vorba despre un robot ce nu este dotat cu limbaj de
programare, procedura atasata fatetei if-removed va actualiza în mod corespunzator valoarea
caracteristicii Clasa_robot.
Procedurile atasate fatetelor unui cadru se numesc si demoni, ele intrând în executie la
momentul potrivit. Din acest punct de vedere cadrele pot fi folosite pentru materializarea
programarii orientate pe evenimente, în cazul în care evenimentele de interes determina
modificarea valorii acelor caracteristici care activeaza demonii. Putem concluziona asupra
existentei a sase modalitati distincte de obtinere a valorii unei caracteristici: cea explicita, cele
corespunzatoare celor patru tipuri de fatete enumerate mai sus, si cea prin mostenire. Din
punct de vedere al clasificarii cunoasterii (vezi paragraful 1.4), combinarea tuturor acestor
variante înseamna ca un cadru îmbina o cunoastere de tip declarativ, data prin continutul
initial al cadrelor si ceea ce se obtine prin mostenire, cu una de tip procedural, data prin
demoni.

Un cadru poate avea un caracter generic, asa cum este cel prezentat anterior, el
corespunzând întregii clase de roboti
Nume_cadru: Robot_IRB1400 industriali, sau poate fi un cadru
Este-un specific unei anumite instante. Astfel,
Robot_industrial
din cadrul anterior, poate fi generat un
Producator ABB Robotics cadru pentru o anumita instanta de
Tip_robot IRB1400 robot, prin completarea corespunza-
toare a valorilor caracteristicilor – vezi
Clasa_robot Programabil fig. 3.12. Aceasta se realizeaza fie de
catre cel care dezvolta baza de
Nr_grade_mobilitate 6
cunostinte, sau de catre partea de
Limbaj_programare RAPID 0.3 motor de inferente a bazei de
cunostinte, si va implica activarea
Fig. 3.12. Cadrul pentru robotul IRB 1400 diferitelor proceduri atasate fatetelor.
118 Reprezentarea cunoasterii

Se observa ca noul cadru, cu numele Robot_IRB1400, având un caracter de instanta,


are în locul caracteristicii Subset pe aceea Este-un, schimbare realizata în procesul de generare
a cadrului respectiv. În acelasi proces, se poate ca anumite caracteristici sa fie omise, fie
datorita faptului ca nu mai sunt necesare (cum este cazul pentru Nr_cuple si
Nr_elemente_mobile, care sunt utile numai la calculul valorii pentru Nr_grade_ mobilitate,
situatie depasita aici), sau pentru a evita o memorare ineficienta, atunci când pot fi mostenite
de la cadrul generator (cum este cazul pentru caracteristica Efector, care este mostenita
împreuna cu valoarea Apucator, obtinuta din fateta default atasata cadrului Robot_industrial).
Mai trebuie amintit ca pentru cadrul Robot_IRB1400 se vor mosteni si caracteristici de la
cadrul Echipament_industrial (datorita faptului ca el apartine clasei date de cadrul
Robot_industrial, care prin caracteristica Subset determina mostenirea mentionata). Din acest
punct de vedere, cadrele, la fel ca retelele semantice, determina o clasificare, organizarea prin
legaturile create de valorile caracteristicilor fiind una ierarhica: la nivelul superior se afla
cadrele corespunzatoare conceptelor generice, iar la nivel inferior cele cu rol de instanta.

O flexibilitate sporita se obtine prin diferitele tipuri de valori asociate caracteristicilor.


Astfel, pe lânga situatiile în care o valoare este o constanta precizata, se poate ca o
caracteristica sa aiba atasata o întreaga multime de valori; de exemplu, Subset din cadrul
Robot_industrial poate avea drept valoare multimea {Echipament_industrial,
Dispozitiv_lucru_medii_periculoase}, si evident, în acest caz, mostenirea se va face de la
ambele concepte. Pot apare, în mod direct sau prin intermediul procedurilor atasate, restrictii
asupra valorilor, fie prin precizarea unor limite sau a unor tipuri impuse. De exemplu,
valoarea caracteristicii Nr_grade_mobilitate se poate impune a fi de tip întreg si a se încadra
între 1 si 8.
Valoarea unei caracteristici poate fi si numele unui alt cadru, în care sa fie pastrate în
detaliu cunostintele privitoare la caracteristica respectiva. De exemplu, cadrul
Robot_industrial poate avea ca valoare a caracteristicii Producator, în locul fatetei if-added
din fig. 3.11, simbolul Fabricant_roboti_industriali, care sa fie numele unui alt cadru, si în
acesta, într-o organizare structurata, sa apara cunostintele cu privire la producatorii de roboti.
În acest fel apar conexiuni între cadrele din baza de cunostinte – o retea de cadre, în care
nodurile sunt cadre, iar arcele sunt date de valorile unor caracteristici ce sunt nume ale altor
cadre, adica practic sunt pointeri la acele cadre.
Un cadru are o putere de expresivitate mai mare decât a retelelor semantice, obtinuta
prin îmbinarea tipurilor de cunoastere declarativa si procedurala, iar în plus demonii atasati
fatetelor sunt considerati a determina o posibilitate de modelare a cunostintelor “de bun-simt”
(în engleza: “commonsense knowledge”), aspect înca manevrat cu dificultate de SBC. Este
vorba despre acele lucruri “general cunoscute” si care sunt folosite atunci când nu se dispune
de alte cunostinte, mai specifice universului de discurs; asemenea cunostinte pot fi modelate
în cadre, în primul rând de fatetele default, dar si de unii demoni, si ele vor predomina într-un
cadru generic, în timp ce un cadru instanta înglobeaza cunostinte specifice. De asemenea,
Sisteme bazate pe cunostinte 119

demonii pot cauza punerea în executie a unor reguli; exista sisteme de programare, ca de
exemplu KEE (Knowledge Engineering Environment) [Gia 89], [Pop 94] care îmbina cadrele
cu regulile de productie, acestea putând determina rezolvarea unei probleme, afisarea unor
explicatii sau adresarea de întrebari utilizatorului.

La fel cum la retelele semantice existau cele doua tipuri – structurale si asertionale – si
cadrele pot fi folosite pentru a reprezenta evenimente. Pentru cadrele destinate acestui scop se
foloseste denumirea de scenarii (în engleza: “scripts”). Exista unele aspecte particulare ale
cadrelor folosite ca scenarii; desi se pleaca de la aceeasi idee de baza, aceea a caracterului
stereotip al unor situatii, la scenarii se accentueaza asupra relatiei de cauzalitate, tinând seama
de faptul ca evenimentele apar cel mai frecvent într-o înlantuire conditionata cauzal si nu în
mod izolat.
Astfel, un scenariu este o structura prin care se descrie o secventa de evenimente,
secventa care are un caracter stereotip pentru un anumit context. Organizarea este aceea a
cadrelor, cu numele scenariului pentru identificarea structurii si perechile caracteristica –
valoare; de asemenea, vor fi folosite aceleasi tipuri de fatete ca la cadre. Un exemplu de
scenariu este prezentat în fig. 3.13.

Exista o serie de caracteristici specifice pentru evenimente (asa cum erau relatiile
cazuale în retelele semantice asertionale), pe care le vom regasi într-un scenariu; cele mai
frecvent utilizate sunt ilustrate în exemplul considerat pentru evenimentul cu numele Curs.
Acestea sunt:

Nume_scenariu: Curs
Tip Eveniment_educational
Default: {cadru_didactic, studenti}
Agenti
If-needed: Cursanti
Obiecte Sala_curs
Preconditii {programa_analitica, orar, prelegere}
Default: Agentii sunt obositi
Rezultate
If-needed: Chestionare agenti
Scena1 Intrare studenti în sala_curs

Scena2 Intrare cadru_didactic în sala_curs


Default: cadru_didactic citeste prelegere
Scena3 If-needed: If (studenti = galagiosi) then Insucces

Fig. 3.13. Un scenariu al evenimentului Curs


120 Reprezentarea cunoasterii

• Tip – care precizeaza categoria din care face parte evenimentul modelat; aceasta
caracteristica pare apropiata de Subset, folosita la cadre sau retele semantice. În adevar, ea
arata faptul ca exista trasaturi comune cu acelea ale unui concept mai general, dar spre
deosebire de cazul lui Subset, într-un scenariu nu mai sunt preluate toate caracteristicile de la
conceptul predecesor. În cazul considerat, pot fi caracteristici în scenariul pentru
Eveniment_educational care sa nu apara (sa nu fie mostenite) în scenariul Curs.
• Agenti – precizeaza agentii (ca elemente animate, cele care executa actiunile), care
participa la evenimentul modelat.
• Obiecte – precizeaza entitatile neanimate, care sunt implicate în evenimentul
respectiv.
• Preconditii – fixeaza conditiile ce trebuie îndeplinite înainte ca evenimentul
reprezentat sa poata avea loc. În exemplul din fig. 3.13 aceasta caracteristica are ca valoare o
multime formata din trei elemente; de fapt, exemplul este unul principial si în practica va
trebui sa existe o parte procedurala, care sa fie activata de elementele multimii respective,
verificând includerea cursului în programa analitica si în orar, si faptul ca exista o prelegere
pentru sustinere.
• Rezultate – arata conditiile care vor fi îndeplinite (vor fi valide) dupa producerea
evenimentului modelat.
• Scena – reprezinta, într-o secventa ordonata în conformitate cu desfasurarea
cronologica, elementele ce compun evenimentul. Acestea sunt la rândul lor evenimente, astfel
ca, la fel ca la cadre, putem avea drept valoare a unei caracteristici a unui scenariu un alt
scenariu.

Din fig. 3.13 se remarca prezenta si într-un scenariu a fatetelor default si if-nedeed, si
în functie de specificul evenimentului reprezentat pot apare si celelalte tipuri de fatete. Si aici
sunt prezente procedurile atasate (demonii); în exemplul comentat este vorba de procedurile
cu numele Cursanti, Chestionare_agenti si Insucces, care determina rezolvarea situatiilor în
care în desfasurarea evenimentului a aparut o contraindicatie fata de cazul cel mai obisnuit.
Este de observat ca în cazul procedurii Insucces, lansarea acesteia este precedata de testarea
unei conditii. Concluzia este cea mentionata deja la cadre: se obtine o combinatie între
reprezentarea si folosirea unor cunostinte de tip declarativ si procedural. Scenariile si cadrele
pot fi combinate; de exemplu, în fig. 3.13 Sala_curs poate fi numele unui cadru, ceea ce
înseamna ca un cadru este apelat din interiorul unui scenariu. Din punct de vedere al
organizarii, cele doua variante de model sunt identice si un scenariu poate fi privit ca un
cadru, în care aspectul deosebit este acela al indexarii dupa parametrul timp pentru
caracteristicile Scena. Atât prin aceasta ordonare, prin caracteristicile Preconditii si Rezultate,
cât si prin legaturile între diferite scenarii, determinate de aparitia numelui unui scenariu într-
un alt scenariu (de exemplu, Intrare studenti în sala_curs poate fi numele unui scenariu care
modeleaza tipicul acestui eveniment si care este invocat drept valoare pentru Scena1 în
exemplul din fig. 3.13) este posibila modelarea unor relatii de cauzalitate. De altfel, chiar
Sisteme bazate pe cunostinte 121

construirea unui scenariu se bazeaza pe cauzalitate, deoarece aceasta determina anumite tipare
în desfasurarea evenimentelor.

În ceea ce priveste inferentele care se pot efectua pe baza modelului de cadru/scenariu,


o posibilitate se refera la completarea cu valori a caracteristicilor. În afara de situatia în care
un cadru este dotat cu valori ale caracteristicilor chiar de utilizator, la introducerea în baza de
cunostinte, în cazurile în care aceasta completare se face în timpul lucrului SBC vor interveni
fatetele atasate si demonii acestora. Se obtin, conform celor deja mentionate, rationamente pe
baza unor cunostinte “de bun-simt”, si concluziile acestora vor fi pastrate pâna la momentul
aparitiei unor cunostinte mai specifice – de îndata ce într-un cadru/scenariu apare o
contraindicatie pentru valoarea data prin fateta default, aceasta este eliminata. Cu privire la
acest mecanism, facând comparatia cu calculul cu predicate, constatam o depasire a cadrului
acestuia, îndepartarea (invalidarea) unor elemente admise anterior ca valabile, însemnând un
rationament de tip nemonoton. O asemenea varianta implica o serie de consecinte privind
pastrarea consistentei bazei de cunostinte; ideea este aceea ca pot apare elemente
contradictorii si în acest sens este necesar ca dupa o înlocuire a unei valori default sa fie
actualizate si toate celelalte valori, din acelasi cadru sau din alte cadre, ce au fost determinate
sau depind de valoarea ce nu mai este actuala. Mostenirea pe baza ierarhiei în care sunt
conectate cadrele determina o alta posibilitate de efectuare a rationamentelor, principiul fiind
acelasi ca la retelele semantice.
Scenariile, prin elementele deja mentionate legate de modelarea cauzalitatii, permit
efectuarea unor rationamente în legatura cu acest aspect. Un SBC care foloseste în realizarea
bazei de cunostinte scenarii permite identificarea cauzelor unui eveniment si a efectelor sale, a
interdependentei între evenimente. Astfel, scenariile permit efectuarea de inferente în legatura
cu utilizarea, respectiv aparitia unui obiect sau eveniment, sau în legatura cu posibilitatea ca
dupa o anumita situatie sa urmeze în mod necesar o alta. De exemplu, atunci când un scenariu
este folosit pentru a interpreta o situatie, chiar daca valorile corespunzatoare caracteristicilor
Agenti si Obiecte nu sunt mentionate explicit în situatia considerata, SBC va trage concluzia
existentei lor, datorita reprezentarii folosite. Similar, daca baza de cunostinte atesta încheierea
desfasurarii unei scene, se va trage concluzia iminentei scenei urmatoare. Despre scenariile
folosite în acest sens se spune ca sunt de tip situational – ele permit sa se faca prezumtii în
legatura cu un obiect sau eveniment. Fara ca distinctia sa fie una stricta, a doua categorie în
aceasta împartire ar fi a scenariilor de actiune, care specifica operatiile de efectuat într-o
anumita situatie. Combinarea celor doua tipuri permite, de exemplu, rezolvarea unor
probleme de diagnoza: un model situational determina cauza plauzibila a defectului, iar unul
de actiune conduce la remedierea acestuia. Îmbinarea aceasta este o modalitate ca printr-un
SBC sa se obtina interpretarea adecvata a relatiilor de tip cauza – efect.

Cadrele si scenariile permit si efectuarea de inferente de tipul celor din SE - demonii


pot fi realizati ca sisteme de reguli de productie. În acest sens, cei corespunzatori fatetelor if-
122 Reprezentarea cunoasterii

needed vor determina o cautare înapoi, în cursul careia se vor putea accesa mai multe
cadre/scenarii, pâna la satisfacerea scopului de gasire a valorii caracteristicii ce a declansat
cautarea. Cei corespunzatori fatetelor if-added si if-removed vor determina în mod frecvent o
cautare înainte, în sensul ca adaugarea/stergerea unei valori poate declansa o întreaga
secventa de reguli ale unor demoni ce actualizeaza valori din acelasi model sau din alte
cadre/scenarii, aflate în legatura cu elementul declansator. Aici procesul este condus de datele
adaugate sau eliminate din baza de cunostinte, adica principiul este acela al cautarii înainte.

3.3.3. Avantajele modelelor structurate

Într-un SBC exista, conform celor precizate în primul capitol, cele doua parti
importante: baza de cunostinte si motorul de inferente, principial ele fiind responsabile de
modelarea universului de discurs si respectiv de efectuarea rationamentelor. Aceste doua
componente si aspectele pe care le rezolva se afla în interdependenta. Din acest punct de
vedere, folosirea în realizarea bazei de cunostinte a modelelor de tip structurat prezinta
avantajul ca acestea faciliteaza pentru multe cazuri de univers de discurs procesul de
inferenta. Ideea este aceea ca sintaxa acestor modele reflecta mai bine decât varianta
calculului cu predicate structura inferentiala a cunostintelor modelate. Este vorba de faptul ca
o reprezentare de tip graf (cadrele/scenariile pot fi si ele privite în acest fel, arcele fiind
subîntelese între caracteristici si valorile acestora, si între cadre care refera unul la altul)
faciliteaza inferentele, prin aceea ca arcele reprezinta în mod direct dependentele dintre
entitati, dependente ce vor putea fi folosite în efectuarea rationamentelor. În plus, reducerea
mecanismelor inferentiale la probleme de parcurgeri ale unor grafuri are si avantajul ca
permite implementarea eficienta prin programare. Preferarea modelelor de tip structurat poate
fi sustinuta si de o materializare de tip paralel [Sow 91], în care nodurile retelei semantice sa
reprezinte unitati de procesare.
Nu trebuie însa sa întelegem ca aceste modele rezolva chestiunea complexitatii
calculelor pentru problemele de IA; daca efectuarea rationamentelor, asa cum apare ea într-o
modelare în calculul cu predicate si într-o implementare de tip demonstrator automat de
teoreme, este de complexitate exponentiala, ea se va pastra si în cazul unei retele semantice,
prin numarul mare de noduri si arce la care se va ajunge în aceasta. De exemplu, se ajunge la
aceeasi explozie combinatoriala amintita la demonstrarea automata a teoremelor, în situatia în
care o retea semantica este folosita într-o baza de cunostinte a unui sistem de interogare, si
acesta a primit o întrebare la care raspunsul este negativ; într-un asemenea caz, toate, sau
majoritatea arcelor retelei vor trebui parcurse înainte de a se furniza raspunsul respectiv.

Organizarea structurata a modelelor de retea semantica si cadru are si avantajul ca


faciliteaza o focalizare a atentiei, asa cum este necesara în efectuarea rationamentelor – toate
cunostintele despre o entitate sunt grupate si pot fi atinse dintr-un anumit (un singur) loc.
Datorita structurarii respective, modelele mentionate usureaza, în comparatie cu calculul cu
Sisteme bazate pe cunostinte 123

predicate, eliminarea detaliilor nesemnificative, necesara în procesele de inferenta.


Focalizarea respectiva este avantajata si de faptul ca în aceste modele se face o distinctie între
mai multe tipuri de primitive reprezentationale. Astfel, sunt privite distinct piesele de
cunoastere ce sunt concepte si instante (reprezentate ca noduri), de cele ce reprezinta
proprietati ale acestora (reprezentate ca arce). Vom putea ca într-un rationament sa facem o
focalizare asupra unui nod – ne intereseaza proprietatile acestuia – sau asupra unui arc, daca
de exemplu ne intereseaza toate entitatile care poseda o anume proprietate. În contrast, în
calculul cu predicate, în formulele Numar_gdm (IRB1400, 6) si Robot_industrial(IRB1400),
conceptele si proprietatile acestora folosesc o aceeasi reprezentare. Mai mult, în modelele
structurate este creata o distinctie între proprietatile referitoare la apartenenta/incluziune si
celelalte tipuri de proprietati, si parcurgerea cailor date de unele sau de celelalte poate facilita
rationamentele, în functie de specificul problemei; de exemplu, într-o problema de clasificare
se vor parcurge arcele Este-un si Subset.

Echipament scump Mare

Subset Pret Mic


a) Subset b)

Echipament industrial Echipament industrial Pret


Subset Subset
Subset Subset

Robot industrial Regulator Robot industrial Regulator

Fig. 3.14. Doua retele semantice realizate la nivele de granularitate diferite

Separarea aceasta – proprietati de apartenenta/incluziune, celelalte proprietati – poate


fi privita ca o problema de alegere a nivelului de granularitate a reprezentarii [Sow 91].
Conform celor mentionate în paragraful 3.1 aceasta este un aspect important, si un exemplu în
acest sens este cel prezentat în fig. 3.14. Aici, în varianta a) este reprezentata o cunoastere
conform careia robotii industriali si regulatoarele sunt echipamente industriale, care la rândul
lor sunt echipamente scumpe. Pe de alta parte se cunoaste si ca regulatoarele nu sunt
echipamente scumpe; în fig. 3.14, arcul dintre nodul Regulator si nodul Echipament scump
este barat, adica s-a introdus un tip special de arc pentru reprezentarea negatiei. Modelul de
retea semantica realizat în acest fel face ca baza de cunostinte sa fie inconsistenta: exista o
contradictie prin aceea ca are loc atât incluziunea clasei Regulator la clasa Echipament scump,
conform cu ramura ascendenta din stânga a nodului Regulator (relatia Subset este tranzitiva),
cât si negatia acestei apartenente, conform cu arcul direct între nodurile Regulator si
Echipament scump. O rezolvare este obtinuta pe varianta b) în care nivelul de granularitate
este altul. Aici se introduce un arc proprietate, cu eticheta Pret si prin folosirea acestuia
124 Reprezentarea cunoasterii

contradictia este eliminata. Se aplica regula precizata anterior pentru determinarea valorii unei
proprietati si prin aceasta, în mod univoc, un robot industrial are pret mare, iar un regulator
are pret mic.

Si din punct de vedere al achizitiei de cunostinte variantele de tip structurat pot fi de


preferat. Astfel, cunoasterea initiala, exprimata de obicei în limbaj natural, este mai usor de
transpus într-o retea semantica sau un cadru, decât într- u grup de formule din calculul cu
predicate. De asemenea, mai ales cadrele si scenariile permit constituirea unor modele
coerente si unitare, chiar atunci când achizitia de cunostinte este discontinua sau incompleta.
Usurinta în utilizare provine si din faptul ca retelele semantice si cadrele nu cer conditii
necesare si suficiente pentru validitatea unor relatii (asa cum se întâmpla în logica), ci pot
lucra conform celor explicate anterior si numai cu conditii necesare. În acest fel ele permit o
modelare în cazuri în care lipsesc cunostintele care sa ne permita sa formulam conditiile
necesare si suficiente; de exemplu, dispunem doar de o parte din subconceptele unui concept.
Totusi, nu putem trage o concluzie de eliminare a modelelor de tip logic. Partea
deficitara a retelelor semantice sau a cadrelor este lipsa lor de standardizare, atât în ceea ce
priveste sintaxa – în diferite dezvoltari apar diferite tipuri de arce si fatete, cât si semantica –
stabilirea primitivelor reprezentationale este mai putin clara decât la calculul cu predicate. În
consecinta, aceste modele pastreaza aspecte ad-hoc, care se rasfrâng si în rationamentele
efectuate cu ajutorul lor – nu mai putem fi siguri de validitatea concluziilor obtinute, asa cum
se întâmpla, de exe mplu, în cazul unui demonstrator automat de teoreme care prelucreaza un
model format în calculul cu predicate. De aceea putem fi si în situatia în care, datorita tuturor
avantajelor mentionate sa folosim un model structurat, dar pentru validare sa trebuiasca sa
facem o transpunere (chiar si partiala) în limbajul calculului cu predicate.

Modelele structurate, si dintre ele în primul rând cadrele si scenariile, sunt adecvate
pentru a reprezenta cunostinte cauzale, prin aceea ca succesiunea scenelor sau legaturile care
se fixeaza între cadrele/scenariile ce compun baza de cunostinte pot fi realizate conform
relatiilor cauza efect. Tot un avantaj este si acela ca aceste modele pot ghida procesul de
inferenta si deci solutionarea unei probleme pe baza experientei în domeniul respectiv; din
acest punct de vedere aceste variante se apropie de modelul de reprezentare a cunoasterii
bazat pe reguli.

Se poate spune, în concluzie la aceste avantaje ale modelelor structurate, ca o parte din
elementele acestora s-au impus în prezent în programare; este vorba despre programarea
orientata pe obiecte, în care apar perechile atribut – valoare corespunzatoare organizarii
caracteristicilor din cadre si cu o comportare similara din punct de vedere al mostenirii cu
aceea a cadrelor si retelelor semantice; de asemenea, în programarea orientata pe obiecte se
folosesc frecvent elemente cu semnificatia fatetelor default si if- needed din cadre.
Sisteme bazate pe cunostinte 125

În afara de dezavantajul deja mentionat, acela al lipsei de standardizare, modelele


discutate sunt mai putin generale în comparatie cu limbajul calculului cu predicate. O serie de
situatii, care în logica sunt modelate prin cuantificatori, negatie, sunt mai greu reprezentabile
în modelele structurate. Retelele semantice si cadrele nu au întreaga putere de expresivitate a
calculului cu predicate – este înca o problema deschisa daca orice tip de formula cuantificata
este reprezentabila printr-un model structurat. De asemenea, mostenirea cu restrictii poate
crea unele probleme, asa dupa cum am mentionat deja.

Tinând seama de avantaje si dezavantaje, modelele de reprezentare de tip structurat îsi


gasesc aplicare în recunoasterea limbajului natural, în sistemele de interogare a bazelor de
cunostinte, cele de vedere artificiala (interpretarea scenelor), în sistemele de proiectare
asistata de calculator, si în general pot fi privite ca o posibilitate de modelare pentru sistemele
implementate în tehnica programarii orientate pe obiecte.
126 Reprezentarea cunoasterii

3.4. Reprezentarea cunoasterii prin sisteme de reguli de productie

Aceasta varianta de model de reprezentare a cunoasterii este cea care sta la baza
functionarii SE. Din acest punct de vedere modelul respectiv a evoluat, o data cu dezvoltarea
SE, si a suferit completari în ideea cresterii performantelor SE. De asemenea, au aparut
influente asupra SE din partea celorlalte modele de reprezentare a cunoasterii; baza de fapte si
cea de reguli pot fi analizate pe baza modelului calculului cu predicate, si aceste componente
ale unui SE au preluat unele aspecte ale organizarii cunostintelor de la modelele structurate.
Se explica astfel de ce unii autori nu mai considera sistemele de reguli de productie ca o
varianta de model pe care sa o trateze distinct în capitolul de reprezentare a cunoasterii. În
plus, o justificare în acest sens provine si din aceea ca la acest tip de model partea de
reprezentare a cunoasterii este mai mult dependenta si influentata de partea de efectuare a
rationamentelor, astfel ca descrie rea sistemele de reguli de productie este uneori inclusa în
capitolul privind rationamentele în sistemele de IA.
Totusi, pentru o prezentare completa a metodelor de reprezentare a cunoasterii ramâne
utila includerea sistemelor de reguli de productie în acest capitol. Asa cum am mentionat si în
paragraful 1. 8, regulile de productie îsi au originea în sistemele care se bazeaza pe un set de
transformari succesive ale unui context initial, asa cum sunt gramaticile formale sau
automatele finite. Structura si principiul de utilizare a regulilor dintr-un SE sunt aceleasi cu
ale regulilor de productie (derivare) dintr-o gramatica [Rus 83], sau cu functia de tranzitie a
unui automat finit [Hut 83]. În acest sens, partea de conditie a unei reguli se mai numeste si
parte contextuala, ea indicând contextul (starea) în care regula este aplicabila, iar cea de
actiune se numeste si parte transformationala, prin aceea ca determina modificarea
contextului.
Ca forma sintactica, o regula poate fi comparata si cu o instructiune IF … THEN din
programarea conventionala. Din punct de vedere al functionalitatii, deosebirea este însa neta:
momentul în care se executa instructiunea IF … THEN este strict dependent de locul unde este
ea plasata în program; în contrast, într-un SE atât ordinea faptelor în baza de fapte, cât si a
regulilor în baza de reguli nu au nici o importanta; regulile devin active pe baza mecanismului
de control din motorul de inferente, care este complet separat de baza de cunostinte. Se
completeaza astfel ideea mentionata în 1.6, aceea ca în sistemele ce folosesc programarea
bazata pe reguli exista o separare între cunostintele privind domeniul problemei si cele de
control al executiei, ceea ce în cazul instructiunii IF … THEN, si în general în programarea
imperativa, nu se întâmpla.

Asa dupa cum am aratat în 3.2.3, partea de conditie si cea de actiune a unei reguli, ca
de altfel si faptele din memoria de lucru, pot fi privite ca formule din calculul cu predicate. O
alta legatura se poate face între tiparele unei reguli si perechile caracteristica – valoare
dintr- un cadru. De exemplu, asa stau lucrurile în regula urmatoare:
Sisteme bazate pe cunostinte 127

Daca <granulatie-material este mare> si <curent-motor-grila1 este 10 A>


si <mecanism-grila1 este în functiune> atunci <creste-viteza motor-grila1>

în care tiparele pot fi vazute ca si elemente (perechi caracteristica – valoare) ale unui cadru ce
reprezinta cunoasterea despre un sistem de fabricare a cimentului [Pan 98]. Daca în exemplu
de mai sus este vorba despre un cadru corespunzator unei instante, în situatia în care în
tiparele regulii sunt folosite variabile, corespondenta va fi cu un cadru generic, si procesul de
potrivire pe faptele din memoria de lucru (organizate dupa o structura de cadru) va determina
legarea (atribuirea) variabilelor. Se ilustreaza astfel cum pot fi combinate modelele de cadru si
reguli de productie.

Ceea ce particularizeaza modelul de sistem de reguli de productie este si aceea ca o


data cunoasterea transpusa în model, efectuarea inferentelor este rezolvata de un mecanism
independent, cu caracter de generalitate si eficient materializabil computational – motorul de
inferente. Din acest punct de vedere, este clar ca efectuarea inferentelor într- un sistem bazat
pe reguli este mai usor de pus în practica decât în modelele structurate; continuând aceasta
analogie între modelele de reprezentare a cunoasterii, motorul de inferente este comparabil cu
un demonstrator automat de teoreme, cu mentiune ca, în cazul acestuia din urma, apare
dezavantajul legat de dificultatea construirii modelului: cunostintele unui expert sunt mai greu
de transpus în formule din calculul cu predicate, decât în reguli. Astfel, înca de la primele
utilizari ale sistemelor bazate pe reguli (Post – 1943 [Pop 94]), ideea a fost aceea ca ele se
preteaza la a modela cunostinte care se refera la perechi de forma situatie – actiune de
întreprins, adica exact tipul de cunoastere ce trebuie captat de la un expert.
Pe lânga avantajul ca transpunerea cunostintelor în model este imediata, în sistemele
de reguli fiecare unitate de cunoastere (regula) are un caracter modular si independent. Este
clar ca, atât în privinta construirii bazei de cunostinte, realizata prin baza de reguli si cea de
fapte, dar si în privinta actualizarii si dezvoltarii acesteia, modelul este eficient de manevrat.
Fiecare piesa de cunoastere este transpusa într-o regula si aceasta va fi codificata ca si un
modul distinct; daca regulile sunt total independente, atunci adaugarea sau îndepartarea unei
reguli se pot face fara a fi necesare precautii si fara a fi de efectuat si alte operatii asupra bazei
de cunostinte. Este de remarcat faptul ca aceasta este viziunea asupra primei generatii de
sisteme expert; în prezent, o data cu generatia a doua, s-a ajuns la concluzia ca la cresterea
complexitatii problemelor rezolvate prin SE si la aparitia necesitatii ca într- un SE sa fie
înmagazinate mai multe tipuri de cunoastere (de exemplu, cunoastere declarativa,
procedurala, cea legata de cauzalitate) regulile nu-si mai pot pastra independenta, si pot apare
corelatii între reguli, modelabile, de exemplu, pe baza modelor structurate.

Daca facem corelatia cu cele expuse în paragraful 3.1, atunci este de remarcat ca
pentru sintaxa modelului sistemelor de reguli de productie trebuie sa avem în vedere corelatia
128 Reprezentarea cunoasterii

cu partea de efectuare a inferentelor. Sintactic, regulile trebuie concepute în asa fel încât sa se
poata corela cu faptele si sa asigure functionarea motorului de inferente. Astfel, fara a intra în
detaliile de implementare ale unui sistem de reguli productie, un sistem construit dupa acest
model va contine componentele precizate în 1.8, cele care alcatuiesc cazul obisnuit de SE:
baza de fapte, baza de reguli si motorul de inferente. Acestea se gasesc în interdependenta
explicata în primul capitol, si obtinerea acestei corelatii va presupune ca la realizarea unui
sistem dupa modelul discutat sa fie parcurse urmatoarele etape:

Pas 1. Se transpune cunoasterea asupra metodei de rezolvare a problemei în lucru


într- un grup de reguli, scrise într-o forma de tip pseudocod.
Pas 2. Se stabileste forma faptelor prin care sa se descrie starea initiala din problema
în lucru, eventual forma altor fapte care sunt necesare în rezolvarea problemei, luând în
considerare si forma preliminara a regulilor. Faptele care descriu starea initiala a problemei (a
universului de discurs) se transpun conform sintaxei limbajului utilizat în codificare,
obtinându-se baza de fapte initiala.
Pas 3. Tinând seama de forma stabilita a faptelor, de forma regulilor în pseudocod si
de sintaxa limbajului, se scrie forma finala a regulilor.

Acesti trei pasi formeaza un ciclu si de obicei este necesar ca acesta sa se repete de
mai multe ori, pâna se ajunge la o varianta optima. Aceasta metoda va fi ilustrata pe un caz
concret, în capitolul al cincilea.

Deoarece în cazul organizarii cunostintelor dupa acest model exista cele trei unitati
distincte esentiale: baza de fapte, baza de reguli si motorul de inferente, sintaxa si semantica
pentru sistemele de reguli de productie pot fi întelease numai daca luam în considerare si felul
în care functioneaza motorul de inferente. Aici este vorba despre cele doua clase de metode de
control al procesului de efectuare a inferentelor în sistemele de IA, cautare înainte si cautare
înapoi. Principiile acestor doua variante au fost descrise în paragrafele 1.8, respectiv 1.4.2.
Trebuie observat ca, în prezent, un avantaj al folosirii acestei variante de model în realizarea
unui SBC este si acela ca exista medii software care pun la dispozitia programatorului
motoare de inferente performante. Asa este CLIPS, ca exemplu lucrând dupa cautarea înainte
(amanunte privind ciclul de lucru al acestui motor vor fi date în capitolul 5) si PROLOG
pentru cautarea înapoi. În aceste conditii utilizatorului îi ramâne numai sarcina de a construi
baza de cunostinte, iar mecanismul pentru efectuarea rationamentelor este deja codificat.

O problema care trebuie amintita este aceea a deosebirii de principiu între cele doua
tipuri de motoare de inferente. Aceasta ne va ajuta sa întelegem tipurile de probleme (tipurile
de cunoastere) care pot fi abordate printr-o cautare (înlantuire) înainte, respectiv cele pentru
care este eficient sa utilizam un sistem lucrând dupa cautarea înapoi. Distinctia este aceea a
punctului de plecare: strategia cautarii înainte pleaca de la fapte (date) si urmareste mai întâi
Sisteme bazate pe cunostinte 129

partile de conditie ale regulilor, iar strategia înapoi pleaca de la scop si urmareste mai întâi
partile de consecinta ale regulilor. De aceea pentru sistemele lucrând dupa strategia înainte se
foloseste si denumirea de sisteme de reguli de productie conduse de date, iar pentru cele
folosind strategia înapoi, termenul este de sisteme conduse de scop. Sunt necesare câteva
comentarii, pentru a întelege si alte elemente pe care le atrage deosebirea mentionata.
În cautarea înainte se pleaca de la faptele existente în memoria de lucru si se urmareste
deducerea tuturor concluziilor posibile, tinând seama de implicatiile modelate de regulile din
baza de reguli (vezi si 3.2.3); desigur, în efectuarea rationamentelor, regula de deductie care
se aplica este modus ponens. În mod obisnuit concluziile respective trebuie sa fie tot sub
forma de fapte si acestea, adaugate în memoria de lucru, vor putea initia noi aplicari ale
regulii modus ponens, situatia de oprire, daca nu intervin alte restrictii, fiind aceea când nici o
concluzie nu mai poate fi adaugata. În contrast, la strategia înapoi, plecam de la o singura
concluzie pe care vrem sa o dovedim. Acesta este asa numitul scop al sistemului de reguli de
productie lucrând dupa strategia înapoi, si cautarea ce se declanseaza este aceea a tuturor
implicatiilor (regulilor) care pot conduce la dovedirea scopului. Este vorba tot despre aplicare
regulii modus ponens, dar în forma în care sistemul constata coincidenta dintre un scop si
subformula implicata de regula modus ponens, încercând apoi, într-o înlantuire înapoi,
validarea deductie respective. Cu referire la formula (3.24), suntem aici în cazul în care scopul
este reprezentat de formula D, în baza de reguli existând implicatia:

C⇒D (3.31)

si atunci sistemul trebuind sa dovedeasca validitatea faptului exprimat prin formula C. Daca,
drept urmare a existentei unui fapt în memoria de lucru, sau prin folosirea altor reguli în
aceeasi înlantuire înapoi, se dovedeste ca formula C este valida, înseamna, conform regulii
modus ponens, ca scopul D este dovedit. De aici apare si deosebirea ca, la un sistem de reguli
lucrând dupa cautare înapoi, în memoria de lucru trebuie sa se gaseasca initial si scopul de
dovedit. Dupa cum la cautarea înainte un fapt putea declansa mai multe inferente, activând
mai multe reguli, tot asa si la cautarea înapoi un scop poate determina mai multe inferente.
Cazul banal este cel în care nu se activeaza nici o regula, prin aceea ca scopul coincide cu un
fapt deja prezent în baza de fapte si deci nu mai trebuie dovedit, sau scopul nu poate fi facut
sa coincida cu nici una din consecintele regulilor, când el este imposibil de dovedit;
corespondentul acestui caz în cautarea înainte este acela în care faptele din memoria de lucru
nu satisfac nici una din partile de conditie ale regulilor. Prin efectuarea mai multor inferente la
cautarea înapoi, va fi posibil, de exemplu, sa se gaseasca toate raspunsurile la o întrebare,
atunci când sunt mai multe fapte care sa dovedeasca scopul – întrebarea propusa.
130 Reprezentarea cunoasterii

Mai este de subliniat o diferenta privind acest mecanism al efectuarii inferentelor. Desi
în ambele variante este vorba de regula modus ponens, în cautarea înainte fiecare aplicare a ei
determina o concluzie valida, în timp ce la cautarea înapoi suntem în situatia de a dovedi
posibilitate de aplicare a regulii de deductie respective. Sistemul încearca probarea unui scop,
pleaca cu o implicatie de forma (3.31) si poate fi în cazul în care esueaza în dovedirea
validitatii formulei C. Într-o asemenea situatie sistemul trebuie sa revina la scopul (sau
subscopul) care a determinat esecul, sa gaseasca alte reguli ce l- ar putea dovedi (deci tot de
forma (3.31) dar cu alte subformule în locul lui C) si sa reia procesul. Din punctul de vedere
al implementarii, aceasta se traduce în aceea ca motorul de inferente al unui sistem de reguli
de productie lucrând dupa strategia înapoi trebuie sa fie capabil sa foloseasca un mecanism de
backtracking [Liv 86]; aceasta este o complicatie pentru motoarele de inferente respective,
care nu apare în cazul acelora destinate sistemelor lucrând dupa cautare înainte. Se obtine
totusi si un avantaj pentru sis temele cu cautare înapoi; pentru SBC folosind asemenea motoare
de inferente, datorita mecanismului de backtracking si felului în care punctul de start este unic
– scopul de dovedit (în cautarea înainte poate fi un set amplu de fapte initiale de la care pleaca
inferentele) este mai usor de realizat subsistemul de generare a explicatiilor.

+ + + + − − +

a) b)
+
Fig. 3.15. Comparatie între cele doua strategii de control

Aceste aspecte pot fi urmarite si pe fig. 3.15. Aici, cazul a) este acela al unui sistem cu
cautare înainte, iar b) pentru cautare înapoi. În primul caz, în radacina arborelui se gaseste
faptul initial aflat în memoria de lucru, sagetile fiind regulile care se aplica, iar cu semnul +
am marcat concluziile la care se opreste procesul de inferenta. Se observa ca un fapt poate
declansa mai multe reguli si într-un caz real starea initiala va putea fi descrisa prin mai multe
fapte (elipsele marcate cu linie întrerupta), astfel ca vor exista mai multi arbori de tipul
respectiv. În plus si elipsele nemarcate cu + pot fi fapte care, ramânând în baza de fapte, pot
contribui la completarea multimii concluziilor. În cazul b), cel corespunzator strategiei înapoi,
radacina arborelui este scopul de dovedit, iar regulile sunt marcate tot cu sageti. Aici elipsele
sunt subscopuri (premise, subformule ale unor implicatii) care trebuie dovedite, dintre care
cele marcate cu – reprezinta esecuri, astfel ca prin sagetile întrerupte am reprezentat procesul
de backtracking. Inferentele se opresc pe o ramura în care scopul este dovedit; aceasta este
cea marcata cu + în fig. 3.15b, în care trebuie sa întelegem ca scopul de plecare poate fi
Sisteme bazate pe cunostinte 131

dovedit prin unul din cele doua subscopuri ale nivelului întâi al arborelui, din care numai al
doilea se dovedeste valid în problema în lucru.

Întrebarea care se pune este aceea a tipului de cunoastere care se preteaza a fi abordata
prin fiecare din cele doua variante de sistem de reguli de productie. Astfel, sistemele lucrând
dupa cautare înainte sunt recomandate pentru problemele de monitorizare. Aici trebuie sa
plecam de la datele culese din proces si sa deducem toate concluziile (comenzile)
corespunzatoare acestora, ceea ce va face un SE folosind înlantuire înainte. În schimb, pentru
o problema de diagnoza va fi de preferat o cautare înapoi; se pleaca de la un defect si se fac
presupuneri asupra cauzelor care l-au generat, pâna se gaseste înlantuirea de reguli (de
inferente) care sa explice defectul avut ca scop în lucru. Este însa de observat ca aceasta
împartire a domeniilor nu este întotdeauna una neta si trebuie tinut seama si de contextul în
care se lucreaza [Gia 89], [Har 90].
Fie de exemplu, cazul unui sistem destinat alegerii microprocesorului care este cel mai
convenabil unei anumite aplicatii. Sistemul, aplicând cunostintele specifice domeniului,
trebuie sa gaseasca o solutie care sa satisfaca specificatiile impuse, dar si restrictiile
determinate de componentele avute la dispozitie. Sa luam în considerare doua cazuri extreme.
În prima situatie sunt disponibile doar doua tipuri de microprocesoare. În acest caz este
normal ca sistemul sa lucreze dupa o cautare înapoi, plecând de la scop – de la
microprocesorul de ales, si sa foloseasca regulile astfel încât acestea sa valideze, pe
specificatiile impuse, unul din cele doua microprocesoare.
Daca însa sunt în cazul în care avem la dispozitie 100 de tipuri de microprocesoare
este ineficient sa plecam de la scop, si vom pleca de la date, aici specificatiile corespunzatoare
destinatiei sistemului cu microprocesor. Prin aplicarea regulilor într-o înlantuire înainte, vom
construi o varianta care se va potrivi pe caracteristicile unuia dintre microprocesoarele
disponibile. Concluzia este acea ca alegerea unui anume tip de sistem de reguli de productie
este dependenta de specificul problemei de rezolvat. Exemplul dat ne arata si faptul ca un
element calauzitor poate fi acela conform caruia, daca în problema sunt un numar mic de
iesiri (scopuri) si un numar mare de intrari, o cautare înapoi poate fi favorabila, iar daca
raportul se inverseaza – un numar mare de iesiri posibile si putine intrari, va fi de ales o
cautare înainte. Aceasta clasificare conduce la faptul ca o problema de planificare [Pan 92], în
functie de raportul date de intrare/date de iesire poate fi abordata fie în PROLOG, daca sunt
putine scopuri, sau în CLIPS (asa cum vom face în capitolul al cincilea), atunci când sunt
putine date de intrare.

Reprezentarea prin sisteme de reguli este cea care se gaseste sub incidenta tendintei
actuale de folosire a unor sisteme hibride [Tza 93], [Dav 93]; aici este vorba despre
combinarea mai multor tipuri de cunoastere, a mai multor variante de reprezentare (modelare)
a cunoasterii, ceea ce va conduce si la mai multe posibilitati de efectuare a rationamentelor si
în final la o codificare multipla (sisteme bazate pe reguli, programare orientata pe obiecte, etc)
132 Reprezentarea cunoasterii

[Wat 99]. Sistemele respective vor respecta arhitectura generala a SBC, cea data în fig. 1. 10,
în care baza de reguli va fi organizata tinând seama de elementele date în acest paragraf. În
schimb, pentru baza de fapte se va folosi o structurare conform retelelor semantice sau
cadrelor. Chiar regulile vor putea fi grupate în ierarhii de tipul celor din modelele structurate,
facilitând astfel activitatea motorului de inferente în privinta gasirii pieselor de cunoastere
relevante pentru problema în lucru si în privinta determinarii corelatiilor dintre baza de fapte
si cea de reguli. De exemplu, o clasificare a regulilor poate ajuta efectuarea pasului de alegere
a regulii de executat din multimea regulilor activate la un moment dat (asa zisa rezolvare a
conflictului) în cazul strategiei înainte, iar o clasificare a scopurilor poate ajuta aceeasi
selectie a regulilor în cazul unei cautari înapoi. Toate aspectele discutate în acest paragraf îsi
gasesc ilustrarea si completarea în elementele de implementare în CLIPS, date în ultimul
capitol al lucrarii.
Sisteme bazate pe cunostinte 133

3.5. Concluzii – întrebari si probleme

Fiecare model de reprezentare a cunoasterii are avantaje si dezavantaje, pe care le-am


scos în evidenta în acest capitol, existând însa si o anumita echivalenta a modelelor. Aceasta
se refera la aceea ca o piesa de cunoastere, reprezentata de exemplu printr-o retea semantica,
va putea fi transpusa într-un sistem de cadre, sau într- un grup de reguli si fapte. Elementul
unificator, si care ne permite sa efectuam în mod corect asemenea treceri între modele, este
limbajul calculului cu predicate. El reprezinta varianta cea mai generala, în care poate fi
transpus orice tip de cunoastere. Chiar si în situatii în care avem informatii partiale asupra
universului de discurs, cuantificatorii ne vor permite sa obtinem un model în calculul cu
predicate. În schimb, în limbajul calculului cu predicate exista dificultati de modelare,
majoritatea regulilor de construire trebuind a fi aplicate în functie de context – adica este
necesar un exercitiu al lucrului cu formulele logice si mai ales, este necesar ca proiectantul
SBC sa fie aprofundat semantica pieselor de cunoastere, fiind capabil sa construiasca o
interpretare corecta a acestora.
Problema pentru calculul cu predicate este si aceea a eficientei computationale, atât în
privinta stocarii cunostintelor cât si în ceea ce priveste efectuarea rationamentelor – calculul
cu predicate este varianta cea mai putin succinta. Adesea, din aceste puncte de vedere, vom fi
în situatia de a prefera celelalte variante de modelare, existând criteriile de alegere discutate la
fiecare tip de model. Nici unul din acestea nu va avea însa întreaga putere de expresivitate a
calculului cu predicate si pentru situatii de impas, sau pentru validarea unor solutii date prin
celelalte variante, va trebui sa revenim la el.

În afara de adecvarea model de reprezentare – tip de cunoastere, varianta de modelare


implicata determina în mod direct performantele obtinute. Aici legatura trebuie facuta cu
partea de efectuare a rationamentelor, în sensul ca fiecare tip de reprezentare faciliteaza
anumite clase de inferente, precizate în acest capitol, si în functie de specificul de rezolvare a
problemei, va trebui aleasa calea care sa determine implementarea cea mai eficienta a
rationamentelor necesare.

În modelul calculului cu predicate prezentat am luat în considerare cazul


rationamentului monoton: am plecat de la tautologii si prin reguli de deductie am dedus tot
tautologii. Situatia aceasta este mai ales valabila în cazul unor probleme simplificate, pentru
care consideram ca exista cunostinte complete asupra mediului. Într-un univers de discurs
nesimplificat, asa cum va fi aproape întotdeauna cazul în conducerea proceselor, va trebui sa
se efectueze rationamente de tip nemonoton – concluzii deduse la un moment dat sa fie în
situatia de a fi invalidate ulterior, de exemplu, o data cu acumularea de noi cunostinte. Din
acest punct de vedere, au fost precizate posibilitatile pe care le ofera modelele de retea
134 Reprezentarea cunoasterii

semantica si cadru, iar în ultimul capitol va fi prezentata o varianta de manevrare a


rationamentului nemonoton într-un sistem de reguli, codificat în CLISP.

Cu privire la punerea în practica modelor de reprezentare a cunoasterii, asa cum s-a


mentionat deja, sistemele de reguli de productie beneficiaza de medii specia l destinate,
înglobând motoare de inferente ale celor strategii de cautare. Pentru retele semantice,
literatura citeaza cele mai multe codificari în LISP [Leh 92], [Str 86]. Trebuie însa sa
observam ca structura acestora, aceea de graf, este suficient de generala, astfel încât vor putea
fi implementate retele semantice si în alte medii de programare; va fi vorba în primul rând de
sistemele care au module pentru programarea orientata pe obiecte, cum este si CLIPS, cu care
este mai usor sa codificam ierarhia dintr-o retea semantica. Asemenea sisteme software vor fi
utilizabile si pentru materializarea cadrelor; pentru acestea din urma trebuie citat si sistemul
KEE, care este de tip hibrid îmbinând cadrele, regulile si obiectele, împreuna cu mesajele pe
care acestea le folosesc pentru schimbul de informatii.

Întrebari si probleme

1. Explicati diferenta între cunostinte si modul în care sunt reprezentate acestea si


importanta acestei probleme pentru SBC.
2. Ce înseamna model de reprezentare a cunoasterii? Care sunt calitatile cerute
acestuia? Dar calitatile cerute primitivelor reprezentationale?
3. Ce înseamna sintaxa respectiv semantica unui model de reprezentare a cunoasterii?
Dar ontologia si epistemologia acestuia?
4. Ce înseamna primitive semantice si primitive reprezentationale? Care dintre acestea
sunt de preferat în construirea SBC?
5. Ce înseamna nivel al granularitatii reprezentarii într- un model de reprezentare a
cunoasterii?
6. Ce înseamna concept si respectiv instanta?
7. Care este deosebirea între rationament si inferenta?
8. Motorul de inferente dintr- un SBC poate fi privit atât din punctul de vedere al IA, cât
si al programarii clasice. Care ar fi aceste puncte de vedere?
9. Ce înseamna motor de inferente de ordin 0, 0,5 si 1. De ce nu s-au impus motoarele
de inferente de ordin 1?
10. Dati exemple de universuri de discurs care se preteaza a fi reprezentate prin retele
semantice, prin cadre si respectiv prin sisteme de reguli de productie.
11. Cu referire la exemplul 3.6, care este interpretarea formulelor: ∃x ∀y VT(x, y) si
∀y ∃x VT(x, y) ?
12. De ce nu este strict necesar ca într-un sistem bazat pe reguli de productie regulile sa
poata materializa în partea de conditie o disjunctie?
13. Care sunt primitivele semantice pentru un modelul de cadru/scenariu?
Sisteme bazate pe cunostinte 135

14. Care este mecanismul de efectuare a inferentelor pe baza mostenirii într-o retea
semantica? Dar într- un cadru?
15. Ce înseamna mostenire simpla si multipla într-o retea semantica?
16. Ce reprezinta fatetele într-o retea semantica, respectiv într-un cadru?
17. Care este deosebirea dintre o retea semantica structurala si una asertionala?
18. Cum pot fi modelate într-o retea semantica relatii având o aritate mai mare decât 2?
19. Ce înseamna relatii cazuale?
20. Pot fi modelati cuantificatorii într-o retea semantica? Dar în modelul bazat pe cadre?
21. Ce înseamna mecanismul de potrivire în retelele semantice? Dar în sistemele de
reguli de productie?
22. Care este rolul demonilor într-un cadru si cele legatura exista între acestia si
programarea orientata pe evenimente?
23. Faceti o comparatie între o retea semantica asertionala si un scenariu.
24. Care sunt tipurile de inferente care se pot face într- un model bazat pe cadre.
25. Construiti un scenariu pentru evenimentul “ora_laborator”.
26. Dati exemple de probleme care sunt potrivite pentru o rezolvare printr-un sistem
bazat pe reguli folosind strategia de cautare înainte, respectiv aceea de cautare înapoi.
27. Sa se reprezinte, prin diferite modele de reprezentare a cunoasterii, universul de
discurs din fig. 3.16. Se stie ca obiectele care apar, cei doi roboti si presa, sunt utilaje si au
alcatuirea si caracteristicile din desen; se impune reprezentarea inclusiv a relatiilor spatiale
între acestea – de exemplu, robotul_1 este plasat în stânga presei_1, s.a.m.d.

cilindru_4 cilindru_5

Brat Apucator Apucator Brat


Presa_1
verde rosu
Robot_1
Corp Corp Corp
cilindru_1 cilindru_2 cilindru_3
Robot_2

alb alb alb

Baza Baza Baza


paralelipiped_1 paralelipiped_2 paralelipiped_3

Fig. 3.16. Un univers de discurs al unor utilaje

28. Sa se reprezinte, printr-un model adecvat, evenimentul “examen”.


136 Reprezentarea cunoasterii

29. Construiti, prin modele adecvate de reprezentare a cunoasterii, clasificari ale tipurilor
de microprocesoare pe care le cunoasteti, respectiv pentru tipurile de regulatoare.
4.1. Introducere. Principiul si necesitatea achizitiei de cunostinte

Achizitia de cunostinte este o problema care apare întotdeauna la construirea unui


SBC si care poate genera dificultati deosebite în realizarea si succesul acestuia [Ben 93], [Bou
92]. Explicatia este aceea ca obtinerea de la expertul uman a cunostintelor ce trebuie integrate
în programul sau sistemul de programe care este SBC implica folosirea unor tehnici
deosebite, de multe ori cu caracter interdisciplinar. În prezent, achizitia de cunostinte este înca
în curs de cercetare si formalizare [Dav 93], [Tza 93], punându-se problema ca la proiectarea
si implementarea unui SBC sa participe si un specialist în acest domeniu (în engleza
folosindu-se termenul “knowledge engineer”). Trebuie mentionat ca nu exista înca o
procedura general valabila pentru rezolvarea problemei achizitiei de cunostinte, domeniul
fiind înca unul dinamic. Se recunoaste în prezent ca problema respectiva este una (poate chiar
principala) care a frânat dezvoltarea SE si a SBC, mult timp acordându-se importanta numai
aspectelor de reprezentare a cunoasterii si efectuare a rationamentelor, în timp ce aplicarea
tehnicilor de IA a ramas de fapt blocata de nerezolvarea corespunzatoare a achizitiei de
cunostinte. Este clar ca, oricât de rafinate ar fi mecanismele computationale cuprinse într-un
SBC, puterea acestuia va fi în primul rând data de cunoasterea din domeniul de lucru care a
fost înmagazinata: esecul functionarii va fi imediat atunci când se folosesc cunostinte
incorecte. De asemenea, este de observat ca în prezent, o data cu aparitia unor instrumente
evoluate pentru dezvoltarea SE, achizitia de cunostinte a devenit mai scumpa si consumatoare
de timp, decât încorporarea cunostintelor achizitionate în programul de calculator.

Asa cum am precizat si în paragraful 4.1, trebuie înteles ca aceste doua aspecte –
achizitie de cunostinte, codificare a cunostintelor, sunt distincte si totodata aflate în corelatie.
Desi ele sunt cunoscute din fazele initiale ale IA [New 82], semnificatia achizitiei si
importanta corelarii cu reprezentarea cunoasterii s-au pus recent, o data cu a doua generatie de
SE. Pentru rezolvarea unei probleme trebuie pusa în evidenta existenta cunoasterii specifice
universului de discurs si a felului în care aceasta se manifesta. Este vorba despre asa numitul
principiu al rationalitatii [Wie 93]. Astfel, în rezolvarea unei probleme un expert lucreaza cu
138 Achizitia de cunostinte

un scop, un set de actiuni si un corp de cunostinte. Dupa principiului mentionat, de îndata ce,
în conformitate cu corpul de cunoastere, expertul stie ca o actiune va determina îndeplinirea
unui scop, iar scopul respectiv este în lucru, o va alege pe aceasta. În acest fel cunoasterea
apare ca elementul potential pentru generarea actiunilor. Ideea este simpla, dar importanta, ea
aratând pe de o parte independenta cunostintelor de forma de reprezentare a acestora, dar si
aceea ca o data o cunoastere captata, trebuie alese variantele de reprezentare si codificare ale
IA care sa reproduca o asemenea comportare, de tipul generarii ghidate de scop a unor actiuni.
Aceste aspecte sunt schematizate în fig. 4.1. În aceasta, observatorul implicat în
realizarea unui SBC, urmareste comportarea expertului, si activitatea observatorului trebuie

Nivelul cunoasterii

Expert (Agent)
Întelegere
Comportare
Observator
Modelare si
Achizitie de cunostinte codificare

Mediu Nivelul reprezentarii

Fig. 4.1. Schema principiala a achizitie de cunostinte

raportata la doua nivele [Vel 93]. El trebuie sa detecteze comportarea agentului, în


conformitate cu principiul rationalitatii mentionat anterior, obtinând dupa întelegerea acesteia
nivelul cunoasterii; apoi o va transpune pe aceasta în modelul de reprezentare a cunoasterii
adecvat, realizând codificarea necesara calculatorului ce va “simula” comportarea expertului.
Este atunci clara diferenta între cele doua nivele, în sensul ca nivelul cunoasterii este orientat
catre universul de discurs, în timp ce nivelul reprezentarii, care este un nivel simbolic, este
orientat catre sistemul ce va implementa SBC. Apare dupa aceasta schema si rolul decisiv al
achizitiei de cunostinte; fara obtinerea nivelului cunoasterii modelarea si codificarea nu mai
au obiect.

4.2. Aspectele caracteristice ale achizitiei de cunostinte

Achizitia de cunostinte are unele aspecte comune cu analiza de sistem, cea efectuata,
de exemplu, la proiectarea sistemului de control necesar într-un proces tehnologic; la un
asemenea caz ne vom referi în continuare, principiile fiind însa general valabile – nu apar
modificari de esenta daca ar fi vorba de achizitia de cunostinte, de exemplu, în domeniul
medical. Exista însa si elemente deosebite fata de analiza de sistem, unele generate chiar de
diferentele dintre programarea traditionala (cea care poate fi implicata în materializarea
Sisteme bazate pe cunostinte 139

schemelor clasice de control) si sistemele software de IA. La fel ca în analiza de sistem,


trebuie evaluata starea prezenta a procesului tehnologic pentru care se realizeaza SBC,
scotându-se în evidenta toate specificatiile, înainte de începerea proiectarii SBC. Cu cât o
specificatie este identificata mai târziu, pe parcursul dezvoltarii SBC, cu atât mai dificil va fi
de rezolvat respectiva specificatie.

Ca elemente mai de detaliu si mai specifice pentru cazul SBC/SE, scopul pe care
trebuie sa îl urmareasca sistemul este de identificat de la început (vezi principiul rationalitatii
din paragraful anterior). Apoi, trebuie observate actiunile expertului si gasita rationalitatea
acestora, adica precizate corelatiile scopuri – actiuni. Aceasta va presupune o interactiune
complexa cu expertul, o serie de întrebari cu caracter de generalitate (în sensul ca trebuie
rezolvate pentru majoritatea tipurilor de aplicatii), fiind urmatoarele:

• Care sunt intrarile în sistem, care este tipul acestora?


• Care sunt relatiile între diferitele intrari?
• Care este importanta datelor de intrare si care este acuratetea acestora?
• Exista date de intrare care nu sunt sau nu pot fi achizitionate?
• Exista restrictii si limitari din punct de vedere fizic sau logic asupra sistemului?
• Care sunt tipurile de ipoteze si de inferente pe care le face expertul în timpul luarii
deciziilor?
• Este posibil ca problema de solutionat, sau anumite parti din aceasta sa fie
descompuse în subprobleme?
• Exista informatii specifice pentru luarea în considerare a anumitor subscopuri?
• Care sunt tipurile de cunostinte (vezi clasificarea din primul capitol) care sunt
implicate în luarea deciziilor?

În principiu, unele din aceste întrebari trebuie rezolvate si în general, la construirea


unui sistem de control prin tehnicile clasice. Totusi situatia conventionala este mai usor de
abordat; aici sunt clare informatiile necesare (de exemplu, trebuie sa stim limitele între care se
poate încadra temperatura în cuptor si sa alegem un senzor adecvat), problema fiind doar ca în
cursul analizei de sistem sa nu se omita nici o specificatie. În schimb, în cazul unui SBC
trebuie captata cunoasterea si experienta unui expert, pe care acesta a acumulat-o de-a lungul
unui interval lung de timp, fara a fi de obicei în situatia în care a sistematizat aceasta
cunoastere, de exemplu într-o lucrare scrisa. Situatia poate fi îngreunata de faptul ca expertul
foloseste cunoasterea acumulata în luarea deciziilor fara a putea explica, sub forma de lant de
inferente, felul în care procedeaza. Este vorba despre o cunoastere care nu poate fi usor
accesibila proiectantului SBC, fiind cazul unor cunostinte de tip tacit. Situatia favorabila ar fi
aceea în care cunoasterea expertului ar fi de tip declarativ, varianta imediat încorporabila, de
exemplu, în baza de fapte a unui SE. Cade astfel în sarcina achizitiei de cunostinte de a
140 Achizitia de cunostinte

transforma cunostinte de tip tacit într-o forma declarativa sau procedurala, varianta care sa
poata fi validata de expert, sa poata apoi fi folosita în construirea SBC, si eventual consultata
de beneficiarul acestuia pentru actualizari si dezvoltari.

Pentru reusita achizitiei de cunostinte sunt cerute anumite însusiri persoanei care
rezolva aceasta faza (acel “kno wledge engineer”). Astfel, acesta trebuie sa aiba o abilitate
deosebita pentru stabilirea si dezvoltarea de relatii interumane, sa posede flexibilitate si
creativitate. Necesitatea realizarii unei bune relatii interumane cu expertul este clara, atâta
timp cât este vorba de a capta cunoasterea acestuia, de obicei într-o perioada de timp de
ordinul saptamânilor. Discutiile purtate cu expertul trebuie înregistrate în forme adecvate
(tipare specifice domeniului, diagrame), acestea trebuind a fi validate, pas cu pas, de catre
expert. Este vorba despre un proces consumator de timp, în care este esentiala încrederea
reciproca stabilita cu expertul si în care, este rolul persoanei care face achizitia ca, prin
interactiuni repetate, sa descopere elementele lipsa si eventual pe cele contradictorii.
Flexibilitatea si creativitatea sunt si ele cerute persoanei respective pentru a selecta metodele
cele mai potrivite pentru interactiunea cu expertul sau, în anumite situatii, pentru a crea noi
instrumente de lucru, adecvate domeniului sau expertului cu care interactioneaza. Persoana
respectiva trebuie sa înteleaga limbajul expertului si sa se adapteze la acesta. Numai în acest
fel va putea pune întrebarile adecvate si va întelege modul în care expertul ia deciziile.
Este de mentionat, ca o situatie deosebita si care determina o complicatie în plus,
aceea în care expertul este diferit de beneficiarul SE. În acest caz achizitia de cunostinte
trebuie sa tina seama si de necesitatile utilizatorului, de multe ori expertul nefacând de la sine
aceasta corelatie. În plus, putem fi si în cazul în care chiar beneficiarul nu este hotarât asupra
cerintelor pe care sa le adopte. Într-un asemenea caz, tot în faza de achizitie a cunostintelor, se
vor face experimente pe mai multe prototipur i ale SBC, pe baza carora utilizatorul sa poata
decide cerintele finale. Aceste încercari trebuie conduse cu atentie, în asa fel încât beneficiarul
sa înteleaga capabilitatile reale ale SBC (exista pericolul ca acesta sa le supraaprecieze), dar si
sa capete încredere în functionarea acestuia. Este si momentul în care proiectantul SBC, cel
care realizeaza codificarea si care este sau nu acelasi cu cel care face achizitia, poate sa
determine fazele si instrumentele de dezvoltare a SBC. Unele elementele dificile, deja
evidentiate în acest paragraf, sunt explicate în continuare.

4.3. Probleme dificile în achizitia de cunostinte

O prima dificultate a procesului de achizitie este determinata de folosirea de catre


expert a unor cunostinte tacite. Astfel, cercetarile din domeniul psihologiei au aratat ca în
procesul de acumulare a cunoasterii, aproape întotdeauna are loc o transformare tipologica a
acesteia, aspect care poate fi de interes pentru perfectionarea achizitiei care precede
dezvoltarii unui SBC. Initial, o persoana determina actiunile potrivite în diferite circumstante,
fie prin diferitele forme de instruire, fie prin observarea altor persoane. În aceasta faza initiala,
Sisteme bazate pe cunostinte 141

cunostintele sunt exprimabile prin limbaj, fiind vorba despre o varianta de cunoastere
declarativa. Apoi, urmeaza o faza în care sunt detectate relatii si asocieri între diferitele
elemente de cunoastere acumulate, facându-se trecerea spre o cunoastere de tip procedural.
Prin repetitie si feedback, persoana respectiva va utiliza cunoasterea tot mai eficient si fluent.
Se ajunge în faza finala când, printr-o “compilare” a procedurilor învatate, actiunile sunt
întreprinse fara o supraveghere constienta aprofundata si fara a mai fi legate de o exprimare
prin limbaj. O data înteles acest proces al evolutiei spre cunoasterea de tip tacit, înseamna ca
în achizitia de cunostinte expertul va trebui sa faca trecerea inversa, de la cunoasterea tacita
spre cea procedurala si declarativa necesara SBC.

Asupra dificultatii si totodata necesitatii achizitiei cunoasterii detinute de experti în


forma tacita se formuleaza si un asa zis paradox al expertizei. Exista o clasificare în stiinta
cunoasterii în doua tipuri de elemente de cunoastere: cunoastere despre (sau cunoastere cum,
mai cunoscut fiind termenul din limba engleza – “know how”) si cunoastere ca (în engleza
“know that”). Un exemplu de know- how ar fi cunoasterea pe care o poseda un bun mecanic
atunci când face reglajul unui motor, iar un exemplu de know-that este cunoasterea unui
profesor din domeniul masinilor termice, cel care poate explica modul de functionare a
motorului. Fata de clasificarea facuta în primul capitol, cel mai adesea o cunoastere de tip
know-how este una tacita, iar una de tip know-that este declarativa. Adesea, în timp ce o
persoana se specializeaza în rezolvarea unei probleme, ajunge sa treaca de la o cunoastere
initiala de tip know-that, la a poseda un know-how în domeniul problemei. Pe masura ce
cunoasterea devine de tip tacit si expertul rezolva tot mai eficient sarcinile primite (ceea ce
este de dorit si pentru SBC), el este tot mai putin capabil sa descrie în cuvinte cunoasterea sa;
astfel se ajunge la paradoxul mentionat.

Ca o concluzie privitoare la cunoasterea tacita, este clara utilitatea achizitiei acesteia


pentru SBC, ca o forma evoluata de cunoastere pe care o folosesc expertii, ca si dificultatea
procesului respectiv. Expertul si cel care face achizitia, printr-o operatie de tip introspectie,
trebuie sa gaseasca radacinile declarative si procedurale ale cunoasterii domeniului de lucru,
forme utilizabile de catre un SBC. Se mentioneaza ca în acest proces expertul nu trebuie totusi
fortat sa ia în considerare întrebari pentru care nu poate formula raspunsuri în mod explicit.
Este vorba despre cazuri în care el este chestionat asupra unor cunostinte tacite si raspunsurile
sale pot fi în situatia de a nu reflecta în mod real comportarea sa, mai greu sau imposibil de
explicat în cuvinte. Ca o solutie extrema este si aceea a utilizarii retelelor neuronale (eventual
este posibila si o combinatie a SE cu acestea), deoarece retelelor neuronale pot materializa
direct cunoasterea tacita (ele pot învata direct comportarea expertului, din exemplele de lucru
prezentate de acesta) fara a mai fi necesara o trecere prin cunoasterea de tip declarativ sau
procedural.
142 Achizitia de cunostinte

O a doua dificultate a procesului de achizitie de cunostinte este aceea a comunicarii


între expert si cel care face achizitia. Cu rare exceptii, initial cei doi au limbaje diferite. Într-o
forma aproximativa, se poate spune ca în constructia unui SE are loc un transfer al
cunostintelor de la expert la SE si interfata este cel ce face achizitia. Astfel, pentru ca interfata
de achizitie sa nu introduca distorsiuni este necesara o însusire a limbajului expertului. Mai
putin importanta este si o a doua problema, aceea a neîntelegerii de catre expert a limbajului
din domeniul calculatoarelor si IA. O consecinta a acestui aspect este faptul ca expertul nu îsi
da seama de elementele care sunt relevante, din punct de vedere al SBC, în procesul de
transfer al cunostintelor.
Tinând seama de importanta comunicarii, o prima faza în achizitia de cunostinte va fi
aceea a stabilirii unui limbaj comun. Trebuie precizate conceptele si instantele acestora,
specifice domeniului de lucru si totodata relevante pentru problema care se rezolva, urmând
ca acestea sa capete etichete – denumiri – stabilite de comun acord, eliminându-se
ambiguitatile în interpretarea diferitilor termeni. Mai mult, stabilirea unor termeni precisi si
usor de urmarit este importanta si pentru evolutia ulterioara a SBC. Beneficiarii acestuia vor
interactiona cu SBC folosind acesti termeni si achizitia de cunostinte trebuie sa tina seama si
de acest aspect. Se poate spune astfel ca procesul respectiv nu are numai un caracter pasiv, în
care se produce întelegerea unui limbaj, ci si creativ: se dezvolta un nou limbaj, cel al SBC,
folosit în crearea bazei de cunostinte, si a interfetei utilizatorului cu care trebuie sa fie dotat
SBC.

4.4. Tehnici ale achizitiei de cunostinte


4.4.1. Aspecte generale

Desi achizitia de cunostinte presupune, conform celor mentionate anterior, o


interactiune cu expertul, ceea ce poate determina initial dificultati, persoana responsabila
pentru acest proces poate începe din primele momente sa colecteze informatii. Ramâne însa în
sarcina sa, sa discrimine care dintre acestea sunt în adevar relevante si pot fi specializate,
ajungând la forma cunostintelor utile SBC. Aceasta presupune ca persoana respectiva sa
posede, înainte de a începe achizitia propriu- zisa, cunostinte generale din domeniului
aplicatiei si sa fie edificat asupra scopului pentru care se dezvolta SBC.

Exista mai multe variante pentru achizitia de cunostinte, fiind vorba de diferite tipuri
de tehnici, unele preluate din psihologie. Nu exista înca un protocol general utilizabil si este în
sarcina persoanei care face achizitia sa decida între diferitele variante. Sunt totusi valabile
pentru majoritatea cazurilor câteva principii, precizate în continuare.

• Se va începe de la cunostintele cele ma i generale privind aplicatia, urmând ca apoi


achizitia sa fie tot mai focalizata spre elementele de detaliu.
Sisteme bazate pe cunostinte 143

• Nu trebuie ca expertul sa fie fortat sa furnizeze informatii într-o forma particulara


(de exemplu, sub forma de diagrame) daca aceasta creeaza dificultati pentru el. Se va accepta
varianta cea mai naturala pentru expert si, doar în timp si prin cooperarea cu acesta, se va
ajunge, daca este cazul, la variantele mai eficiente pentru dezvoltarea SBC.
• O atentie deosebita se va acorda în timpul achizitiei evitarii ambiguitatilor. Acestea
pot determina repetitii si/sau erori în baza de cunostinte, aspecte care vor fi greu de depistat si
solutionat dupa punerea în lucru a SBC. Pentru evitarea lor, se va lucra la început cu cazurile
cele mai simple si specifice, a caror explicatie sa fie clara.
• Persoana care face achizitia nu trebuie sa întrerupa expertul în timpul explicatiilor.
Acesta trebuie sa se poata exprima în modul sau firesc, altfel existând pericolul unor
denaturari. Chiar în situatia în care, la prima vedere, apar elemente de inconsecventa sau
contradictorii, cel care face achizitia trebuie sa manifeste rabdare. În acest sens, este preferabil
ca judecata asupra relevantei si corectitudinii elementelor furnizate sa nu fie facuta în timpul
discutiilor, ci ulterior. Numai dupa ce exista certitudinea asupra unui aspect, se vor cere
expertului detalii si lamuriri, sau reveniri asupra lui.
• În timpul procesului de achizitie trebuie sa se observe felul în care expertul
utilizeaza cunostintele. Nu sunt importante numai informatiile, ci si contextul în care sunt
folosite, felul în care expertul apreciaza importanta lor relativa, felul în care sunt implicate în
efectuarea rationamentelor (a se avea în vedere principiul rationalitatii).
• Este normal ca în timpul procesului de achizitie ambele parti sa învete – expertul si
persoana care face achizitia. Totusi, scopul urmarit trebuie sa fie acela ca persoana care face
achizitia sa extraga cunostintele din domeniul expertului, si nu cel ca expertul sa obtina
cunostinte din domeniul SE.

În continuare sunt prezentate principalele tehnici folosite în achizitia de cunostinte.


Aceste sunt organizate în doua faze distincte: aceea a extragerii cunostintelor – captarea
acestora de la expert, si respectiv încorporarea lor în baza de cunostinte; faza a doua este la
intersectia între domeniul achizitiei de cunostinte si cel al proiectarii SBC, fiind conditionata
de modelele de reprezentare a cunoasterii care se folosesc pentru sistemul respectiv.

4.4.2. Tehnica interviului

Este vorba despre o tehnica de achizitie de cunostinte folosita în construirea SE/SBC,


care desi are unele puncte comune cu notiunea generica de interviu, are si multe elemente
specifice. Întrebarile puse si raspunsurile primite reprezinta elementele constitutive ale
interviului. Astfel, este necesar ca sa poata fi exprimate oral cunostintele de preluat si
persoana care face achizitia sa posede vocabularul adecvat. Daca aceste cerinte nu pot fi
satisfacute, tehnica nu poate fi utilizata.
144 Achizitia de cunostinte

Exista o clasificare a întrebarilor ce constituie un interviu. Acestea pot fi directe sau


indirecte, concrete sau nu. O întrebare directa trebuie folosita atunci când exista o întelegere
precisa a unei informatii ce trebuie preluate, si se presupune ca aceasta va putea fi exprimata
verbal de catre expert. Un exemplu de întrebare directa este: “Care este data care a condus la
aceasta decizie?”. Întrebarile indirecte sunt preferabile atunci când expertul trebuie lasat sa
exprime mai multe tipuri de informatii, clasificari, aspecte care nu sunt înca cunoscute sau
lamurite ca principiu, celui ce face achizitia. Exemple în acest sens sunt: “Cum ati procedat
pentru a lua aceasta decizie?” sau “Cum ati împarti problema în subprobleme?”. Un exemplu
de întrebare concreta este: “Care este prima actiune pe care o întreprindeti?”, iar o întrebare
de tip vag ar putea fi: “Ce se poate întreprinde pentru rezolvarea unei situatii de acest tip?”.
Prima fixeaza în mod concret un moment de timp, un eveniment, iar a doua are un caracter
indefinit, urmând ca în functie de raspunsul expertului sa se poata continua, sau nu, cu
întrebari concrete. Desi ar putea parea ca întrebarile concrete pot fi cele care sa asigure
succesul unui interviu, stricta folosire a acestora poate determina inflexibilitate, ceea ce este
impropriu unei bune achizitii a cunostintelor. De aceea, calea recomandata este îmbinarea
diferitelor tipuri de întrebari.
Este mai bine ca întrebarile sa fie puse într-un stil afirmativ si nu negativ. Aceasta
înseamna ca este de preferat: “De ce s-a luat aceasta decizie?”, fata de: “De ce nu luati aceasta
decizie?”, aceasta din urma inducând impresia unei atitudini critice. De asemenea, este de
evitat folosirea unor termeni (de exemplu din domeniul calculatoarelor) pe care expertul nu îi
cunoaste, ca si adresarea de întrebari despre care se stie ca depasesc competenta persoanei
intervievate, sau cele care par sa nu poata determina un raspuns, sau daca acesta nu este
folositor. Întrebarile trebuie sa aiba o formulare corecta, sa fie eficiente, iar cel care face
achizitia sa evalueze valoarea informationala a raspunsurilor, sesizând aspectele care înca
lipsesc pentru cunoasterea caii de rezolvare a problemei.

La început interviul va fi de tip general (în engleza se foloseste si termenul “open” -


deschis), când se vor pune întrebari de tip indirect si nu neaparat concrete, prin care sa se
stabileasca calea de comunicare cu expertul. În acest fel se vor putea pune în evidenta si
aspecte pe care cel ce face achizitia nu le cunoaste de la început. Es te totusi de reamintit ca
recomandarea în acest sens este ca sa se cunoasca terminologia din domeniul problemei
înainte de a începe interviul, si cunostintele celui ce face achizitia sa se completeze pe
parcursul discutiilor cu expertul. Pe masura ce interviul progreseaza el devine mai focalizat si
mai structurat. Un interviu este de tip focalizat atunci când sunt abordate subiecte precise,
pentru care se obtin cunostinte de profunzime si în detaliu. Este de remarcat faptul ca adesea
poate fi necesara o alternare între un interviu focalizat si unul general, în conformitate cu
starea în care se afla procesul de achizitie.

Exista si interviuri de tip structurat care constau într-o succesiune de întrebari cu o


ordine apriori stabilita. O asemenea varianta poate fi utila în situatia în care nu se poate lucra
Sisteme bazate pe cunostinte 145

cu un singur expert, ci este necesara o colectare de informatii de la mai multe persoane


cunoscatoare în domeniu, numai în acest fel putându-se ajunge la o achizitie completa de
cunostinte. De exemplu, sunt intervievati mai multi operatori de pe o linie de fabricatie pentru
a se putea obtine informatiile cele mai pertinente cu privire la conducerea acesteia. În acest
caz, un interviu structurat, în care se repeta aceleasi întrebari, într-o ordine bine stabilita,
poate conduce la obtinerea unui material, care printr-o prelucrare adecvata, sa determine
completarea bazei de cunostinte a SBC.
Interviurile semistructurate sunt cele în care exista o serie fixa de întrebari, dar ordinea
în care acestea sunt adresate poate diferi de la un caz la altul. În acest fel se asigura un grad
sporit de flexibilitate fata de cazul de tip structurat, depinzând de priceperea celui care face
achizitia sa stabileasca ordinea în care sunt folosite întrebarile, în functie de context.
Aceasta libertate este maximizata în cazul interviurilor de tip nestructurat, situatia în
care nu exista o lista, apriori stabilita, de întrebari. Este sarcina celui care conduce interviul sa
înteleaga si sa coreleze raspunsurile primite la momentul interviului, determinând calea de
urmat pentru completarea bazei de cunostinte, si astfel încât sa nu adreseze întrebari ale caror
raspunsuri au fost deja obtinute, în mod direct sau indirect. Ca o recomandare finala, este
indicata efectuarea interviului de catre doua persoane, în asa fel încât persoana care este
responsabila cu achizitia de cunostinte sa se concentreze strict asupra acestui aspect, iar cea
de-a doua persoana sa se ocupe de înregistrarea raspunsurilor.

4.4.3. Tehnica întâlnirilor si discutiilor focalizate

Denumirea metodei provine din limba engleza, unde apare ca: “Focused Meetings and
Discussions – FMD”. Metoda este apropiata de aceea anterioara, prin faptul ca se bazeaza tot
pe o colectare a unor informatii obtinute pe cale orala de la expert. Diferenta fata de cazul
anterior consta în aceea ca este vorba despre o discutie pe un subiect clar definit si specific. S-
ar apropia de un interviu de tip focalizat si structurat, în care întrebarile trebuie sa fie cât de
simple posibil, existând însa o serie de elemente particulare în aceasta metoda. Ea are mai
multe variante, dintre care cele mai cunoscute sunt: tehnica studiului de caz si tehnica ghidata
de scop.

În tehnica studiului de caz atentia va fi focalizata la un anumit sau la anumite studii de


cazuri. Acestea vor fi alese de expert, de cel care face achizitia sau vor fi identificate în timpul
analizei preliminare a domeniului. Metoda poate fi materializata printr-un scenariu simulat
sau printr-o descriere retrospectiva de caz. În prima varianta, se propune un caz si expertul
descrie pas cu pas ceea ce ar fi de facut pentru rezolvarea acestuia. Pentru o aproximare cât
mai buna a derularii reale a cazului este indicat ca expertul sa fie întrerupt cât mai putin în
timpul rezolvarii. Pericolul îndepartarii de realitate creste atunci când este vorba de un caz
ipotetic, ales de cel care face achizitia. În acest sens este de preferat un caz suficient de
apropiat de probleme deja rezolvate de catre expert, altfel existând posibilitatea ca expertul sa
146 Achizitia de cunostinte

nu simta aceeasi responsabilitate ca atunci când rezolva o situatie reala si astfel sa fie
introduse elemente de aproximare. Un avantaj pe care îl poate determina aceasta tehnica, în
comparatie cu tehnica interviului, este acela ca, parcurgându-se în simularea respectiva
întreaga rezolvare a problemei, nu vor mai fi scapate elemente pe care într-un interviu
expertul le poate omite, parând ca neesentiale.
În varianta descrierii retrospective de caz este vorba, ca si în cea anterioara, de un
studiu de caz. Deosebirea fata de metoda scenariului simulat este aceea ca se lucreaza pe
cazuri reale si nu ipotetice. Acestea sunt alese din istoria privind domeniul pentru care se
realizeaza SBC si indicat este ca alegerea sa fie facuta de comun acord de cel care face
achizitia si de expert, dintre cazurile recente. În legatura cu selectia cazurilor, aceasta este cea
care influenteaza într-o mare masura succesul ambelor variante ale tehnicii discutate. În acest
sens, în functie de specificul domeniului, pot fi avute în vedere problemele cele mai
complicate, sau cele a caror solutie este cea mai consumatoare de timp, sau situatiile
considerate a fi cele mai importante din punct de vedere al consecintelor pe care le determina.
Indiferent de criteriul de alegere folosit, trebuie ca sa fie cazuri reprezentative si sa acopere
întreg domeniul de expertiza.

Tehnica ghidata de scop, care este cea de-a doua în categoria întâlnirilor si discutiilor
focalizate, are la rândul ei mai multe variante. În cazul divizarii domeniului, expertul primeste
un scop (subproblema din domeniu) si i se cere sa defineasca un set de informatii (de
exemplu, simptome în cazul unei probleme de diagnoza), care sa formeze conditii necesare si
suficiente pentru a discrimina scopul respectiv de celelalte situatii posibile. Avantajul metodei
este acela ca, atunci când întreg domeniul de expertiza poate fi descompus într- un set
consistent de scopuri, ceea ce se obtine în urma achizitiei este o varianta de reprezentare a
cunoasterii de tip structurat; ceea ce usureaza faza de modelare si codificare a cunostintelor.
Ca dezavantaj, sunt necesare niste criterii de discriminare pe baza carora sa se faca împartirea
domeniului de lucru în subprobleme, ceea ce nu este întotdeauna facil. De exemplu, într-o
problema de diagnoza abordata în acest fel, expertul ar trebui sa furnizeze numai acele
simptome care individualizeaza un defect fata de altele si garanteaza o diagnosticare corecta.
Expertul poate fi însa în situatia în care va dori sa expuna toate simptomele, dintre care unele
sa fie comune pentru mai multe tipuri de defecte, si ramâne în sarcina celui care face achizitia
sa faca selectia respectiva, analizând informatiilor preluate. În ceea ce priveste divizarea
domeniului, mai trebuie mentionat ca aceasta poate fi facuta într-unul din doua sensuri
posibile: de jos în sus – când se pleaca de la datele primare (semnale de la proces, simptome,
etc.) si acestea sunt grupate pâna se ajunge la punerea în evidenta a unei probleme, sau de sus
în jos – când se pleaca de la un scop final, gasindu-se din aproape în aproape datele care îl
individualizeaza.
Tot în categoria tehnicilor ghidate de scop exista si varianta combinarii
caracteristicilor si deciziilor. Este vorba de situatii în care expertul nu poate furniza initial
regulile de lucru pentru un SE, dar este capabil sa dea, sub forma de liste, tabele, etc., tipurile
Sisteme bazate pe cunostinte 147

de caracteristici întâlnite în domeniul de lucru (simptome posibile, tipuri si valori de semnale,


variante constructive); ulterior i se va cere expertului sa furnizeze si tipurile de decizii pe care
le ia, iar în final, sa faca o corelatie între caracteristici si decizii. Se obtine astfel o varianta de
achizitie eficienta pentru SE, în sensul ca printr-o modalitate indirecta se acumuleaza regulile
SE. Se mentione aza ca deficienta desfasurarea artificiala a procesului de achizitie, expertul
neajungând sa explice, secventa cu secventa, felul în care procedeaza.

4.4.4. Alte tehnici de achizitie de cunostinte

Exista un numar mare de tehnici de achizitie, o prezentare exhaustiva fiind dificila. În


mod frecvent diferitele variante sunt combinate si aplicate în comun pentru constructia unui
SBC.

Tehnica feedback-ului sau învatarii inversate (în engleza: “teachback”) este aceea în
care rolurile între expert si cel ce face achizitia se inverseaza. Dupa ce s-a efectuat achizitia
pentru o parte din cunostinte, folosind de exemplu tehnica interviului, i se “explica”
expertului felul în care se rezolva o problema. În acest fel, pe de o parte se face o validare a
unor cunostinte preluate, iar pe de alta parte se poate corecta si completa cunoasterea
domeniului. Este o varianta care poate scoate în evidenta scaparile unei alte metode de
achizitie. Se ajunge astfel la o procedura, continând tehnica interviului, discutii focalizate,
alternate cu învatare inversata, procedura ce poate determina succesul achizitiei de cunostinte.

În tehnica celor 20 de întrebari cel care face achizitia trebuie sa selecteze un element
din cunoasterea domeniului: un anume defect, o anume situatie de lucru, un rezultat al
functionarii unei instalatii. Expertul trebuie sa determine, printr-un set limitat de întrebari (de
exemplu, 20 de întrebari) chestiunea aleasa, în situatia în care întrebarile sunt de tipul celor
care conduc numai la un raspuns Da/N u. Metoda favorizeaza detectarea unor conflicte în
cunoasterea acumulata, împartirea pe categorii a domeniului, descoperirea euristicii pe care
expertul a capatat-o, prin experienta, pentru a judeca problemele de lucru. Ca si metoda
anterioara, varianta presupune ca o parte din cunoastere sa fi fost deja acumulata printr-o alta
metoda, astfel ca sa poata fi identificate chestiunile care se preteaza a fi alese.

În tehnica analizei deciziilor expertului i se cere sa parcurga urmatoarele etape: sa


precizeze toate tipurile posibile de decizii, pentru fiecare decizie sa prezinte toate consecintele
posibile, pentru fiecare consecinta sa fixeze o probabilitate de aparitie, apoi sa calculeze un
coeficient atasat fiecarei consecinte ca produsul dintre valoarea intrinseca a acesteia si
probabilitatea de aparitie. În urma parcurgerii acestor faze se poate atasa fiecarei decizii o
valoare numerica, determinata ca suma a valorilor coeficientilor tuturor consecintelor
acesteia. Metoda are avantajul ca determina un model de cunoastere bine structurat, cu o
ierarhizare dupa valorile numerice asignate deciziilor, dar si dezavantajul ca este dependenta
148 Achizitia de cunostinte

de felul în care expertul estimeaza valoarea consecintelor unei decizii pe care o ia, si respectiv
dependenta de probabilitatile de aparitie a consecintelor; mai mult, este posibil ca expertul sa
nu fie obisnuit cu asemenea evaluari cantitative, sau sa nu le poata efectua.
Exista un numar de tehnici de achizitie folosite în cercetarea din psihologie si care au
fost preluate în domeniul dezvoltarii SBC. Una dintre cele mai cunoscute de acest fel este
aceea a analizei protocoalelor. Ea presupune ca expertul sa fie observat în timpul unui
protocol de rezolvare a unei probleme, reala sau simulata, în functie de posibilitati. I se cere sa
vorbeasca în timpul lucrului, exprimând felul în care ia deciziile. Ideea este aceea ca
activitatea expertului sa se desfasoare cât mai aproape de modul firesc; în acest sens el va
enunta scopurile si informatiile considerate, fara a dezvolta rationa mentele, ceea ce ar altera
cursul activitatii normale. Rezultatul primar al achizitiei este un protocol verbal, care
urmareste actiunile expertului. Acesta va fi folosit de cel ce face achizitia pentru a încorpora
în baza de cunostinte modalitatea de rezolvare a problemei studiate. Desi ar parea ca metoda
determina o cale fidela de preluare a cunostintelor, ea are si deficiente, legate de elementele
care pot sa lipseasca din baza de cunostinte, nefiind povestite în timpul lucrului de expert, si
care vor trebui preluate prin alte tehnici (de exemplu interviu), sau legate de faptul ca expertul
este afectat în activitatea sa de cerinta de a povesti în timp ce rezolva o problema.

Interviul general - focalizat


Tehnica Interviul structurat –
interviului semistructurat – nestructurat
Scenariul
Studiul de simulat
Tehnica întâlnirilor caz
si dicutiilor focalizate Descrierea
Tehnici de achizitie retrospectiva
a cunostintelor
Tehnica ghidata Divizarea
de scop domeniului
Învatarea inversata
Caracteristici
20 întrebari si decizii
Analiza deciziilor

Analiza protocoalelor

Fig. 4.2. O clasificare a tehnicilor de achizitie a cunostintelor

În concluzia acestui paragraf este prezentata în fig. 4.2 o clasificare a tehnicilor de


achizitie a cunostintelor descrise; în afara de acestea mai exista si alte variante, multe
provenite din psihologie si având o aplicabilitate mai mica în domeniul tehnic [Dav 93].
Sisteme bazate pe cunostinte 149

Tehnicile prezentate mai sus se numesc si tehnici de extragere a cunostintelor (în


engleza “knowldege elicitation”), pentru a scoate în evidenta faptul ca ele reprezinta prima
faza în procesul de achizitie. Notarea informatiilor furnizate de expert nu înseamna si
construirea bazei de cunostinte. Pentru ca informatiile respective sa fie în adevar utile (sa
devina cunostinte) este necesar ca ele sa fie prelucrate, transpuse într-o forma utilizabila de
calculator si încorporate în programe, în conformitate cu modelele de reprezentare a
cunoasterii discutate în capitolul anterior. Abia în momentul în care SE/SBC functioneaza,
determinând aceleasi rezultate ca si expertul uman, putem spune ca achizitia a avut succes.
Cea de-a doua faza, aceea a integrarii cunostintelor în modelele reprezentationale, are unele
aspecte dependente de chestiunile discutate în capitolele anterioare, dar si altele dependente
de achizitia de cunostinte, care sunt prezentate în continuare.

4.4.5 Tehnici pentru încorporarea cunostintelor în baza de cunostinte

Pe lânga extragerea cunostintelor de la expert, trebuie sa se realizeze si introducerea


acestora în memoria calculatorului, creându-se elementele functionale ale bazei de cunostinte.
Exista mai multe categorii de tehnici propuse în acest sens; unele tin seama de nivelul
cunoasterii, altele de cel al reprezentarii (vezi fig. 4.1).

Cu privire la nivelul cunoasterii, punctul de plecare trebuie sa fie specificul sarcinii de


rezolvat. Sunt deja cunoscute unele particularitati privind, de exemplu, baza de cunostinte a
unui SBC destinat proiectarii sistemelor de calcul, si altele pentru cazul conducerii
tratamentului cancerului. Tehnicile si instrumentele de ghidare pentru încorporarea
cunostintelor tin seama de ontologia domeniului respectiv si cer completarea termenilor si
relatiilor determinate în general, cu elementele specifice ale sistemului dezvoltat (de exemplu,
elementele specifice ale tratamentului cancerului de plamân).
A doua categorie de tehnici, cele cu privire la nivelul reprezentarii, se refera la
variantele în care trebuie sa se potriveasca elementele de cunoastere ale unei aplicatii în
tiparele unei anumite metode de reprezentare, metoda folosita de sistemul dezvoltat. De
exemplu, pentru domeniul diagnozei exista instrumente care ghideaza dezvoltarea bazei de
cunostinte a SE/SBC, organizata ca sistem de reguli de productie. Acestea vor cere
introducerea tipurilor de defecte, a simptomelor si a ipotezelor de diagnoza; apoi, într-un
regim interactiv si incremental, ele construiesc baza de reguli si cea de fapte, acestea fiind
supuse pe parcur sul dezvoltarii unor teste si validari. Rezulta ca si în aceste caz exista o
dependenta fata de domeniul problemei, în sensul necesitatii alegerii acelei tehnici de
rezolvare care este potrivita pentru acesta, cele doua nivele (cunoastere – reprezentare) fiind
evident în interdependenta.

Între diferitele categorii de tehnici exista avantaje si dezavantaje, astfel ca gasirea


variantei de optime este înca o problema deschisa. Pe de o parte este necesara asigurarea
150 Achizitia de cunostinte

flexibilitatii, astfel ca sa se poata achizitiona si introduce în baza de cunostinte concepte


neanticipate pentru un anumit domeniu de lucru, iar pe de alta parte sa se asigurare un cadru
structurat, complet si corect din punct de vedere sintactic si semantic, pentru construirea bazei
de cunostinte. Rezulta ca o varianta care sa ia în considerare ambele nivele este de dorit.

Un exemplu care se apropie de aceste deziderate este asa zisa tehnica de achizitie si
structurare a cunostintelor (“Knowledge Acquisition and Design Structuring” – KADS) care
presupune o structurare a cunostintelor sub forma a patru straturi; realizarea lor poate fi
obtinuta atunci când cel ce face achizitia si-a lamurit, pentru domeniul de expertiza, atât
nivelul cunoasteri, cât si pe cel al reprezentarii . Cele patru straturi vor ghida procesul de
construire a bazei de cunostinte pe baza informatiilor preluate de la expert. Un prim strat este
cel al domeniului, în care apare o organizare a cunostintelor sub forma de concepte si relatii.
Acestea trebuie sa se refere la întreg domeniul de lucru. Un al doilea strat este cel al
inferentelor. Acesta trebuie sa contina elementele de baza pentru rationamentele efectuate de
expert. Este vorba despre meta-concepte (acele concepte care îndeplinesc roluri distincte în
rezolvarea unei probleme a domeniului) si despre elementele de rationament care pun în
legatura meta-conceptele în timpul rezolvarii. De exemplu, “dezlipirea unui contact” poate
constitui o metaclasa, legata printr- un element de rationament de tip cauza – efect de
metaclasa “absenta semnalului de iesire”, într-un sistem de diagnoza a circuitelor electrice. Al
treilea strat este cel al sarcinii, acesta specificând secventa în care sunt apelate elementele de
pe nivelul inferentelor în timpul rezolvarii unui anume tip de problema. Facând o comparatie
cu programarea clasica, acest strat este cel care contine elementele privind controlul rularii
programului. Mai exista si un ultim strat, cel al strategiei, care permite schimbarea dinamica a
secventelor de control de la nivelul sarcinii în functie de contextul evolutiei SBC. Dupa ce au
fost create aceste patru straturi, care modeleaza expertiza într-o forma transferabila pe
calculator, pe baza lor se poate trece la implementarea propriu- zisa a bazei de cunostinte.
Rezulta ca tehnica este una de ghidare, care determina structurarea cunoasterii într-o forma
consistenta, dar transformarea celor patru straturi într- un sistem functional ramâne dependenta
de priceperea programatorului.

4.5. Instrumente pentru achizitia de cunostinte, din prima si a doua


generatie

Pentru punerea în practica a tehnicilor de achizitie a cunostintelor s-au dezvoltat în


timp instrumente corespunzatoare. Se poate constata o evolutie a acestora, existând în prezent
o clasificare în doua generatii. De mentionat ca noile instrumente, cele numite de generatia a
doua, au influentat si tehnicile de achizitie, determinând schimbari în acestea. Pentru a
întelege corelatiile dintre tehnici si instrumente, cât si unele aspecte deosebite ale
instrumentelor actuale, este util a fi prezentate mai întâi principiile folosite de prima generatie.
Sisteme bazate pe cunostinte 151

Un instrument de achizitie reprezentativ pentru prima generatie este KRITON


[Dav 93], [Die 87]. Acesta se bazeaza pe câteva presupuneri cu privire la procesul de
achizitie, dupa cum urmeaza:

− Cunostintele pot fi achizitionate de la expert într-o forma simbolica, care sa


permita transferul în obiectele constituente ale bazei de cunostinte (reguli, retele semantice,
cadre).
− Pentru obtinerea unui
SBC este necesara mai întâi
Surse de cunostinte
extragerea, urmata de reprezentarea
Cunostinte elementelor obtinute în formele
Documente
ale expertului specifice pentru SBC. Procesul
respectiv este unul incremental si
Procedurale Declarative
arhitectura folosita în KRITON
(vezi fig. 4.3) pune în evidenta
aceste faze.
Analiza Interviul Analiza
protocoalelor de texte − Nici una din tehnicile de
achizitie nu este suficient de
generala si puternica, astfel ca
Reprezentare a pentru construirea unei baze de
cunoasterii intermediara cunostinte vor trebui combinate
mai multe tehnici.

Generator Generator KRITON contine trei


de fapte de reguli
componente de achizitie care
determina constituirea unei
Baza de reprezentari a cunoasterii interna,
cunostinte intermediara. Acestea fo losesc
Fig. 4.3. Arhitectura de principiu a sistemului KRITON tehnici de achizitie diferite,
determinând captarea eficienta a
mai multor tipuri de cunostinte.
Astfel, analiza de texte si interviurile permit captarea unor caracteristici statice ale
domeniului, precum conceptele, structurile obiect – atribut –valoare, în timp ce analiza
protocoalelor permite achizitionarea cunostinte- lor de tip procedural. Analiza de texte este o
tehnica nementionata în paragraful 4.4, deoarece pentru SE intereseaza mai ales captarea
cunoasterii unor experti si nu folosirea unor manuale. Totusi, de multe ori achizitia de
cunostinte poate începe cu studierea unor texte fundamentale ale domeniului. Acestea pot
ajuta pe cel care face achizitia sa-si însuseasca vocabularul necesar, pregatindu-se astfel faza a
doua a achizitiei, cea a interviurilor. Analiza de texte este inclusa în KRITON ca o prima
152 Achizitia de cunostinte

etapa, când, pe baza textelor preluate din fisiere si ghidat de cel ce face achizitia, se creeaza
ierarhii sau retele (de tip retea semantica) între notiunile care apar cu frecventa mare în texte.

De exemplu, fie urmatorul text: “Cimentul este produs prin macinarea fina a
clincherului, care rezulta în urma unei prelucrari termice într-un cuptor. Cimentul se produce
în fabrici de ciment. Exemple de fabrici de ciment sunt: Hoghiz, Medgidia”. Ceea ce rezulta
prin analiza de text din fragmentul respectiv, este de tipul retelei din fig. 4.4.

Fabrica
Unde se
produce de ciment
Este o
Cimentul Hoghiz
Cum este
Din ce Este o
produs este produs
Macinare Medgidia
fina Clincher

Cum este produs


Prelucrare
termica

Fig. 4.4. Reteaua rezultata printr-o analiza de text

Completarea cunostintelor se face prin interviu, când se achizitioneaza noi concepte si


se stabilesc valorile atributelor atasate diferitelor concepte. Sistemul KRITON foloseste o
serie de principii din retelele semantice si programarea orientata pe obiecte. Astfel, în cazul
unui subconcept sau al unei instante se va tine seama de procesul de mostenire a
proprietatilor. Daca, în exemplul considerat, conceptul “fabrica de ciment” are atasat un
atribut “capacitate pe zi” (nereprezentat în fig. 4.4), iar în cursul interviului utilizatorul
introduce o problema legata de fabrica din Medgidia, atunci sistemul, în mod automat, va
pune o întrebare cu privire la capacitatea pe zi a fabricii din Medgidia, pe baza mostenirii
atributului respectiv de la conceptul mai general “fabrica de ciment”.

Analiza protocoalelor este folosita pentru completarea bazei de cunostinte cu


elementele procedurale. Tehnica este în principiu cea precizata în paragraful 4.4, cu
completarea unei interfete corespunzatoare sistemului KRITON. Astfel, protocolul preluat de
la expert, care va trebui introdus ca text, într-un fisier, este prelucrat printr-o tehnica de
analiza a limbajului natural. Frazele din text corespund unor actiuni, evenimente declansate de
expert si în acestea sunt identificate elementele de tip relatii cazuale (vezi paragraful 3.3.1),
pentru ca apoi, validat de utilizator, actiunile sa fie transformate în structuri operator-
argument. Pe baza acestora, generatorul de reguli al sistemului KRITON creeaza reguli ale SE
(vezi fig. 4.3). Totodata, reprezentarea intermediara a cunoasterii este folosita si de un
Sisteme bazate pe cunostinte 153

generator de fapte, cel care completeaza parte de baza de fapte a bazei de cunostinte. Astfel,
prin constituirea de fapte si reguli, care intra în baza de cunostinte, se finalizeaza procesul de
achizitie, si este parcursa si o parte importanta din dezvoltarea SBC.
Este de mentionat ca utilizatorul are acces la reprezentarea intermediara si poate
introduce direct noi noduri si arce în reteaua semantica, sau noi structuri operator-argument,
elemente care se vor reflecta apoi în completari ale bazei de cunostinte. În plus, evolutia
sistemului nu este una într-o secventa fixa, ci pot apare reveniri. În acest sens pe fig. 4.3 s-au
marcat cu sageti duble legaturile între reprezentarea cunoasterii intermediara si cele trei
tehnici folosite pentru extragerea cunostintelor, pentru a se arata faptul ca acestea nu sunt
aplicate într-o ordine stricta. De exemplu, dupa analiza protocoalelor poate apare necesitatea
revenirii la tehnica interviului, pentru completarea întelesului si conexiunilor unor notiuni
folosite de expert în timpul unui protocol.

KRITON este un instrument de achizitie a cunostintelor de prima generatie. Exista


doua critici majore care au fost aduse acestor instrumente. Prima se refera la lipsa ghidarii
procesului de achizitie dupa scopul problemei de rezolvat. În KRITON nu este clara directia
în care trebuie sa se extinda reprezentarea cunoasterii intermediara (reteaua semantica si setul
de structuri operator-argument) si aceasta deoarece nu exista metacunostinte în legatura cu
scopul pe care trebuie sa îl atinga baza de cunostinte, în forma sa finala. A doua critica se
refera la faptul ca procesul de achizitie trebuie sa fie mai mult corelat cu metoda de rezolvare
a problemelor (de efectuare a rationamentelor) pe care se va baza SBC care se dezvolta. Un
anumit tip de achizitie, cu o anumita forma de reprezentare a cunoasterii intermediara, va
trebui sa fie folosit pentru dezvoltarea unui SE bazat pe strategia de control înainte si un altul
în cazul strategiei înapoi. De asemenea, elemente distincte vor apare în cazul unei probleme
rezolvate printr-un proces de clasificare, fata de cazul uneia care se rezolva printr-o metoda
euristica de asociere a unor situatii si actiuni.

De aceea, în cazul instrumentelor din


Model al Model al generatia a doua se produce o îmbinare între
domeniul metodei
diferitele variante de încorporare a
ui
cunostintelor, conform celor precizate în
paragrafului 4.4.5. De exemplu, în cazul
Model al sistemului OMOS [Lin 93] achizitia
sarcinii
urmareste doua tipuri de aspecte: pe de o
parte structurile statice ale domeniului
Fig. 4.5. Arhitectura principiala a
sistemului OMOS problemei, iar pe de alta elementele
dinamice, cele care determina schimbari ale
starii problemei. Aceasta face sa existe în OMOS doua submodele dezvoltate în timpul
achizitiei (vezi fig. 4.5), cel al domeniului, continând elementele statice si cel al metodei de
rezolvare, referitor la elementele dinamice. Spre deosebire de cazul primei generatii de
154 Achizitia de cunostinte

sisteme, cele doua parti sunt combinate, trebuind sa alcatuiasca împreuna un model coerent al
sarcinii. În acest fel se tine seama de cerinta ghidarii dupa scop si în modelul sarcinii sunt
facute corelatiile între cunostintele referitoare la elementele de schimbare si cele privind
structura domeniului, astfel încât sa se obtina un sistem operational pentru sarcina de
îndeplinit, adica sa se obtina un SBC. Cele doua submodele se dezvolta în paralel si se
influenteaza reciproc: domeniul furnizeaza elemente utilizabile de catre metoda de rezolvare,
iar metoda indica, atunci când este cazul, noi elemente ale domeniului ce trebuie
achizitionate; în acest fel se explica sageata dubla care apare în fig. 4.5 între cele doua
submodele. De exemplu, atunci când în domeniu apare o organizare ierarhica a conceptelor,
aceasta poate conduce spre folosirea unei metode de rezolvare de tip clasificare.

Modelul sarcinii este cel care foloseste elementele celorlalte doua submodele pentru a
rezolva sarcina specifica propusa. De exemplu, într-o problema de diagnoza, scopul este de
identificare a defectelor si cauzelor acestora, si pe baza acestui scop sunt combinate
conceptele domeniului cu deciziile luate de expert, folosind metoda de rezolvare potrivita, de
exemplu o cautare înapoi bazata pe reguli. În momentul în care modelul sarcinii este
completat, sistemul este si operational: s-au achizitionat cunostintele necesare pentru definirea
domeniului, cele pentru evidentierea metodei de rezolvare si în plus acestea au fost si
combinate, în conformitate cu sarcina de rezolvat. Aceasta înseamna, din punct de vedere al
SBC, ca atunci când modelul sarcinii este rezolvat, SBC are baza de cunostinte completata si
functionala.

4.6. Aspecte particulare ale aplicarii achizitiei de cunostinte în


mediul industrial

Elementele prezentate mai sus sunt valabile în general în ceea ce priveste achizitia de
cunostinte necesare construirii SBC, indiferent de domeniul aplicatiei (de exemplu, mediul
industrial, diagnoza medicala, domeniul financiar – bancar, etc.). O serie de particularitati
privind desfasurarea achizitiei de cunostinte în aplicatiile industriale sunt discutate în
continuare.

Un domeniu frecvent de aplicare a SBC în industrie este acela al diagnozei, pentru ca


acestea pot da rezultate bune nu numai în diagnoza medicala, ci si în cea industriala. Exista
doua abordari ale diagnozei industriale: una bazata pe un model al procesului si pe tehnicile
analitice de prelucrare a modelului si a datelor obtinute de la proces, si respectiv o abordare a
sistemelor bazate pe cunostinte, materializata cel mai frecvent prin SE, acestea încercând o
simulare a modului în care expertul uman efectueaza rationamentele în timpul diagnosticarii.
Aspectele particulare ale achizitiei de cunostinte pentru acest caz vor fi cele discutate.
Sisteme bazate pe cunostinte 155

În domeniul considerat, pentru realizarea achizitiei de cunostinte se va pleca de la


tipurile de defecte si simptomele care le evidentiaza. O atentie particulara trebuie acordata
gradului de detaliere a simptomelor care se analizeaza, deoarece o detaliere pâna la cele mai
mici amanunte poate complica inutil baza de cunostinte (vezi si explicatiile din paragraful 3.1
privind stabilirea granularitatii într-un model de reprezentare a cunoasterii). Procedura de
achizitie poate fi desfasurata dupa urmatoarele etape.

− Se defineste domeniul de lucru, ceea ce presupune precizarea tipurilor de defecte


ce trebuie diagnosticate.
− Se stabileste contextul în care un defect va putea fi luat în considerare.
− Se construieste o lista a simptomelor pentru fiecare tip de defect. Aici este de
mentionat ca pot exista defecte care sa determine o plaja foarte larga de simptome si
enumerarea trebuie oprita la aria sistemului; altfel, putem fi în situatia în care baza de
cunostinte cuprinde, de exemplu, o întreaga fabrica, ceea ce nu este eficient.
− Se va analiza o istorie a modului de manifestare a diferitelor simptome, verificând
si transmiterea corecta a semnalelor de la senzori la interfetele operatorilor (simptomele sa se
bazeze pe masuratori corecte).

Un alt domeniu de aplicare a SBC, unde achizitia de cunostinte are aspecte particulare,
este acela al planificarii productiei. Considerând un caz generic si fara a intra în detalii cu
privire la obiectele produse, achizitia poate urma o varianta de tehnica de tipul divizarii
domeniului. Într-o abordare de sus în jos, avem într-o prima iteratie ca element de intrare,
scopul de atins – numar si tip de produse, timpul pâna la care trebuie terminate acestea, iar ca
element de iesire planul de productie; aceasta prima divizare este ilustrata în fig. 4.6a.
În continuare, în functie de scop pot fi detaliate operatiile impuse pentru fiecare tip de
produs si ordinea necesara a acestor operatii. Acum se poate observa ca trebuie cunoscute, ca
elemente de intrare, si masinilor disponibile. Toate acestea pot concura la obtinerea planului
de productie; în acest fel am ajuns la divizarea din fig. 4.6b. La acest grad de detaliere, deja
am constatat ca este necesara achizitia operatiilor prin care se obtine fiecare produs, a ordinii
în care acestea trebuie executate si a masinilor disponibile, cu observatia ca în modelul
masinilor introdus în calculator trebuie sa se regaseasca operatia sau operatiile pe care le
poate executa fiecare din ele.
Urmeaza constatarea ca planul de productie poate fi creat daca realizam o cuplare a
operatiilor necesare cu masinile disponibile si care sa tina seama de restrictiile impuse de
ordinea operatiilor. Aici lucrurile pot varia de la cazul banal în care scopul se refera la un
singur produs si fiecare masina poate executa o singura operatie, când planificarea va putea fi
liniara, aceasta însemnând gasirea unei succesiuni de perechi operatie de efectuat – masina
disponibila, în care operatiile se succed liniar în timp, într-o ordonare totala, pâna la cazul în
care scopul presupune mai multe produse si masinile sunt capabile sa execute mai multe
operatii, când rezolvarea se poate obtine, de exemplu, prin tehnici de IA de planificare
156 Achizitia de cunostinte

neliniara, sau de satisfacere a restrictiilor [Pan 94], [Fre 94]. Am constatat astfel necesitatea
achizitiei unui nou element, acela al metodei de împerechere a operatiilor si masinilor,
împerechere care sa tina seama de restrictiile specifice operatiilor necesare unui anume
produs. Ajungem astfel la schema din fig. 4.6c, care poate ghida procesul de achizitie.

Scop Plan de productie Fig. 4.6. O abordare a


achizitie de cunostinte pentru
planificarea productiei prin
a) divizarea domeniului
Scop

Operatii necesare Ordinea necesara a Masini disponibile


operatiilor

b) Plan de productie

Scop

Operatii necesare Ordinea necesara a Masini disponibile


operatiilor

Metoda de alocare
operatii - masini
c)

Plan de productie

Alte elemente pe care trebuie sa le avem în vedere, în conformitate cu cele discutate în


paragrafele anterioare, se refera la modelele care vor fi folosite pentru a încorpora
cunostintele extrase de la expert în baza de cunostinte a unui SBC, în asa fel încât acesta sa fie
operational. De exemplu, fiecare tip de scop poate fi modelat printr-o retea, care sa puna în
evidenta operatiile pe care le implica si relatiile de precedenta, ca în fig. 4.7. Apoi, acestea vor
putea fi usor trecute într- un grup de reguli, încorporabile în baza de cunostinte. Astfel, putem
corela scopurile cu operatiile necesare si ordinea acestora, prin grupuri de reguli. Pentru cazul
din fig. 4.7 putem considera regulile:
Sisteme bazate pe cunostinte 157

Produs de Daca produsul este de tip 1 atunci sunt necesare o


operatie de taiere, doua operatii de gaurire si o
slefuire.
Taiere
Precede Precede Daca produsul este de tip 1 atunci operatia de
Gaurire 1 Gaurire 2 taiere trebuie sa preceada cele doua gauriri si
slefuirea.
Precede Precede
Slefuire
Daca produsul este de tip 1 atunci operatiile de
Fig. 4.7. Exemplu de definire de produs gaurire trebuie sa preceada slefuirea.

La rândul lor, masinile pot fi modelate prin perechi de forma nume masina – set de
operatii posibile de efectuat. Un exemplu în acest sens este: Masina_1 – {taiere, gaurire}. O
data ce au fost stabilite toate modelele necesare, achizitia poate urma schema din fig. 4.6c, iar
pentru un SBC operational vor trebui realizate si interfetele catre utilizator, care sa preia
scopul, sa extraga din acesta informatiile necesare pentru completarea modelor care compun
baza de cunostinte si respectiv sa transmita spre utilizator, într-o forma convenabila, planul de
productie dezvoltat.

Un domeniu de aplicare industriala a SBC este si acela al supervizarii. În modul


conventional, aceasta se bazeaza pe abilitatea dobândita prin experienta de unii experti
(operatori) de a asigura acele comenzi care determina în diferitele situatii o functionare sigura
si eficienta a unui proces industrial. Daca se realizeaza o buna achizitie de cunostinte,
supervizarea poate fi îndeplinita si de un SBC, prevazut cu interfetele adecvate; în acest caz se
pot obtin avantajele cunoscute pentru folosirea SE/SBC, în primul rând fiind vorba de o
disponibilitate crescuta, o crestere a calitatii prin introducerea unor elemente de optimalitate,
pe care unii operatori le neglijeaza, si o crestere a vitezei de reactie.

O posibilitate de rezolvare a achizitiei de cunostinte pentru construirea unui SBC


destinat supervizarii este aceea de a folosi o varianta a tehnicii ghidate de scop, si anume
aceea a caracteristicilor si deciziilor. Asa dupa cum s-a mentionat în paragraful 4.4.3, expertul
va furniza o serie de caracteristici ale situatiilor de lucru si deciziile pe care le ia. O organizare
eficienta a cunostintelor poate fi facuta sub forma tabelara. De exemplu, în tab. 4.1 este
prezentata o asemenea achizitie, cele 8 linii ale tabelului reprezentând situatiile distincte
întâlnite de expert. Pe coloane sunt trecute conditiile definitorii pentru fiecare situatie; de
exemplu, ci poate reprezenta valoarea unui semnal de intrare, starea unui dispozitiv, etc. Pe
ultima coloana apare actiunea (decizia) expertului, tot sub forma unei valori numerice, aceasta
putând reprezenta valoarea fixata pentru o marime de iesire. Tabelul este completat cu
coloana notata “Timpul”, în care este precizat momentul în care expertul a depistat o anumita
158 Achizitia de cunostinte

situatie si a luat o anumita decizie de actiune, în conditiile în care aceasta informatie este
disponibila.
Doua situatii sunt de nedistins în cazul în care toate conditiile în proces sunt identice.
În tab. 1, doua asemenea situatii sunt S1 si S3 , ca si S2 si S5 . Doua situatii de nedistins sunt
echivalente, daca satisfac conditia: A(Si) = A(Sj ), unde am notat cu A(Si) actiunea
corespunzatoare situatiei Si. În tab. 1, sunt echivalente starile S2 si S5 , în timp ce S1 si S3 nu

Tabelul 4.1.
Conditii
Situatia Timpul Actiunea
C1 C2 C3 C4 C5
S1 1 2 1 3 -2 1 1,5
S2 2 1 3 3 -2 2 2
S3 1 2 1 3 -2 3 2,5
S4 2 2 3 3 0 4 0
S5 2 1 3 3 -2 5 2
S6 3 2 1 2 -1 6 1
S7 2 2 2 -1 2 7 0
S8 4 1 0 2 1 8 3

sunt echivalente, actiunile întreprinse de expert fiind diferite. Doua stari echivalente se vor
putea reuni în tabelul achizitiei de cunostinte, ele caracterizând de fapt o unica situatie a
procesului si a comportarii expertului, produsa la mai multe momente de timp; aceasta
înseamna ca în cazul studiat se vor putea reuni într-o stare unica S2 si S5 .

Un asemenea tip de achizitie va putea fi folosit în mod eficient pentru construirea SE.
Astfel, pe baza tabelului se vor putea construi regulile din baza de reguli. Dupa reunirea
starilor echivalente, fiecare linie a tabelului va corespunde unei reguli a SE; de exemplu,
pentru situatia S1 din cazul analizat vom avea regula:

Daca C1 = 1 si C2 = 2 si C3 = 1 si C4 = 3 si C5 = −2 atunci A = 1,5

unde partea de actiune fixeaza valoarea actiunii de întreprins.

O problema care poate apare este aceea a situatiilor care sunt de nedistins si nu sunt
echivalente (situatii de dubiu); în cazul prezentat asa sunt S1 si S3 . Daca în urma achizitiei se
constata existenta unor asemenea cazuri, aceasta înseamna ca procesul tehnologic, sau mai
degraba procesul decizional al expertului nu este de tip determinist: pentru doua situatii
identice în proces expertul ia decizii diferite. Se va proceda la remedierea situatiei de catre
expert, prin eliminarea uneia din cele doua situatii si a actiunii corespunzatoare, transformând
Sisteme bazate pe cunostinte 159

procesul în unul determinist. Daca totusi expertul nu poate decide în acest sens, ceea ce arata
o incapacitate a sa de discriminare a unor diferente în proces, atunci fie se va încerca o
corelatie a actiunilor cu momentul de timp al întreprinderii acestora (folosind coloana
“Timpul” a tabelului de achizitie), fie SE va determina trecerea controlului spre operator în
momentul când detecteaza o situatie de dubiu.

Asa cum a fost descrisa, metoda este sistematica (ea are conexiuni si cu o tehnica a IA
folosita, de exemplu, în cazul robotilor industriali si numita învatarea din exemple [Fu 87]),
dar poate ridica impedimente atunci când expertul nu poate cuantifica precis, numeric,
conditiile care disting situatiile din proces sau actiunile întreprinse. O solutie într- un asemenea
caz poate fi aceea în care, în locul tabelului de mai sus, sa apara unul continând termeni si
variabile lingvistice, modelate prin multimi fuzzy, varianta care poate rezolva cazurile de
apreciere calitativa, eventual aproximativa, a procesului.

Mai este de mentionat ca o asemenea tehnica de achizitie de cunostinte poate fi si


automatizata, prin realizarea unor instrumente software, care sa prezinte expertului tabelele de
completat si sa converteasca în mod automat informatiile din aceste tabele în baza de
cunostinte a SE. În acest caz, dupa realizarea instrumentelor respective, se elimina sau se
micsoreaza importanta persoanelor care fac achizitia de cunostinte.
160 Achizitia de cunostinte

4.7. Concluzii – întrebari si probleme

Achizitia de cunostinte este o etapa indispensabila în construirea unui SBC. Metodele


si instrumentele de achizitie s-au dezvoltat cu o oarecare întârziere fata de cele destinate
implementarii SBC; aceasta a constituit si o cauza a frânarii raspândirii acestor sisteme. În
prezent, chiar daca problema nu este complet rezolvata, sunt stabilite o serie de elemente
teoretice, si exista puneri în practica ale unor sisteme de achizitie a cunostintelor care
functioneaza în mod corespunzator. Totusi, fiecare construire a unui SBC/SE va implica, din
punct de vedere al achizitiei, elemente specifice si va presupune un anumit grad de creativitate
din partea celui care rezolva problema respectiva.

O concluzie este aceea a necesitatii unei abordari mixte. Rareori si de obicei pentru
probleme simple este suficienta folosirea unei singure tehnici de extragere a cunostintelor.
Frecvent acestea trebuie îmbinate; analiza de texte, interviul, tehnica întâlnirilor si discutiilor
focalizate, analiza protocoalelor sunt fiecare adecvate pentru un anumit tip de cunostinte si
numai combinarea lor poate conduce la preluarea abilitatilor expertului uman.

Procesul de achizitie este caracterizat si printr-o evolutie iterativa, în care tehnicile de


achizitie sunt aplicate în mod repetat, pâna la obtinerea tuturor cunostintelor necesare. El
presupune atât extragerea cunostintelor de la expert, cât si încorporarea acestora în baza de
cunostinte. În legatura cu a doua etapa, conexiunea cu aria reprezentarii cunoasterii este
directa: aceasta este cea care furnizeaza modele conform carora cunostintele vor fi înglobate
în SBC. În plus, o serie de elemente din capitolul de reprezentare a cunoasterii pot fi transpuse
la achizitia de cunostinte; de exemplu, calitatile cerute unui bun model de reprezentare a
cunoasterii pot fi urmarite în faza de extragere a cunostintelor, ca un ghid al procesului
respectiv.

O concluzie cu privire la acest proces este si aceea ca el trebuie privit si rezolvat prin
prisma a trei perspective diferite: una este aceea a domeniului, numita si a modelelor,
deoarece este cea care trebuie sa determine preluarea cunostintelor de baza ale domeniului de
lucru, obtinând totodata organizarea acestora într- un model coerent si eficient din punct de
vedere computational – modelul de reprezentare a cunoasterii; a doua este aceea a scopului
(sarcinii) de îndeplinit, cea care trebuie sa determine achizitia a ceea ce trebuie sa
îndeplineasca SBC; a treia este perspectiva metodelor de rezolvare, cea care trebuie sa
acumuleze caile prin care, folosind cunostintele existente la un moment dat asupra mediului,
sa se poata îndeplini scopul propus (vezi fig. 4.8). Aceste trei perspective trebuie luate în
considerare în mod iterativ. Evolutia o putem imagina ca fiind una în spirala, determinând în
fiecare etapa o rafinare dintr-un anumit punct de vedere, iar în final obtinerea bazei de
cunostinte a SBC. De exemplu, un scenariu posibil este acela în care cel care face achizitia
Sisteme bazate pe cunostinte 161

pleaca de la sarcina de îndeplinit, apoi


Modele acumuleaza cunostinte ale domeniului si le
organizeaza într- un model, urmând
considerarea metodelor de îndeplinire a
sarcinii, ceea ce va conduce la necesitatea
Metode Sarcini introducerii unor noi subsarcini si modele,
s.a.m.d.
Fig. 4.8. Cele trei perspective pentru
procesul de achizitie a cunostintelor În conformitate cu cele prezentate
în acest capitol, o tendinta pentru achizitia
de cunostinte este aceea de automatizare. Aceasta ar putea fi privita în sensul de eliminare a
persoanei care extrage informatiile de la expert si le aduce la forma necesara pentru baza de
cunostinte, prin folosirea unor programe specializate, care sa realizeze interfatarea respectiva.
Totusi, datorita complexitatii procesului de achizitie, caracterului sau creativ, se admite în
prezent [Dav 93] ca prezenta si specializarea celui care face achizitia sunt indispensabile,
chiar daca el foloseste instrumente software de achizitie. Aceasta deoarece frecvent pot apare
inadvertente, lipsuri, ambiguitati în cunostintele furnizate de expert, pe care programele de
achizitie nu le pot detecta în totalitate, cât si datorita necesitatii crearii unor modele robuste pe
care sa le încorporeze baza de cunostinte, aspect ce trebuie de asemenea ghidat de persoana
care conduce procesul de achizitie. Astfel, accentul nu se mai pune pe eliminarea celui ce face
achizitia, ci pe asigurarea unor tehnici si instrumente care sa îl sprijine pe acesta.
Întrebari si probleme

1. Ce înseamna principiul rationalitatii, nivelul cunoasteri si cel al reprezentarii în


achizitia de cunostinte?
2. Precizati calitatile pe care trebuie sa le aiba o persoana îndeplinind sarcina de
“knowledge engineer”.
3. Faceti o comparatie în privinta aplicarii schemei din fig. 4.1 în programarea
conventionala, respectiv în SBC.
4. Care sunt problemele dificile în achizitia de cuno stinte? Ce înseamna paradoxul
expertizei?
5. Care sunt principalele tehnici ale achizitie de cunostinte? Gasiti exemple care sa se
potriveasca aplicarii diferitelor tehnici.
6. În ce consta tehnica de achizitie cu structurarea cunostintelor (KADS)? Faceti o
comparatie între straturile din tehnica respectiva si nivelele din fig. 4.1.
7. Reteaua din fig. 4.4 poate fi privita ca retea semantica; transpuneti cunoasterea
respectiva în modelul de cadru, respectiv în limbajul calculului cu predicate de ordin întâi.
8. Care sunt diferentele între instrumentele pentru achizitia de cunostinte din prima si
a doua generatie?
162 Achizitia de cunostinte

9. Transpuneti cunoasterea din tab. 4.1 în diferite modele de reprezentare a


cunoasterii.
10. Aplicati schema de achizitie de cunostinte pentru planificarea productiei din
fig. 4.6, considerând ca masini utilajele care apar în fig. 3.16, împreuna cu un stocator al
pieselor brute si un depozit al produselor finale.
5.1. Prezentare generala a mediului CLIPS

Mediul CLIPS este un instrument de programare destinat construirii SE/SBC.


Denumirea este un acronim de la “C Language Integrated Production System” [Gia 89],
[Gia 93], [CLI 93]. CLIPS a fost realizat la NASA/Johnson Space Center, pe lânga faptul ca
este un instrument de lucru pentru IA, având si obiectivele de a fi portabil, ieftin si usor
integrabil cu alte sisteme. El a suferit o continua evolutie (în prezent se foloseste versiunea 6),
ajungând sa fie completat cu module destinate programarii orientate pe obiecte (COOL), ca si
cu o varianta implementata în JAVA, numita Jess [Wat 99]. În continuare ne vom referi, în
principal, la versiunea 6 a mediului CLIPS, în care pot fi verificate exemplele propuse si
rezolvate exercitiile, si acolo unde este cazul vom comenta deosebiri ale versiunii 5.

Câteva caracteristici ale CLIPS sunt:


• foloseste un interpretor;
• contine un motor de inferente bazat pe strategia înainte (implementat în C, pe baza
unui mecanism de potrivire eficient, capabil sa faca fata cerintelor de lucru în timp real –
algoritmul RETE [For 85]);
• foloseste programarea bazata pe reguli, având si un modul destinat programarii
orientate pe obiecte;
• poate fi rulat atât sub sistemul de operare DOS, cât si sub WINDOWS, UNIX, etc.
• contine depanator de programe, editor de texte.

Deoarece foloseste un interpretor, interactiunea cu mediul CLIPS presupune


transmiterea unei comenzi de la nivel superficial (în engleza: “top level”). Se ajunge la nivel
superficial dupa lansarea interpretorul CLIPS. De îndata ce a aparut prompterul “CLIPS>“, o
comanda CLIPS poate fi transmisa spre evaluare.
Comenzile CLIPS sunt de tipurile urmatoare.
164 Reprezentarea cunoasterii folosind mediul CLIPS

1. Apelul unei functii – functiile se scriu în CLIPS în forma prefixata, fiecare apel al
unei functii trebuind sa fie plasat într-o pereche de paranteze. Interpretorul evalueaza functia
respectiva, cu argumentele ei si afiseaza rezultatul evaluarii. De exemplu, calculul sumei
7 + 5 se va scrie în CLIPS: (+ 7 5).
Este de retinut ca, atunci când se dau mai multe comenzi pe aceeasi linie (fara a da
“Enter” între ele), numai prima este luata în considerare si evaluata de interpretor.

2. Definitia unei constructii – are drept efect crearea unei noi constructii, care tine
seama de definitia respectiva. Se obtine astfel posibilitatea de construire a faptelor si regulilor
dintr- un SE.

3. Numele unei variabile globale – în CLIPS se pot folosi variabile globale; daca
utilizatorul transmite drept comanda numele unei variabile globale, interpretorul determina
valoarea acelei variabile la momentul respectiv si o afiseaza.

4. O constanta – daca utilizatorul transmite drept comanda o constanta, atunci


interpretorul afiseaza constanta respectiva. Constantele sunt în CLIPS de urmatoarele 3 tipuri.

a) Numar –poate fi un întreg, reprezentat intern ca un întreg C lung, si respectiv un


numar real. Acesta din urma se reprezinta în dubla precizie, iar numarul de cifre semnificative
depinde de calculatorul pe care se afla interpretorul. Pentru numerele reale se admite scrierea
cu punct zecimal si cea cu mantisa si exponent.

b) Simbol – un simbol este o secventa de caractere ce începe cu un caracter ASCII


tiparibil si este urmat de zero sau mai multe caractere ASCII tiparibile, cu urmatoarele
exceptii:
• un simbol nu va începe cu unul din caracterele: ~, <, |, &, $, ?, +, -, (, ), “, ;.
Explicatia este legata de faptul ca toate aceste caractere introduc situatii speciale în CLIPS,
care vor fi explicate ulterior.
• un simbol nu va putea contine nici unul din caracterele: <, |, &, (, ), “, ~, ;.
Toate aceste 8 caractere, împreuna cu spatiul, tab-ul si sfârsitul de linie, constituie
delimitatorii (separatorii) în CLIPS.
CLIPS face distinc tie între literele mari si cele mici. Exemple de simboluri CLIPS
sunt:

abc, A1, @2!?A.

c) Sir de caractere – este o succesiune de zero sau mai multe caractere, incluse între
ghilimele. Daca vrem sa includem într- un sir de caractere si ghilimelele trebuie sa folosim
caracterul de control \ ("backslash") înaintea ghilimelelor. Daca un sir de caractere trebuie sa
Sisteme bazate pe cunostinte 165

contina \ atunci acesta trebuie dublat. Într-un sir de caractere poate apare si spatiul, sfârsitul
sirului fiind marcat de ghilimele. Exemple de siruri de caractere sunt:
“ab1”, “a:\\user\\a.clp”.

O constanta CLIPS (numar, simbol sau sir de caractere) se numeste si câmp CLIPS
sau data primitiva CLIPS. Câmpurile CLIPS sunt separate prin delimitatori, care sunt cei
amintiti mai sus.
166 Reprezentarea cunoasterii folosind mediul CLIPS

5.2. Conventii de notatie pentru întelegerea sintaxei CLIPS

Pentru a întelege si urmari mai usor sintaxa CLIPS facem câteva conventii de notatie;
acestea nu sunt elemente ale sintaxei CLIPS, ci doar conventii care vor facilita explicarea
programelor scrise în CLIPS (sunt ca si regulile unui pseudo-cod).
Vom nota comanda “Enter” cu ¶. Orice nu apare inclus între perechile de semne: < >,
[ ], { }, este un cuvânt cheie si trebuie folosit ca atare. Perechile respective vor fi folosite cu
semnificatiile urmatoare.

Perechea [ ] indica un element optional. De exemplu, succesiunea:

(data [1])

va putea fi scrisa în program (data 1) sau (data).

Perechea < > indica necesitatea substituirii cu un element (unul singur) de tipul
indicat. De exemplu, pentru cazul:

(exemplul <întreg>)

o varianta corecta în program poate fi: (exemplul 21).

Succesiunea << >> indica necesitatea unei substituiri cu zero sau mai multe aparitii
ale unui element de tipul specificat. Daca este vorba de mai multe aparitii, acestea vor fi
separate prin spatiu. De exemplu, pentru cazul:

(relatie <<întreg>>)

variante corecte în program pot fi: (relatie –2); (relatie 23 145 –3); (relatie).

Succesiunea <<< >>> indica necesitatea unei substituiri cu una sau mai multe aparitii
de tipul specificat (nu zero aparitii). Situatia:

(data <<<întreg>>>)
va avea ca variante corecte în program: (data 20); (data 23 145 –3).

Perechea { } indica faptul ca unul singur din elementele dintre acolade va trebui sa fie
folosit. Daca într-o explicatie apare:
Sisteme bazate pe cunostinte 167

(exemplul {1, 2, abc})

aceasta înseamna ca variante corecte în program pot fi numai: (exemplul 1); (exemplul 2);
(exemplul abc).

Pentru a iesi de sub interpretorul CLIPS se foloseste comanda: (exit), sau din fereastra
“File”, comanda “quit”.

Exercitiul 5.1.
a. Raspundeti la întrebarile:
• Cum se poate interactiona cu mediul CLIPS ?
• Care sunt tipurile de câmpuri CLIPS ?

b. Stiind ca operatiile aritmetice se simbolizeaza în CLIPS prin +, – , *, / , ca acestea


pot avea oricâti operanzi, si ca nu exista o prioritate a operatiilor, rezolvati în CLIPS
urmatoarele calcule:
25 + (17 - 2) : (4 + 1) x 10
17,3 x [15,5 : (13,2 - 1,5 - 10,3) : 3] x (100 : 2,14)

c. Preciza ti numarul de câmpuri din urmatoarele exemple:


c1) ””abc”” c2) – 12”!vb|”ab+c c3) ”\”a bc 12\” ”.
168 Reprezentarea cunoasterii folosind mediul CLIPS

5.3. Construirea bazei de fapte în CLIPS

CLIPS fiind destinat realizarii SE trebuie sa asigure posibilitatile pentru constituirea


bazei de fapte si a celei de reguli. Conform clasificarii comenzilor CLIPS din paragraful 5.1,
vor fi folosite pentru realizarea acestor elemente ale unui SE definitiile de constructii.

5.3.1. Forma faptelor

Un fapt CLIPS este o lista de unul sau mai multe câmpuri. În CLIPS o lista un
continut delimitat prin perechea de paranteze ( ); deci un fapt este unul sau mai multe câmpuri
incluse între paranteze. Conform conventiilor de notatie avem urmatoarea definitie a faptului
CLIPS:

Fapt := (<<<câmp>>>) (5.1)

Exemple de fapte CLIPS sunt:

(componente-calculator "cpu" memorie tastatura) (5.2)


(Ion este tatal- lui Vasile) (5.3)
(temperatura punct_A 123.5) (5.4)

Limbajul CLIPS, ca limbaj de IA, nu introduce restrictii în ceea ce priveste felul în


care este organizat un fapt (numarul câmpurilor, ordinea acestora). Totusi, exista metode de
organizare eficienta a programelor si în programarea bazata pe reguli. Astfel, în ceea ce
priveste baza de fapte, va fi de preferat o scriere a faptelor dupa anumite tipare (sabloane).
Cum de obicei un fapt reprezinta o rela tie între mai multe elemente, relatie adevarata la
momentul respectiv, este util sa se respecte tiparul:

(<nume-relatie> <<<elemente-aflate- în-relatie>>) (5.5)

Folosirea unui acelasi tipar pentru toate faptele din baza de fapte va determina usurinta
în urmarirea si întelegerea bazei de fapte de catre programator si de catre utilizator, cât si
usurinta în actualizarea acesteia. Faptele (5.2) si (5.4) de mai sus respecta tiparul (5.5), în timp
ce faptul (5.3) nu respecta acest tipar; el poate fi rescris, conform tiparului (5.5), ajungându-se
la forma:

(este-tatal- lui Ion Vasile) (5.6)


Sisteme bazate pe cunostinte 169

De remarcat numarul diferit de câmpuri din cele doua forme (5.3) si (5.6); de
asemenea, forma (5.3) este mai apropiata de limbajul natural si poate fi de preferat în anumite
cazuri.
Concluzia este aceea ca programatorul, într-o etapa preliminara scrierii programului,
trebuie sa stabileasca tipare pe care, atât pentru consecventa, cât si pentru conceperea mai
usoara a regulilor, le vor urma faptele din baza de fapte; aceste tipare trebuie sa fie cât mai
inteligibile si pentru beneficiarul SE.

Mai exista si unele aspecte de optimalitate care vor fi lamurite ulterior, referitoare la
interdependenta între forma faptelor din baza de fapte si regulile din baza de reguli, cât si la
ocuparea memoriei. Legat de acest ultim aspect, se poate ca într-un fapt numele relatiei sa nu
mai fie înscris, fiind subînteles, aceasta omisiune determinând o reducere a numarului de
câmpuri.

Faptele introduse în acest paragraf se numesc fapte CLIPS nestructurate; exista si


fapte de tip structurat care vor fi prezentate ulterior.

5.3.2. Adaugarea si stergerea faptelor din baza de fapte

Toate faptele cunoscute la un moment dat de interpretorul CLIPS sunt mentinute într-o
colectie – baza de fapte (BF), sau memoria de lucru, care în CLIPS se mai nume ste si lista de
fapte (“fact list”). Exista mai multe posibilitati de a introduce fapte în BF.

Varianta a). Se pot introduce unul sau mai multe fapte în BF de la nivel superficial sau
dintr-o regula, din partea de actiune a acesteia, prin comanda “assert”. Aceasta are sintaxa (ne
bazam pe definitia (5.1) a faptului CLIPS):

(assert <<<fapt>>>) (5.7)

Exemple de folosire a acestei comenzi sunt:

(assert (nume Ion) ) (5.8)


(assert (presiune punct_A 215) (temperatura punct_A 100.5) (stare alarma)) (5.9)

Se remarca introducerea unui singur fapt în cazul (5.8) si a trei fapte în cazul (5.9).
Comanda “assert” poate fi folosita nu numai la nivel superficial, ci si în partea de actiune a
unei reguli, asa cum se va explica ulterior. Din punct de vedere al clasificarii ce a fost data în
paragraful 5.1, comanda "assert" va fi încadrata în categoria functiilor; "assert" este numele
functiei, argumetele sunt faptele care sunt delimitate de închiderea parantezei, iar efectul
evaluarii functiei este acela de modificare a BF.
170 Reprezentarea cunoasterii folosind mediul CLIPS

Faptele sunt prezente în BF împreuna cu un identificator care ajuta la gasirea acestora.


Identificatorul este de forma: f – i, unde i este un contor, incrementat la fiecare introducere a
unui nou fapt în BF. Este de remarcat ca, în cazul unor operatii repetate de introducere si
stergere de fapte din BF, aceasta va ramâne cu “gauri”, în sensul incrementarii continue a
contorului i, fara a se reveni la pozitiile din care au fost sterse fapte.

Utilizatorul are mai multe posibilitati de a vedea starea BF la un moment dat. Astfel,
exista comanda:

(facts [<start> [<end> [<maxim>] ] ] ) (5.10)

unde parametrii start, end si maxim sunt întregi pozitivi. Semnificatia este aceea ca aceasta
comanda poate fi folosit a cu 0 pâna la 3 argumente. Daca sunt 0 argumente atunci se afiseaza
întreaga BF; daca se foloseste numai start atunci se listeaza toate faptele având contorul
identificatorului mai mare sau egal cu start; daca se foloseste si start si end atunci se afiseaza
toate faptele al caror contor satisface rela tia:

start ≤ i ≤ end (5.11)

Daca apare si maxim, împreuna cu start si end, atunci vor fi listate cel mult maxim
fapte (primele), care respecta conditia (5.11).

Alta posibilitate de a vedea BF este sa se deschida fereastra pentru fapte (meniul


Window, optiunea Facts), în care se va afisa continuu starea BF.

Exercitiul 5.2.
a. Introduceti de la nivel superficial mai multe fapte în BF.
b. Urmariti faptele introduse prin comanda “facts”, folosita cu un numar diferit de
argumente, cât si prin deschiderea ferestrei de fapte.

Varianta b). BF poate fi completata si prin comanda “deffacts”. Aceasta, spre


deosebire de “assert” este o comanda de definire a unei constructii. În CLIPS exista
posibilitatea ca utilizatorul sa creeze constructii (reguli, obiecte, grupuri de fapte, s.a.) prin
folosirea unor comenzi corespunzatoare. Toate comenzile de definire de constructii au o
forma sintactica apropiata si vor putea fi folosite la nivel superficial, sau vor putea fi înscrise
într-un fisier, cu ajutorul unui editor de texte si apoi aduse sub interpretorul CLIPS, printr-o
comanda adecvata de încarcare a fisierului respectiv.
Sisteme bazate pe cunostinte 171

Comanda “deffacts” este aceea care permite utilizatorului sa defineasca un grup de


fapte. Sintaxa acestei comenzi este:

(deffacts <nume-deffacts> [<comentariu-optional>] <<fapt>>) (5.12)

nume-deffacts – trebuie sa fie un simbol si va fi un identificator al grupului respectiv


de fapte;
comentariu-optional – trebuie sa fie un sir de caractere si va fi folosit pentru a
documenta programul, în sensul ca utilizatorul poate nota explicatii care sa ajute întelegerea
continutului grupului de fapte.

Mai mentionam ca toate comenzile CLIPS pot fi înscrise pe oricâte linii, cu


respectarea conditiei de închidere corecta a tuturor parantezelor.

Un exemplu de utilizare a comenzii “deffacts” este:


(deffacts stare- initiala “aceasta este starea initiala a problemei”
(temperatura intrare-cuptor 1050)
(presiune fluid- lucru 240) (5.13)
(stare contactor1 buna) )

În legatura cu comanda “deffacts” mai trebuie facute urmatoarele observatii. Faptele


înscrise într-o comanda “deffacts” sunt introduse în BF numai dupa o comanda (reset); asupra
celorlalte efecte ale acestei comenzi vom reveni. Comenzile “deffacts” pot fi plasate si în
fisiere, create cu ajutorul editoarelor de texte (comenzi "assert" nu pot fi puse într- un fisier, pe
care apoi sa- l putem folosi pentru a încarca faptele din acele comenzi). Pentru a încarca sub
interpretorul CLIPS continutul unui asemenea fisier se va folosi comanda:

(load <nume- fisier>)

unde argumentul respectiv trebuie sa fie de tip sir de caractere sau simbol. El va preciza
numele fisierului pe care îl dorim a fi încarcat; în functie de plasarea acestui fisier, va fi
necesar eventual sa precizam si calea, tinând seama de regulile de scriere a sirurilor de
caractere. De exemplu, comanda (5.13) fiind înscrisa în fisierul fisier1.clp (de obicei extensia
fisierelor în care înscriem programe CLIPS este .clp), atunci, de sub interpretorul CLIPS,
putem încarca acest fisier prin comanda (am presupus ca a fost necesara precizarea caii):

(load “d:\\users\\fisier1.clp”)

sau, daca suntem într-un mediu care lucreaza cu meniuri, putem folosi direct comanda Load
constructs, din meniul File. Mai mentionam ca într-un fisier pot fi înscrise oricâte comenzi de
172 Reprezentarea cunoasterii folosind mediul CLIPS

definire de constructii, dupa cum putem pastra construc tii în mai multe fisiere, pe care sa le
încarcam atunci când este necesar. Un efect invers fa ta de “load” are comanda:

(save <nume- fisier>)

unde argumentul trebuie sa fie de tip sir de caractere sau simbol. Efectul este de salvare în
fisierul respectiv a tuturor definitiilor de constructii existente în sistem în acel moment.

Faptele din BF pot fi sterse, atunci când ele nu mai sunt adecvate (formulele pe care le
reprezinta nu mai sunt valide), cu ajutorul comenzii:

(retract <<<contor>>>)

unde contor trebuie sa fie un întreg pozitiv, reprezentând contorul din identificatorul faptului
care trebuie sters. Exemple de utilizare a acestei comenzi sunt:

(retract 1)
(retract 5 23 25)

Daca se cere stergerea unui fapt care nu exista (locul respectiv este gol), se afiseaza
eroare. Exista si urmatoarea forma a comenzii “retract”:

(retract *)

care determina stergerea tuturor faptelor din BF.

Exercitiul 5.3.
a. Raspundeti la urmatoarele întrebari:
• Care sunt deosebirile dintre comenzile "deffacts" si "assert" ?
• Câte fapte se pot afla într-o BF, dupa rularea unui program, între identificatorii
f-10 si f-15 ?
• Cum poate utilizatorul vedea primele 25 fapte aflate între identificatorii f-15 si
f-80 ?

b. Explicati rezultatul urmatoarei comenzi, data la nivel superficial:


(assert (aaa1) (bbb2) ) (assert (ccc3) ) ¶

c. Concepeti tiparele de fapte pentru urmatoarele cazuri si introduceti în BF câteva


exemple de fapte care sa respecte tiparele stabilite (introducerea faptelor sa se faca pentru
unele de la nivel superficial, pentru altele dintr-un fisier creat cu un editor de texte).
Sisteme bazate pe cunostinte 173

• reprezentarea sub forma de fapte a multimilor;


• reprezentarea sub forma de fapte a relatiilor de rudenie;
• reprezentarea prin fapte a diferitelor figuri geometrice plane;
• reprezentarea sub forma de fapte a universului de discurs pentru o celula de
fabricatie (se poate lua, de exemplu, cazul din fig. 3.16).
174 Reprezentarea cunoasterii folosind mediul CLIPS

5.4. Construirea bazei de reguli în CLIPS

Pentru a introduce o regula în baza de reguli (BR) se poate folosi comanda “defrule”,
care fiind de tip definire de constructie are o forma similara cu comanda “deffacts”. Sintaxa
pentru “defrule” este:

(defrule <nume-regula> [<comentariu-optional>] <<tipar>> => <<actiune>> )

nume-regula – trebuie sa fie un simbol si va fi identificatorul regulii respective;


comentariu-optional – trebuie sa fie un sir de caractere si va fi folosit pentru a
documenta programul; aici se vor înscrie eventualele explicatii necesare în legatura cu regula;
tipar – este un element al partii de conditie a regulii si are forma unei liste cu una sau
mai multe pozitii (deci, conform definitiei pentru o lista în CLIPS, un tipar este delimitat de
paranteze);
actiune – este o comanda CLIPS, care va fi de tip functie si va fi executata atunci când
regula este executata; totalitatea actiunilor unei reguli constituie partea dreapta a regulii
(partea de concluzie).

Pentru fiecare regula trebuie folosita o comanda “defrule”; daca o comanda “defrule”
se foloseste succesiv cu acelasi nume de regula, atunci ultima definitie o înlocuieste pe cea
anterioara. Regulile se introduc în BR prin folosirea comenzilor “defrule” la nivel superficial,
sau prin înscierea acestor comenzi în fisiere si încarcarea acestora prin comanda “load”.

O regula din BR se poate gasi în una din starile: inactivata, activata si în executie. O
regula este activata daca toate tiparele ei pot fi potrivite pe faptele din BF din momentul
respectiv; în caz contrar regula este inactivata. Aceasta înseamna ca în CLIPS se respecta
chestiunea formala discutata în capitolele anterioare, anume ca partea de conditie a regulilor
este sub forma de formula conjunctiva. De exemplu, fiind data regula cu numele
“regula_exemplu”, introdusa prin definitia:

(defrule regula_exemplu “acesta este¶


un exempluӦ
(a 1)¶
(b 2)¶ (5.14)
=>¶
(assert (c 3) ) )¶

ea va fi activata daca în BF se gasesc faptele (a 1) si (b 2).


Sisteme bazate pe cunostinte 175

Este de remarcat împerecherea parantezelor în constructia (5.14), acesta fiind un


aspect deosebit al sintaxei CLIPS. O regula activata este una pregatita pentru executie; la un
moment dat, în timpul lucrului SE, mai multe reguli pot fi activate. Astfel, se defineste
agenda ca fiind multimea tuturor regulilor activate la un moment dat.

Observatia 5.1.
a. Se constata cum din punct de vedere al sintaxei CLIPS faptele au aceeasi forma cu
tiparele regulilor, chestiune explicabila teoretic prin felul în care trebuie sa lucreze motorul de
inferente.
b. O regula poate sa aiba si zero tipare; felul în care este activata o asemenea regula va
fi explicat la comanda “reset”.
c. Din punct de vedere al sintaxei este permis ca o regula sa nu aiba nici o actiune, desi
asa ceva nu este util; în programarea bazata reguli, acestea sunt cele care determina evolutia
programului, prin actiunile pe care le produc, cu efecte fie asupra bazei de cunostinte, fie în
exteriorul SBC.
d. Ca un caz particular, agenda poate contine si zero reguli (atunci când nici o regula
din BR nu este satisfacuta de faptele prezente în BF).
e. În definitia unei reguli acesteia i se poate atasa un nivel de prioritate. Daca unei
reguli nu i s-a fixat în mod explicit o prioritate, interpretorul CLIPS îi va da în mod implicit
prioritatea 0. Atasarea prioritatii se face prin declaratia:

(declare (salience <întreg>)) (5.15)

unde întreg trebuie sa fie un numar întreg cuprins între –10000 si 10000. Declaratia
(5.15) trebuie sa apara în definitia regulii dupa comentariul optional (daca acesta exista) si
înainte oricarui tipar. Prioritatea atasata unei reguli este luata în considerare de motorul de
inferente, dupa cum se va arata în continuare.

Executia unei reguli înseamna executia, în ordinea în care apar, a actiunilor din partea
dreapta a regulii. Actiunile sunt reprezentate de comenzi CLIPS de tip functie, iar în CLIPS
versiunea 6 sunt admise drept actiuni si definitiile de constructii. În exemplul dat prin regula
(5.14), partea de actiune a acesteia contine o singura comanda “assert”, astfel ca dupa executia
regulii vom constata ca în BF a fost introdus un nou fapt – ( c 3). Executia regulilor în
CLIPS nu se face în mod automat, ci numai daca utilizatorul transmite comanda:

(run [<limita>])

Argumentul respectiv trebuie sa fie un întreg, mai mare sau egal cu -1 si el da numarul
maxim de reguli care sa fie executate. Daca argumentul “limita” nu este prevazut, sau are
valoarea -1, atunci executia regulilor va continua pâna când nu mai exista nici o regula în
176 Reprezentarea cunoasterii folosind mediul CLIPS

agenda (dupa ce o regula este executata ea este scoasa din agenda); daca argumentul este
prevazut, atunci executia va înceta dupa cel mult un numar de executii de reguli egal cu
“limita”.

Din cele prezentate pâna aici rezulta ca apare o interdependenta între reguli si BF :
regulile sunt activate sau nu, în functie de faptele prezente în momentul respectiv în BF.
Aceasta interdependenta este sub controlul motorului de inferente.
Sisteme bazate pe cunostinte 177

5.5. Ciclul de lucru al motorului de inferente în CLIPS

În CLIPS motorul de inferente lucreaza ciclic, conform pasilor precizati în continuare


(este de mentionat ca acest ciclu de lucru are un caracter de generalitate pentru SE folosind
motoare de inferente cu cautare înainte):

Pas 1. Se determina toate regulile care au partea de conditie satisfacuta, tinând seama
de starea BF din momentul respectiv; regulile activate sunt trecute în agenda.
Pas 2. Daca este admisa o evaluare dinamica a prioritatilor regulilor, atunci se
reevalueaza prioritatile tuturor regulilor din agenda. Se ordoneaza regulile din agenda în
functie de valorile prioritatilor acestora si de strategia de rezolvare a conflictului folosita
(setata). Daca agenda este vida, sau s-a atins numarul impus de reguli de executat, atunci
ciclul (rularea) se opreste.
Pas 3. Se executa actiunea/actiunile din partea dreapta a regulii aflate pe prima pozitie
în agenda (regula respectiva este eliminata din agenda, aspect aflat în legatura cu proprietatea
de refractie a sistemelor bazate pe reguli – vezi paragraful 5.6). Se incrementeaza contorul cu
privire la numarul regulilor executate si se revine la pasul 1 (prin executia regulii baza de
cunostinte poate fi modificata, astfel ca la revenirea la pasul 1 este justificata).

Observatia 5.2.
a. Daca pasii 1 si 2 se executa de la sine, de îndata ce exista BR si BF, fara nici o alta
comanda suplimentara, pasul 3 intra în functiune (si cu aceasta rularea, repetarea ciclului)
numai daca utilizatorul transmite comanda “run”. Dupa ce a fost data aceasta comanda, ciclul
de mai sus se este declansat, oprirea putând sa apara în conformitate cu conditia precizata la
pasul 2.
b. Cei trei pasi de mai sus au denumiri în functie de scopul lor. Pasul 1 se numeste de
potrivire, fiind vorba de gasirea regulilor ale caror tipare se potrivesc pe faptele din BF.
Procesul de potrivire are o serie de aspecte specifice, ce vor fi discutate separat. Pasul 2 se
numeste de rezolvare a conflictului; denumirea provine din aceea ca multimea regulilor
activate la un moment dat (agenda) se mai numeste si multime conflictuala; explicatia
denumirii este aceea ca regulile din agenda sunt în conflict, în ceea ce priveste obtinerea
executiei; rezolvarea conflictului se face în conformitate cu o anumita strategie si exista mai
multe strategii, ce vor fi prezentate ulterior. Pasul 3 se numeste de executie.
c. Prin repetarea ciclului de mai sus se produce o evolutie a BF: dupa fiecare executie
a unei reguli BF se poate modifica, deoarece în majoritatea cazurilor actiunile regulilor sunt si
de tipul celor care afecteaza BF (de exemplu, “assert”, “retract”). Dupa efectuarea pasului 3,
BF putând fi modificata, pasul 1 are consistenta, în sensul ca noi reguli pot fi satisfacute, în
timp ce altele nu mai sunt satisfacute.
178 Reprezentarea cunoasterii folosind mediul CLIPS

d. Tinând seama de observatia a si de bucla pe care o determina ciclul de lucru al


motorului de inferente, rezulta ca agenda este recalculata în urmatoarele momente:
• înaintea rularii, ori de câte ori BF este modificata;
• în pasul 1 al ciclului de lucru, dupa executia unei reguli.
e. Într- un SE, în mod normal agenda va contine la rulare, în majoritatea timpului, un
numar mare de reguli. Daca în agenda s-ar gasi în orice moment o singura regula, atunci
rezolvarea conflictului nu ar mai fi necesara. O asemenea situatie indica faptul ca problema în
lucru are o rezolvare secventiala si în consecinta trebuie abordata prin programarea
conventionala.
Sisteme bazate pe cunostinte 179

5.6. Urmarirea agendei - proprietatea de refractie a sistemelor


expert

Tinând seama si de ultima observatie din paragraful anterior, rezulta ca în timpul


evolutiei unui SE apare frecvent ca necesara urmarirea agendei si în acest sens exista în
CLIPS comanda:

(agenda)

Rezultatul va fi afisarea continutului agendei, adica a regulilor aflate în agenda, în


forma:

nr nume-regula: f - i1 , f - i2 , ...f - ij, ... , f - in

în care nr indica prioritatea ce a fost atribuita regulii respective, iar f - ij sunt identificatorii
faptelor care au satisfacut tiparele regulii (acestia apar în ordinea tiparelor din regula).
Afisarea agendei se poate obtine si activând optiunea corespunzatoare din meniul Window.

Exercitiul 5.4.
Scrieti regula care sa fie activata daca în BF se gasesc faptele (a), (b) si (c) (activarea
sa se produca numai daca sunt prezente toate trei în BF) si care sa introduca în BF, la
executie, faptul (d) . Urmariti BF si agenda. Efectuati rularea.

CLIPS este dotat cu o caracteristica importanta, existenta în general la SE, numita


refractie. Se considera ca aceasta proprietate a fost copiata de la celula nervoasa (dupa ce un
neuron a transmis un impuls ca urmare a unui stimul, acelasi stimul nu- l va mai putea excita
din nou, pentru o anumita perioada de timp). În cazul unui SE refractia înseamna ca o regula
nu va fi activata de un acelasi fapt în mod repetat. Fara aceasta proprietate, conform ciclului
de lucru al motorului de inferente, un SE ar fi blocat într-o bucla infinita, chestiune ce se
poate ilustra chiar cu regula din exercitiul anterior. Regula respectiva nu elimina din BF nici
unul din cele 3 fapte ce au determinat activarea ei; în consecinta, daca nu ar exista refractia,
regula ar fi repusa în agenda si executata la infinit.
Exercitiul 5.5.
Daca asa ceva este necesar, cum poate fi depasita refractia ? Exemplificati pe cazul din
exercitiul anterior (a se tine seama de felul în care sunt atasati identificatorii faptelor si de
observatia urmatoare).

Observatia 5.3.
180 Reprezentarea cunoasterii folosind mediul CLIPS

Ceea ce retine motorul de inferente sunt faptele care au determinat activarea, împreuna
cu identificatorii acestor fapte. Aceeasi combina tie de identificatori nu va putea face o noua
activare, în schimb în combinatia respectiva ordinea conteaza, astfel ca aceleasi fapte pot
determina mai multe activari, considerate în ordini diferite, evident cu conditia asigurarii
potrivirilor necesare. De exemplu, asa cum vom vedea ulterior, agenda ar putea arata la un
moment dat în forma:

0 R1 f - 1, f - 2
0 R1 f - 2, f - 1

aceasta însemnând ca regula R1, de prioritate 0, este activata de doua ori de aceleasi fapte, cu
identificatorii f - 1 si f - 2. În aceasta situatie, la comanda (run) regula R1 va fi în principiu
executata de doua ori, conform celor doua plasari ale ei în agenda.

Exercitiul 5.6.
a. Care este conditia pe care trebuie sa o îndeplineasca faptele din explicatia de mai
sus, din punct de vedere al procesului de potrivire ?
b. Tinând seama de raspunsul la întrebarea anterioara, rezulta ca mai pot fi posibile si
alte plasari ale lui R1 în agenda, tot datorit a faptelor f - 1 si f - 2. Care sunt acestea ?
c. În ce conditii se poate întâmpla ca dupa prima executie a regulii R1 din explicatia de
mai sus, urmatoarea sau urmatoarele executii sa nu se mai produca ?

Daca la un moment dat este necesara depasirea refractiei, în legatura cu o anumita


regula, o posibilitate este si folosirea comenzii:

(refresh <nume-regula>)

efectul fiind de replasare în agenda a regulii precizate prin argumentul respectiv, în conditiile
în care potrivirea pentru acea regula este satisfacuta, iar neactivarea ei se datoreste refractiei.
Sisteme bazate pe cunostinte 181

5.7. Initializarea în CLIPS

Comanda “reset” este cea care poate fi folosita în CLIPS pentru a obtine un efect de
initializare (aducerea bazei de cunostinte într-o stare initiala, prestabilita de programator). Ea
are forma:
(reset)

si determina urmatoarele efecte:

• elimina toate regulile din agenda;


• videaza BF;
• introduce în BF toate faptele din toate comenzile “deffacts” existente în sistem.

Comanda “reset” poate fi activata si din optiunea corespunzatoare din meniul


Execution.
Datorita efectelor sale, comanda “reset” este cea care se foloseste de obicei pentru a
lansa în lucru un SE scris în CLIPS. Mai exista un efect în acest sens, obtinut tot în urma
executiei acestei comenzi si care poate fi util pentru rezolvarea “pornirii” unui SE. Astfel,
interpretorul CLIPS introduce în mod automat (implicit) urmatoarea comanda:

(deffacts initial- fact (initial- fact) ) (5.16)

adica introduce de la sine o comand a “deffacts” în interiorul careia se afla un singur fapt, cu
un singur câmp: initial- fact. Rezulta ca dupa efectuarea comenzii “reset”,vom gasi în BF, în
mod automat, faptul (initial- fact), care va fi plasat la identificatorul f - 0. Astfel, chiar daca
utilizatorul nu a introdus în sistem nici o comanda “deffacts”, dupa “reset” BF va contine un
fapt. Rolul lui “initial- fact” este de crea o posibilitate de începere a unui program scris în
CLIPS. În acest sens, este de observat ca rularea în CLIPS nu se produce daca nu exista reguli
plasate în agenda, iar daca BF nu contine fapte, regulile nu pot fi activate. Totusi, daca în BR
exista reguli cu partea de conditie vida (zero tipare – ceea ce este admis de sintaxa comenzii
“defrule”), motorul de inferente le considera ca si cum ar avea în partea stânga un singur tipar,
de forma:

(initial- fact)

În acest fel, dup a “reset”, toate regulile cu partea stânga vida vor fi plasate în agenda,
deoarece în BF exista faptul preluat din definitia implicita (5.16), introdusa în mod automat de
sistem. Asemenea reguli vor putea fi folosite de utilizator, printr-o parte de actiune
corespunzatoare, încât ele sa efectueze actiunile de pornire pentru SE (de exemplu, primirea
datelor initiale de la utilizator).
182 Reprezentarea cunoasterii folosind mediul CLIPS

5.8. Comenzi utilitare pentru reguli si fapte

În afara de comenzile deja descrise (“facts”, “agenda”) exista si alte comenzi care pot
ajuta utilizatorul în construirea si urmarirea BF si a BR. Astfel, se poate afla continutul BR
prin comanda:
(rules)

care va avea ca efect afisarea numelor tuturor regulilor prezente în BR. Putem vedea întreg
continutul unei reguli prin comanda:

(pprule <nume-regula>)

singurul argument specificând numele regulii pe care o vrem afisata integral (denumirea este
o prescurtare de la formularea în engleza “pretty print rule” – afisare “frumoasa”; în CLIPS
exista mai multe comenzi a caror denumire începe cu "pp" si care au o actiune similara - de
afisare a continutului unei constuctii) . Efectele comenzilor “rules” si “pprule” (ca si cel al
comenzii “refresh”) se pot obtine si folosind meniul Browse.

Comenzi similare exista si pentru “deffacts”. Astfel putem vedea numele tuturor
comenzilor “deffacts” existente prin:

(list-deffacts)

iar continutul unui “deffacts” prin:

(ppdeffacts <nume-deffacts>)

si aceste comenzi fiind accesibile si din meniul Browse.

Comenzile “defrule” si “deffacts” pot fi sterse prin:

(undefrule <nume-regula>) si respectiv (undeffacts <nume-deffacts>)

efectul fiind acela de stergere a regulii specificate, respectiv a comenzii “deffacts” cu numele
precizat prin argumentul respectiv (stergerea se poate face si din meniul Browse). Este de
observat ca în cazul stergerii unei comenzi “deffacts” nu se produce stergerea faptelor din BF,
ci stergerea definitiei construc tiei “deffacts” respective. De asemenea, este de observat ca
utilizatorul, intrat sub interpretorul CLIPS, poate sterge si constructia “deffacts” introdusa
automat de sistem (cea cu numele “initial- fact”); evident utilizatorul va face asa ceva daca
Sisteme bazate pe cunostinte 183

vrea sa elimine efectul pe care îl are comanda respectiva – cel provocat de “reset”. O comanda
de stergere generala este comanda:

“reset”
“assert”

BF
Baza de definitii de constructii

Grupuri de Reguli
fapte (deffacts) (defrule) - BR Motor de inferente

Fapte structurate Variabile globale


(deftemplate) (defglobal)
Agenda

Fig. 5.1. Entitatile mediului CLIPS

(clear)

care sterge toate informa tiile din sistem: se videaza BF, BR, agenda si sunt sterse toate
comenzile de definire de constructii (în particular toate comenzile “deffacts”), adica sistemul
devine ca în momentul pornirii (comanda “clear” este disponibila si din meniul Execution).

Efectele tuturor acestor comenzi se pot întelege mai bine daca luam în considerare
entitatile cu care lucreaza mediul CLIPS, conform fig. 5.1. Se pot observa aspectele comune
cu arhitectura generala a unui SE data în primul capitol, dar si unele particularitati ale
mediului CLIPS. Astfel, acesta mentine într-o colectie – Baza de definitii de constructii –
toate definitiile (comenzile care încep cu “def”) introduse în sistem (fie de la nivel superficial,
din fisiere încarcate cu “load”, sau ca rezultat al actiunii unor reguli). În aceasta colectie exista
separat o submultime a tuturor definitiilor “deffacts” – accesibila prin “list-deffats”, sau din
meniul Browse, o submultime a tuturor definitiilor de reguli – accesibila prin “rules” si care
are rolul BR din arhitectura de SE, dupa cum mai sunt si seturile definitiilor de variabile
globale, de fapte structurate, asupra carora vom reveni, sau definitiile de obiecte
(nereprezentate în fig. 5.1) din modulul destinat programarii orientate pe obiecte. Separat de
aceasta multime exista BF, care poate fi vizualizata într-o fereastra separata si în care faptele
ajung pe cele doua cai deja prezentate: din definitiile “deffacts”, dupa o comanda “reset”, sau
din comenzile “assert”. De asemenea exista agenda, care contine regulile activate, adica
elementele din BR aflate în situatia de a avea partea de conditie verificata de faptele din BF,
chestiune rezolvata de motorul de inferente.
184 Reprezentarea cunoasterii folosind mediul CLIPS

Asupra efectului diferitelor comenzi, “reset” nu afecteaza în nici un fel baza de


definitii de constructii; ea sterge BF si agenda, si apoi pune în BF faptele din toate definitiile
“deffacts”. Producându-se aceste schimbari ale BF, dupa “reset” va fi reactualizata si agenda
(vezi paragraful 5.5). Comanda “clear” sterge toate entitatile: BF, baza de definitii de
constructii (unde ramâne numai definitia implicita (5.16)) si în consecinta, nemaiexistând nici
reguli (BR ca parte a bazei de definitii de constructii este stearsa), agenda este si ea vidata. Se
poate sterge un element precizat din baza de definitii de constructii printr-o comanda de tipul
“undef…”. Întreg continutul bazei de definitii de constructii poate fi salvat într-un fisier –
comanda “save” – si reîncarcat prin “load”; daca se doreste o salvare preferentiala, de
exemplu numai pentru anumite reguli, atunci trebuie conceput un program corespunzator. În
fine, comanda “refresh” are efect asupra agendei, colectie care poate fi si ea vizualizata într-o
fereastra separata.
Sisteme bazate pe cunostinte 185

5.9. Comanda de afisare în CLIPS

Una din comenzile ce este frecvent folosita în partea de actiune a regulilor este:

(printout <nume-logic> <<element-de-iesire>>)

unde <nume- logic> indica destina tia iesirii; pentru ca initial vom folosi aceasta comanda
numai pentru afisarea pe terminal, argumentul nume-logic va fi t (iesirea se poate face si la
imprimanta sau într-un fisier, asa cum vom arata ulterior); rezultatul acestei comenzi va fi
înscrierea elementelor de iesire; acestea pot fi în principiu orice comenzi CLIPS, cu exceptia
definitiilor de construc tie. Daca drept element de iesire se foloseste apelul unei func tii sau
numele unei variabile globale, atunci se afiseaza rezultatul evaluarii elementului respectiv.

Cele mai folosite elemente de iesire în comanda “printout” vor fi constantele, de


exemplu pentru afisarea unor mesaje. În acest sens sunt de retinut urmatoarele:

• o constanta de tip sir de caractere este afisata fara ghilimelele de început si de sfârsit;
• între mai multe elemente afisate nu se introduce în mod automat nici un spatiu; de aceea
programatorul trebuie sa aiba grija de obtinerea spatierii, de exemplu prin introducerea unui
element de ie sire de forma “ ”;
• dupa executia comenzii “printout” prompterul nu trece la o line noua în mod automat si
de aceea, aproape întotdeauna, ultimul element de iesire într-o comanda printout va fi
constanta crlf, care va avea drept efect trecerea prompterului pe o linie noua.

Exercitiul 5.7.
a. Verificati efectul urmatoarelor comenzi:
• (printout t (+ 12 13))
• (printout t (+ 12 13) crlf)
• (printout t CLIPS e bun crlf)
• (printout t “CLIPS e bun” 23 “ ” OK (* 2 2) crlf)
• (prinout t (assert (a) ) crlf)
• (printout t (facts) crlf)
b. Scrieti o regula care sa afiseze un mesaj de pornire a functionarii unui SE atunci
când în BF se gaseste un anumit fapt de începere a lucrului.
186 Reprezentarea cunoasterii folosind mediul CLIPS

5.10. Documentarea programelor în CLIPS; comenzi pentru


depanare în CLIPS

O prima posibilitate de documentare în ceea ce prive ste regulile si faptele (numai


pentru cele introduse prin “deffacts”) este aceea de a folosi parametrul optional (cel sub forma
de sir de caractere) ce apare în comenzile de definire de constructii respective. O a doua
posibilitate este aceea de a folosi caracterul rezervat ;. Astfel un comentariu începe cu ; si se
încheie cu ¶. Tot ce apare dup a ; nu este luat în considerare de interpretor. Exista o deosebire
între comentariul scris între ghilimele într-o definitie de construc tie si cel care începe cu ; .
Aceasta se refera la comportarea în raport cu comenzile de tip “pretty print” (“pprule”,
“ppdefacts”): la afisarea continutului unei constructii cu o asemenea comanda, comentariul
scris între ghilimele apare, în timp ce acela prevazut dupa ; nu. Acesta din urma ramâne util în
cazul scrierii definitiilor de constructii în fisiere.

Exercitiul 5.8.
Verificati explicatia de mai sus pe un exemplu, obtinut prin urmatoarele comenzi:

(defrule R1 “Acesta e exemplul meu” => ; el merge grozav (assert (a)) ¶


(assert (b)) )¶
(pprule R1) ¶
(reset) ¶
(run) ¶

În ceea ce priveste depanarea, o posibilitate este de a urmari BF si agenda prin


comenzile “facts”, “agenda” sau prin deschiderea ferestrelor respective.
O comanda utila în depanarea programelor este:

(watch {facts, rules, activations, compilations, statistics, all})

Mai sunt si alti câtiva parametri care pot interveni în comanda “watch”, dar care nu se
refera la BF si BR (urmarirea variabilelor globale, a obiectelor, a functiilor). Comanda
“watch” are drept efect urmarirea anumitor elemente ale programului CLIPS în timpul
lucrului cu interpretorul. Daca parametrul folosit în comanda este “all” atunci vor fi urmarite
toate elementele. Efectul de dezactivare se poate obtine prin comanda:

(unwatch {facts, rules, activations, compilations, statistics, all})


în care daca parametrul folosit este “all” dezactivarea se face pentru toate elementele, iar daca
se foloseste un alt parametru (de exemplu, (unwatch facts) ), atunci dezactivarea se face
Sisteme bazate pe cunostinte 187

pentru elementul respectiv. De observat ca, atât la activarea urmaririi cât si la dezactivarea
acesteia, daca ne intereseaza efectul asupra a doua elemente, atunci comanda va trebui
transmisa de doua ori, cu folosirea parametrilor corespunzatori. De altfel, comanda watch cu
parametrii ei poate fi selectata si din meniul Execution.
Daca se urmaresc faptele (s-a dat comanda (watch facts)), atunci utilizatorul va fi
informat, printr-un mesaj, ori de câte ori un fapt este introdus sau scos din BF. Daca se
urmaresc activarile (comanda (watch activations) ), atunci se va afisa un mesaj ori de câte ori
o regula este introdusa sau scoasa din agenda. Daca se urmaresc regulile (comanda (watch
rules) ), atunci se afiseaza un mesaj de fiecare data când o regula este executata. Daca se
urmaresc compilarile (comanda (watch compilations) ), atunci se afiseaza mesaje la
încarcarea unor definitii de constructii dintr- un fisier (interpretorul face un fel de compilare la
încarcarea definitiilor de construc tii, de exemplu pregatind pasul de potrivire al motorului de
inferente, în conformitate cu algoritmul RETE). Daca se urmaresc statisticile (comanda
(watch statistics) ), atunci se afiseaza mesaje, dupa rulare, cu privire la numarul de fapte din
BF, numarul de reguli din age nda, numarul de reguli executate si timpul de rulare.

O alta comanda de depanare este:

(matches <nume-regula> )

Ea este utila atunci când în BR exista reguli cu multe tipare si dorim sa stim care tipare
au fost satisfacute si care nu la un moment dat. Argumentul va fi numele regulii care vrem sa
fie urmarita din punct de vedere al potrivirilor. Comanda “matches” este accesibila si din
meniul Browse, optiunea Rule Manager. Pentru a ilustra efectul acestei comenzi se poate
folosi urmatorul exemplu:

(defrule Aa (a) (b) (c) => )¶


(assert (b) )¶
(matches Aa)¶
(assert (a) )¶
(matches Aa)¶
(assert (c) )¶
(matches Aa)¶

Mesajele afisate se refera la felul în care se potrivesc tiparele regulii urmarite, în ordinea în
care apar ele în definitia regulii, cât si la felul în care sunt potrivite grupurile de tipare luate
împreuna: primele doua tipare luate împreuna, primele trei tipare luate împreuna, s.a.m.d.
Aceasta urmarire a grupurilor de tipare devine importanta atunci când în tiparele regulii
se folosesc si variabile. Ultimul mesaj afisat la comanda “matches” se refera la activarile
regulii (plasarea sau nu, a acesteia, în agenda).
188 Reprezentarea cunoasterii folosind mediul CLIPS

Tot pentru depanare este utila si comanda:

(set-break <nume-regula> )

Efectul este de stabilire a unui punct de oprire (“break-point”) la regula cu numele dat
prin argument. În acest caz rularea se va opri (iata un alt caz de stopare a ciclului de lucru al
motorului de inferente, neluat în considerare în paragraful 5.5) înainte de executia regulii
respective, cu observa tia ca este necesar ca macar o regula sa fie executata (prin comanda
“run”), înainte ca un punct de oprire sa poata opri executia. De altfel, în acest fel, un punct de
oprire poate fi depasit prin repetarea comenzii de rulare. Dupa fiecare oprire, pentru depanare,
utilizatorul poate cerceta BF si agenda.
Putem lista toate punctele de oprire prin comanda:

(show-breaks)

si putem îndeparta un punct de oprire, sau pe toate, prin comanda:

(remove-break [ <nume-regula> ] )

Daca argumentul exista atunci se va îndeparta numai punctul de oprire corespunzator regulii
indicate, iar daca argumentul lipseste sunt eliminate toate punctele de oprire. Mai mentionam
ca punctele de oprire pot fi manevrate si din meniul Browse, optiunea Defrule Manager.

Un efect de oprire dupa rularea unui anumit numar de reguli se poate obtine si prin
comanda “run”, data cu un argument corespunzator; în plus, în meniul Execution exista si
optiunea Step care are un efect de rulare pas cu pas (este echivalenta lui (run 1), cu observatia
ca pasul poate fi si schimbat la o valoare mai mare ca 1, în optiunea Preferences).

Exercitiul 5.9.
a. Raspundeti la urmatoarele întrebari:

• Cum pot fi introduse regulile în BR ?


• Care este deosebirea între BR si agenda ?
• Care este ciclul de lucru al motorului de inferente în CLIPS ?
• Dupa comanda (run 10) câte executii de reguli s-ar putea produce ?
• Care sunt situatiile în care se opreste rularea în CLIPS ?
• Ce înseamna refractia în domeniul SE ?
• Când este activata în CLIPS o regula care are zero tipare ?
Sisteme bazate pe cunostinte 189

• Câte reguli se executa simultan în CLIPS ?


• Ce posibilitati sunt pentru documentarea programelor în CLIPS? Explicati diferenta
între ele.
• Ce posibilitati pentru depanare ofera CLIPS ?

b. Concepeti un program CLIPS în care sa verificati efectul atasarii punctelor de


oprire.

c. Verificati functionarea programului CLIPS format din urmatoarea regula:

(defrule r (a) => (printout t “Ura!” crlf) (refresh r) )

Experimentul se va face creând conditiile ca regula sa fie activata si efecuând rularea


cu comanda (run 25).

d. Scrieti programul CLIPS (aceasta înseamna BF si BR) care sa materializeze


urmatoarea func tie binara:

F ( x, y, z ) = x ⋅ y ⋅ z U x ⋅ y ⋅ z

e. Scrieti programul CLIPS care sa simuleze functionarea automatului secvential


specificat prin urmatorul tabel de tranzitie:

x S0 S1 S2 S3
0 S1 S1 S3 S3
1 S2 S0 S2 S0

unde am notat cu x variabila de intrare si cu Si starile automatului.

f. Sa se conceapa tiparul pentru reprezentarea sub forma de fapte a polinoamelor, si sa


se scrie regula care sa afiseze mesajul “Am gasit polinomul”, atunci când în BF se gaseste
faptul care atesta prezenta polinomului: 3x3 – 2x + 12.

g. În BF se gaseste, pe pozitia f – 0, faptul (a). La introducerea regulii:

(defrule r (a) => (retract 0) (assert (a) ) )

urmata de comanda “run”, de câte ori se va executa regula r?


190 Reprezentarea cunoasterii folosind mediul CLIPS

5.11. Procesul de potrivire în CLIPS; variabilele în CLIPS


5.11.1. Variabile locale simple; mecanismul de potrivire în cazul folosirii
variabilelor

Ca si în general în programare, variabilele sunt folosite în SE pentru a pastra valori; în


plus, aici ele vor juca un rol important în procesul de potrivire. O variabila CLIPS locala,
simpla este reprezentata sub forma:

?<nume-variabila>
unde nume- variabila trebuie sa fie un simbol CLIPS care sa înceapa cu o litera si între ? si
numele variabilei nu trebuie sa existe nici un spatiu.

Exemple de variabile CLIPS sunt: ?x, ?tensiunea_in_A, ?A21, ?curent- grila.

Înainte ca o variabila sa poata fi folosita trebuie sa fi primit o valoare (în IA se spune


sa fi fost legata). De exemplu, la introducerea urmatoarei definitii, interpretorul va semnala
eroare:

(defrule regula-gresita => (printout t ?x crlf) )

Eroarea este aceea ca a fost folosit a variabila ?x în partea de actiune a regulii, fara ca
aceasta sa fi fost legata în prealabil (fara sa- i fi atribuit o valoare). Variabilele locale pot fi
folosite în partea dreapta a unei reguli numai dupa ce au primit o valoare în partea stânga a
regulii respective. Astfel, un exemplu de folosire corecta a unei variabile într-o regula este
urmatorul:

(defrule r (este-student ?nume) => (assert (a terminat liceul ?nume) ) )

Daca în BF este introdus faptul (este-student Ion) regula r va fi activata si daca se da


si comanda “run” vom constata ca în BF este introdus un nou fapt: (a terminat liceul Ion).
Explicatia este aceea ca o variabila folosita în partea de conditie a unei reguli se va lega în
procesul de potrivire la o anumita valoare, în conformitate cu faptele existente în BF, si apoi
variabila poate fi folosita în partea de actiune a regulii, ea pastrând valoarea la care a fost
legata.

Observatia 5.4.
a. O variabila locala simpla prezenta într-un tipar în partea de conditie a unei reguli va
putea fi potrivita de un singur câmp, indiferent de valoarea acestuia (o variabila simpla nu se
poate lega la doua câmpuri). De exemplu, în regula r de mai sus, un fapt de forma (este-
student Ion Ionescu) nu va determina activarea regulii, deoarece variabila simpla ?nume nu
Sisteme bazate pe cunostinte 191

se poate lega la doua câmpuri. În schimb, faptul (este-student -234.45) va determina


activarea regulii, deoarece variabila ?nume se leaga la un câmp, fara a introduce restrictii
asupra tipului acestuia (vom arata mai târziu cum se pot introduce asemenea restric tii).
b. O variabila locala ramâne legata numai pe durata de actiune a regulii în care apare;
în acest sens nu va fi creata nici o legatura între doua reguli care folosesc aceeasi variabila.
Astfel, fie urmatorul exemplu:

(defrule t1 (a ?x) => (assert (a1 ?x) ) )


(defrule t2 (?x 12) => (assert (b ?x) ) )

Desi în cele doua reguli s-a folosit acelasi nume de variabila, între regulile respective
nu va exista nici o legatura, pentru ca o variabila ramâne legata numai pe durata de actiune a
regulii.
c. O variabila poate fi folosita de mai multe ori în partea de actiune a unei reguli
(respectând conditia de a fi deja legata) si poate fi folosita si în operatii diferite, ca în
exemplul urmator:

(defrule R (este-in-stare-de-functiune calculatorul ?nume-calculator) =>


(assert (poate fi utilizat ?nume-calculator) )
(printout t “Gata de lucru “ ?nume-calculator crlf ) )

d. O aceeasi variabila poate fi utilizata în mod repetat în partea de conditie a unei


reguli, pentru a verifica anumite conditii prin procesul de potrivire, ca în exemplul urmator:

(defrule determinare-autor-curs “vreau sa determin daca un cadru didactic


are curs tiparit”
(cadrul-didactic ?nume tine disciplina ?obiect)
(manualul ?obiect aparut in anul ?an are ca autor pe ?nume)
=>
(printout t “cadrul didactic ” ?nume “ a realizat un manual la disciplina ”
?obiect “ in anul ” ?an crlf) )

Aceasta regula ne permite sa întelegem principiile procesului de potrivire; astfel, ea va


fi activata daca în BF exista doua fapte care sa satisfaca conditiile:

• primul fapt trebuie sa aiba 5 câmpuri;


• al doilea fapt trebuie sa aiba 11 câmpuri;
• primul fapt trebuie sa aiba ca prim câmp simbolul cadrul-didactic, iar pe pozitia
câmpurilor trei si patru simbolurile tine si respectiv disciplina;
192 Reprezentarea cunoasterii folosind mediul CLIPS

• al doilea fapt trebuie sa aiba pe pozitia întâi simbolul manualul, pe pozitiile 3 - 5


simbolurile aparut, in, anul, ia r pe pozitiile 7 - 10 simbolurile are, ca, autor, pe;
• câmpul 2 din primul fapt trebuie sa coincida cu câmpul 11 din al doilea fapt;
• câmpul 5 din primul fapt trebuie sa coincida cu câmpul 2 din al doilea fapt.

Rezulta astfel cum, prin folosirea repetata a variabilelor în partea de conditie a


regulilor, se pot crea efecte de potrivire complexe.
e. Toate variabilele care au fost folosite pâna aici au fost variabile simple, locale si
specificate; aceasta pentru a le deosebi de variabilele nespecificate, cele ce vor fi discutate
ulterior.
f. În CLIPS variabilele pot fi folosite numai în reguli, nu si în fapte. Aceasta determina
caracterizarea facuta în paragraful 3.2.3, conform careia motorul de inferente din CLIPS este
de ordinul 0,5.
g. În CLIPS versiunea 6 variabilele nu pot apare în tiparele regulilor pe prima pozitie,
ci numai pe urmatoarele; pe prima pozitie a tiparului trebuie sa apara o constanta, cea care
reprezinta de obicei numele, aprioric cunoscut, al relatiei la care se refera tiparul respectiv.
Astfel, dintre regulile t1 si t2 de la observatia b, de mai sus, numai regula t1 va fi acceptata în
CLIPS 6. În CLIPS versiunea 5 aceasta restrictie nu exista.

Exercitiul 5.10.
a. Introduceti regula de mai sus, “determinare-autor-curs”, într- un fisier, împreuna cu
un grup de fapte care sa satisfaca partea de conditie a regulii, în asa fel încât sa obtineti macar
doua activari ale acesteia. Verificati rezultatele prin rulare.

b. Daca în BR exista regula:

(defrule bunic
(este-bunic-al ?nume ?nume)
=>
(assert (are-nepot ?nume pe ?nume) ) )

iar în BF exista faptele:

(este-bunic-al Ion Vasile), (este-bunic-al Ioan Ion), (este-bunic I I),


(este-bunic-al 12 12), (este-bunic-al “Ion” Ion)

câte plasari în agenda ale regulii bunic se obtin ? (explicati de ce).

c. Daca în BR exista regula:


Sisteme bazate pe cunostinte 193

(defrule determinare-bunic
(tatal- lui ?copil este ?tata)
(tatal- lui ?tata este ?bunic)
=>
(printout t “Bunicul lui ” ?copil “este” ?bunic crlf) )

iar în BF încarcati continutul urmatorului grup de fapte:

(deffacts relatii-rudenie
(tatal- lui Ion este Mihai)
(tatal- lui Vasile este Mihai)
(tatal- lui Mihai este Andrei)
(tatal- lui Gh este 10)
(tatal- lui Maria este 10)
(tatal- lui 10 este 20)
(tatal- lui Ion este Ion) )

câte activari ale regulii determinare-bunic veti obtine dupa resetare ? (explicati de ce).

d. Cu referire la observatia 5.3, concepeti regula R1 si scrieti grupul de fapte care sa


determine urmatoarea situatie a agendei:

0 R1 f - 1, f - 2
0 R1 f - 1, f - 1
0 R1 f - 2, f - 1
0 R1 f - 2, f - 2

5.11.2. Stergerea faptelor prin folosirea variabilelor

Adesea este necesar ca un fapt sa fie sters din BF în timpul lucrului unui SE, prin
actiunea unei reguli. Un exemplu în acest sens ar fi regula:

(defrule rr => (retract 0) )

în urma executiei regulii obtinându-se stergerea faptului de la identificatorul f - 0. O asemenea


actiune va fi foarte rar folosita într-un SE, pentru ca ea presupune cunoasterea exacta a
contorului din identificatorul faptului care se doreste a fi sters, ceea ce este dificil, tinând
seama de caracterul dinamic al BF. În schimb, exista posibilitatea de a folosi variabile în
partea de conditie a regulilor si de a obtine stergerea unui fapt al carui continut se cunoaste,
fara a trebui sa fie precizat identificatorul la care se afla acel fapt. Exista în acest sens
194 Reprezentarea cunoasterii folosind mediul CLIPS

operatorul special <- care permite legarea valorii contorului din identificatorul unui fapt la o
variabila, în partea de conditie a unei reguli; astfel legata, variabila va putea fi folosita în
partea de actiune, într-o operatie de stergere a faptului respectiv. O asemenea situatie este
ilustrata în exemplul urmator:

(defrule Rr
?adresa <- (a 1)
(b 2)
=>
(retract ?adresa)
(assert (c 3) ) )

Partea de conditie a regulii Rr trebuie înteleasa în felul urmator. Regula cere existenta
în BF a doua fapte: (a 1) si (b 2). Daca regula este activata, variabila ?adresa va fi legata la
contorul din identificatorul faptului (a 1) – în conformitate cu plasarea faptului respectiv în
BF, iar la executie, comanda “retract” va determina stergerea faptului (a 1) din BF. Este de
remarcat ca aici programatorului i- a fost necesara numai cunoasterea continutului faptelor si
nu a locului (adresei) acestora în BF; se ilustreaza astfel una din caracteristicile limbajelor de
IA, aceea ca programatorii nu trebuie sa se mai preocupe de calculul adreselor. Pentru
conciziunea exprimarii vom numi în cele ce urmeaza contorul din identificatorul unui fapt ca
fiind adresa acelui fapt.

Este admisa si folosirea variabilelor în tiparul care se foloseste pentru atribuirea unei
adrese de fapt, dupa cum este posibila efectuarea mai multor atribuiri de adrese în partea de
conditie a unei reguli. Iata un exemplu în acest sens:

(defrule regula-ilustrativa
?a <- (A ?x)
?b <- (b ?y ?x)
=>
(retract ?a ?b) (printout t ?x “ “ ?y crlf) )

Exercitiul 5.11.
Verificati prin încarcarea regulii de mai sus în BR si a faptelo r necesare activarii în
BF, în ce conditii este regula plasata în agenda si care sunt efectele executiei ei. Explicati
functionarea.

Observatia 5.5.
a. Se poate formula o concluzie privind forma (sintaxa) comenzii “retract”; aceasta
este:
Sisteme bazate pe cunostinte 195

(retract <<<adresa- fapt>>>)

unde adresa-fapt poate fi un întreg pozitiv, reprezentând contorul din identificatorul unui fapt
ce trebuie sters, sau o variabila legata la adresa unui fapt ce va fi sters.
b. Variabilele legate la adrese de fapte nu pot fi folosite pentru adaugarea de fapte în
BF prin comenzi “assert”, adica o comanda de forma (assert ?x) unde ?x este legata la adresa
unui fapt este gresita.

5.11.3. Variabile simple nespecificate

Exista situatii când în procesul de potrivire nu ne intereseaza valoarea unui câmp


dintr- un tipar. Într- un asemenea caz va fi utila folosirea variabilelor nespecificate. Variabila
simpla nespecificata are forma: ?. Fie urmatorul exemplu. O BF contine informatii cu privire
la studentii unei universitati. Faptele sunt de forma:

(student <nume> <facultatea> <an-de-studii> <grupa> <domiciliul-stabil>) (5.17)

Pot fi scrise reguli care sa determine faptele ce satisfac anumite conditii. De exemplu,
regula ce determina toti studentii ce au domiciliul în Iasi poate fi:

(defrule domiciliul_in_Iasi
(student ?nume ?facultatea ? ? Iasi)
=>
(printout t ?nume “ de la faculatea ” ?facultatea “ are domiciliul in Iasi” crlf))

Explicatia poate fi obtinuta facând corespondenta între tiparul (5.17) si ceea ce apare
în partea de conditie a regulii. Astfel, regula determina toate faptele pentru care câmpul
<domiciliul-stabil> este simbolul Iasi, urmând sa afiseze, la executie, câmpurile <nume> si
<facultatea>, fara sa intereseze valoarea câmpurilor <an-de-studii> si <grupa>; de aceea în
tiparul regulii s-a folosit în pozitiile care nu intereseaza variabila nespecificata simpla.

În concluzie, variabila nespecificata simpla se va folosi atunci când potrivirea dintr- un


câmp al unui tipar al unei reguli nu ne intereseaza si valoarea respectiva nu trebuie folosita în
partea de actiune a regulii. În legatura cu variabila ? mai sunt de facut observatiile
urmatoare.

Observatia 5.6.
a. Într- un tipar variabila nespecificata poate fi folosita de mai multe ori; de asemenea
ea poate fi folosita de mai multe ori în mai multe tipare; toate aceste situatii nu introduc
196 Reprezentarea cunoasterii folosind mediul CLIPS

restrictii de potrivire. De exemplu, în regula de mai sus, folosirea repetata a lui ?, pentru
câmpurile 4 si 5 nu introduce nici o dependenta de potrivire între aceste câmpuri.
b. Chiar daca valoarea unui câmp dintr-un tipar nu intereseaza din punct de vedere al
procesului de potrivire, atunci când acel câmp este necesar în partea de actiune a regulii, nu se
va folosi variabila nespecificata, ci se va folosi o variabila specificata. Asa s-a procedat în
cazul de mai sus cu câmpurile <nume> si <facultatea>.

Exercitiul 5.12.
a. Precizati care este deosebirea în functionare între urmatoarele doua reguli:
(defrule R1 (persoana ?nume are copii ?x) => )
(defrule R2 (persoana ?nume are copii ? x) => )

b. Cu referire la tiparul (5.17), scrieti regula care sa afiseze toti studentii de la


facultatea de AC, din anul V. Verificati functionarea introduc ând în BF un grup de fapte
potrivite.

5.11.4. Variabile multiple specificate si nespecificate

Variabilele folosite pâna aici au fost variabile simple (specificate sau nu); aceasta se
refera la aceea ca aceste variabile, în procesul de potrivire, tin locul unui singur câmp si se pot
lega la un singur câmp.

Variabila nespecificata multipla este $?. Ea poate fi folosita pentru potrivirea a zero
sau mai multe câmpuri dintr-un tipar, câmpuri care nu ne intereseaza.

De exemplu, fie sablonul:

(multime <nume- multime> <<element>>) (5.18)

conform caruia putem reprezenta multimile prin fapte. Ne intereseaza regula care sa
determine toate multimile pentru care avem fapte în BF, aceasta trebuie sa fie activata
indiferent de numarul de elemente ale multimii respective (în particular aceasta poate fi si
vida). Regula respectiva este:

(defrule gasire- multime


(multime ?nume $?)
=>
(printout t “S-a gasit multimea cu numele “ ?nume crlf) )
Sisteme bazate pe cunostinte 197

Exercitiul 5.13.
Introduceti regula de mai sus într-un fisier, împreuna cu urmatorul grup de fapte:

(deffacts Multimi
(multime M1 3)
(multime M2)
(multime M3 1 3 5)
(multime M4 1 2 3)
(multime M5 1 3 3 5)
(multime M6 3 4 2)
(multime M7 3 4)
(multime M8 1 3 4 2)
(multime M9 1 4 3 2) )

Încarcati fisierul si rulati progr amul; explicati functionarea.

Exista si variabile multiple specificate; acestea vor fi de forma: $?<nume-variabila>,


unde nume-variabila trebuie sa fie un simbol care sa respecte aceleasi conditii ca la variabilele
simple specificate. Variabilele multiple se vor lega la fel ca variabilele simple, dar se vor
putea lega la 0, 1, 2, ..., n câmpuri. Atunci când se afiseaza valoarea unei variabile multiple,
valoarea respectiva apare între paranteze.

De exemplu, regula anterioara – “gasire- multime” – poate fi modificata, astfel ca sa


afiseze elementele din fiecare multime gasita. Se obtine forma:

(defrule gasire- multime-modificata


(multime ?nume $?elemente)
=>
(printout t “S-a gasit multimea cu numele “ ?nume “ continind elemnetele “
$?elemente crlf) )

Mai facem observatia ca variabilele simple si multiple, specificate sau nu, pot fi
folosite împreuna, ceea ce va permite verificarea unor conditii de potrivire complexe. În ceea
ce priveste decizia de folosire a unei variabile multiple specificate sau a uneia nespecificate,
aceasta se ia dupa acelasi criteriu ca la variabilele simple.

Exercitiul 5.14.
a. Cu referire la exemplul din exercitiul 5.13, sa se scrie regula care sa gaseasca toate
multimile ce contin elemetul 3, indiferent de pozitia acestuia în multime, si sa afiseze
198 Reprezentarea cunoasterii folosind mediul CLIPS

elementele aflate în multime înaintea lui 3 si dupa acesta. Verificati functionarea pe grupul de
fapte “Multimi” folosit în exercitiul 5.13 si comentati numarul de activari ale regulii.
Este de subliniat ca faptul (multime M5 1 3 3 5) va determina doua activari ale
regulii care rezolva acest exercitiu. Am obtinut astfel un caz când un acelasi fapt a determinat
plasarea de doua ori pentru o aceeasi regula în agenda. Asa ceva s-a întâmplat deoarece a fost
vorba despre doua potriviri diferite pentru variabilele din partea de conditie a regulii.

b. Referitor la acelasi exemplu, scrieti regula care sa determine toate multimile ce


contin elementul 3 pe penultima pozitie si care sa mai aiba cel putin un element în fata lui 3.

Observatia 5.7.
a. Variabilele discutate pâna aici (simple - multiple, specificate - nespecificate) au fost
variabile locale. Acestea au o anumita semnificatie numai în interiorul unei reguli,
semnificatia pierzându-se în afara acesteia. Astfel, daca de la nivel superficial se da comanda:
?x, se va afisa eroare. Atunci când o regula este activata, o variabila locala folosita în partea ei
de conditie pastreaza o anumita valoare, obtinuta prin procesul de potrivire si care se mentine
pâna la sfârsitul executiei regulii.
b. Desi folosirea variabilelor multiple poate fi esentiala în anumite cazuri în
conducerea procesului de potrivire, utilizarea lor excesiva conduce la ineficienta deoarece ele
determina un consum important de memorie ca si cresterea timpului de rulare. Explicatia este
aceea ca, de exemplu, tiparul (a $?x) va fi încercat pe fapte cu 1, 2, ..., n câmpuri, iar
variabila multipla $?x va trebui sa memoreze 0, 1, 2, ... , n câmpuri, în functie si de faptele
existente în BF.
Ca o regula, o variabila multipla specificata sau nespecificata va fi folosita numai
atunci când numarul de câmpuri dintr- un tipar nu se cunoaste a priori, iar în cazul când acest
numar este cunoscut, se va prefera folosirea repetata a unei variabile simple, chiar daca
aceasta trebuie scrisa de mai multe ori.
c. O variabila multipla specificata, fie aceasta $?x, introdusa în partea de conditie a
unei reguli, poate fi numita în partea de actiune a acelei reguli fara semnul $, adica poate fi
scrisa ?x. Semnul $ are importanta numai în partea stânga a regulii, acolo unde se produce
procesul de potrivire, iar în partea dreapta, variabila fiind deja legata, semnul $ nu mai este
necesar. Un exemplu în acest sens este regula:

(defrule r (fapt $?a1) => (printout t ?a1 crlf) )

în care, la actiunea regulii variabila a fost numita fara $.


d. Un caz special (în general de evitat) este acela când acelasi nume de variabila este
folosit în partea de conditie a unei reguli, atât pentru o variabila multipla cât si pentru una
simpla; într-un asemenea caz, pe lânga faptul ca folosirea aceluiasi nume determina
necesitatea unei potriviri identice, în partea de conditie cele doua variabile îsi pastreaza tipul
Sisteme bazate pe cunostinte 199

lor distinct, iar pentru partea de actiune tipul este dat de prima aparitie în partea stânga a
regulii, a variabilei respective.

Exercitiul 5.15.
Studiati comportarea legata de observatia de mai sus pe urmatorul exemplu:

(defrule rr1 (fapt $?x) (fapt1 ?x) => (printout t ?x " " $?x crlf) )
(defrule rr2 (fapt ?x) (fapt1 $?x) => (printout t $?x " " ?x crlf) )
(defrule rr3 (fapt ?x) (fapt1 $?x) => (printout t ?x " " $?x crlf) )
(defrule rr4 (fapt $?x) (fapt1 $?x) => (printout t ?x crlf) )
(deffacts initial
(fapt 1) (fapt 2) (fapt 1 2) (fapt 1 2 3)
(fapt1 1) (fapt1 2) (fapt1 3) (fapt1 1 2 3) (fapt1 1 2) (fapt1 1 3) )

5.11. 5. Legarea variabilelor în partea de actiune a regulilor

În cele prezentate pâna aici variabilele se legau în partea stânga a regulilor, prin
procesul de potrivire. Daca este necesar, exista si posibilitatea ca o variabila sa se lege în
partea de actiune a regulilor (reamintim ca legarea în CLIPS este corespondentul atribuirii din
limbajele conventionale). În acest sens exista comanda:

(bind <variabila> <expresie>)

Drept argument variabila se poate folosi o variabila locala, simpla sau multipla, sau o
variabila globala (acestea din urma vor fi prezentate în paragraful urmator). Argumentul
expresie poate fi o constanta, o functie, sau o variabila globala. Daca legarea se face pentru o
variabila locala simpla, atunci expresia poate fi o constanta, sau o functie/variabila globala
care sa se evalueze la o valoare cu un singur câmp. Daca functia “bind” se foloseste pentru
legarea unei variabile multiple, atunci cel de-al doilea argument poate fi o constanta (caz în
care variabila multipla se leaga la un singur câmp) sau poate fi o functie/variabila globala care
sa se evalueze la o valoare cu zero, unul sau mai multe câmpuri.

Exercitiul 5.16.
Introduceti urmatoarea regula si comentati functionarea ei, corectând eroarea care
apare (veti crea conditiile ca regula sa fie activata).

(defrule r (a ?x ?y ?z ?t) =>


(bind ?y “as”) (bind ?z (* (+ 1 3) 2))
(bind ?t Ion Ion) (printout t ?x “ ” ?y “ ” ?z “ ” ?t crlf) )
200 Reprezentarea cunoasterii folosind mediul CLIPS

Pentru a putea lega o variabila multipla la o valoare cu mai multe câmpuri va trebui
folosita o functie care sa determine drept rezultat o asemenea valoare. Exista mai multe functii
CLIPS pentru valori multicâmp, dintre care cea mai utila este:

(mv-append <<element>>)

Efectul acestei functii este acela de construire a unei valori multicâmp din elementele
care sunt argumente. Aceste elemente pot fi constante, variabile legate simple sau multiple,
sau functii care sa determine drept rezultat o valoare cu zero, unul sau mai multe câmpuri.
Pentru a vedea efectul acestei comenzi efectuati de la nivel superficial:

(mv-append 1 (+ 12 13) asa (mv-append 2 “an”))

Observatia 5.8.
a. În exemplul de mai sus între argumentele lui “mv-append” nu au aparut si variabile;
pot fi însa folosite si acestea, sub forma de variabile globale; variabilele locale pot apare ca
argumente ale lui “mv-append”, daca aceasta este utilizata în partea de actiune a unei reguli,
acolo unde o variabila locala este deja legata.
b. Functia “bind” poate fi folosita atât pentru legarea unei variabile care a fost deja
folosita în partea stânga a regulii, cât si pentru legarea unei variabile nou introdusa în partea
de actiune a regulii, atunci când o asemenea noua variabila este necesara.

Exercitiul 5.17.
Verificati si comentati functionarea urmatoarei reguli (veti crea conditiile ca regula sa
fie activata prin comanda “assert” sugerata, sau printr- un alt fapt corespunzator, introdus în
BF).

(defrule r-exemplu (?x $?y ?z) =>


(bind $?y (mv-append Rezultatul este))
(bind ?a 12)
(printout t “noua variabila este a= ” ?a crlf ?y (+ ?x ?z ?a) crlf) )

(assert (2 as 34 6) )

5.11.6. Variabile globale CLIPS

Variabilele globale vor pastra valori atât timp cât interpretorul este lansat. O variabila
globala se noteaza prin: ?*<nume-variabila>*, unde nume-variabila trebuie sa fie un simbol
care sa respecte aceleasi conditii ca la variabilele simple specificate. Pentru a putea folosi o
variabila globala aceasta trebuie în prealabil declarata prin definitia de constructie:
Sisteme bazate pe cunostinte 201

(defglobal <<<atribuire-variabila- globala>>>)

unde atribuire- variabila-globala este de forma:

?*<nume-variabila>* = <expresie>.

Un exemplu în acest sens este:

(defglobal ?*g* = 9.8 ?*pi* = 3.14 ?*nume* = Ion)

S-au definit trei variabile globale care s-au si initializat (legat), conform sintaxei cerute
în comanda “defglobal”.

Observatia 5.9.
a. Într-o definitie “defglobal”, în operatia de legare trebuie lasat un spatiu înainte si
dupa semnul =.
b. O variabila globala se poate lega în definitia ei si la o valoare multicâmp, ca în
exemplul urmator:

(defglobal ?*nume* = (mv-append Ion Ionescu) )

c. Variabilele globale nu pot fi folosite în partea stânga a regulilor pentru a se potrivi


pe câmpurile din fapte. De exemplu, urmatoarea regula este eronata:

(defrule r-eronata (fapt ?*y*) => )

În schimb variabilele globale pot fi folosite în partea stânga a regulilor în componenta


testelor asupra câmpurilor (element introdus într- un paragraf urmator) si pot fi folosite în
partea de actiune a regulilor, ca în exemplul urmator:

(defglobal ?*g* = 9.8)


(defrule viteza (timp ?t) => (printout t “Viteza este “ (* ?*g* ?t) crlf) )

d. O variabila globala se poate lega la o noua valoare fata de cea din definitia
“defglobal” prin folosirea functiei “bind” (cea descrisa în paragraful anterior) folosita la nivel
superficial sau în interiorul unei reguli, în partea de actiune. De exemplu, dupa comenzile:

(defglobal ?*A* = 12.3) ¶


(bind ?*A* “Ura!”) ¶
202 Reprezentarea cunoasterii folosind mediul CLIPS

valoarea variabilei ?*A* va fi sirul de caractere “Ura!”.

Exista o serie de comenzi care ne permit sa urmarim variabilele globale. Astfel,


comanda:

(list-defglobals)

va determina listarea numelor pentru toate variabilele globale existente în sistem. De altfel,
exista si posibilitatea sa cream o fereastra în care sa avem afisate toate variabilele globale,
împreuna cu valorile lor, prin activarea optiunii respective în meniul Window. În plus,
variabilele globale pot fi urmarite prin comanda:

(watch globals)

situatie în care utilizatorul este anuntat prin mesaje asupra schimbarii valorilor variabilelor
globale; aceasta optiune se poate activa si din meniul Execution.
Comanda “reset” nu sterge variabilele globale. Felul în care actioneaza “reset” asupra
valorilor variabilelor globale depinde de starea unui bistabil (“flag”) al interpretorului CLIPS,
care poate fi trecut pe TRUE sau FALSE, prin comanda:

(set-reset-globals {TRUE, FALSE})

Aceasta functie determina drept rezultat vechea valoare a bistabilului. Valoarea


implicita a acestuia (cea cu care se intra dupa lansarea interpretorului) este TRUE. Atunci
când bistabilul este pe TRUE efectul comenzii “reset” este de aducere a variabilelor globale
pe valorile lor initiale, cele din definitia “defglobal”. Daca bistabilul este pe FALSE atunci
comanda “reset” nu modifica valorile variabilelor globale (acestea ramân la valorile de la
ultimele legari). Starea bistabilului la un moment dat poate fi determinata prin comanda:
(get-reset- globals) sau din meniul Execution, activând optiunea Options si urmarind marcajul
lui “Reset Global Variables”. De altfel, ajungând în acea fereastra se poate si schimba starea
bistabilului, fara a mai apela la comanda “set-reset-globals”.
Mentionam ca în CLIPS vor exista mai multe bistabile care permit selectarea
functionarii convenabile utilizatorului si pentru toate vor exista comenzi de tipul “set” si
“get”, respectiv vor putea fi comutate si urmarite din anumite meniuri.

Variabilele globale pot fi eliminate toate din sistem prin comanda “clear”, cea care
sterge toate definitiile de constructii, sau câte una, prin comanda:

(undefglobal <nume- variabila-globala>)


Sisteme bazate pe cunostinte 203

unde argumentul trebuie sa fie numele variabilei globale, ca atare, adica fara caracterele ? si *.
De exemplu, vom putea elimina definitia variabilei globale folosite în observatia 5.9, punctul
d, prin comanda:

(undefglobal A)

În acelasi fel trebuie folosit numele unei variabile globale si în comanda


“ppdefglobal”, cea de afisare a unei definitii de variabila globala.

Exercitiul 5.18.
a. Raspundeti la urmatoarele întrebari.
• Care este rolul variabilelor într- un SE ?
• Care este diferenta între o variabila locala si una globala ?
• Care este diferenta între o variabila specificata si una nespecificata ? Când se va
folosi un tip si când celalalt ?
• Care sunt diferentele între urmatoarele doua reguli:
(defrule rr1 (a ?x) (b $?y) => (printout t ?x crlf ?y crlf) )
(defrule rr2 (a $?x) (b ?y) => (printout t ?x crlf ?y crlf) )

• Este corecta regula:

(defrule r ?a <- (a) => (retract ?a) (bind ?a 10) (printout t ?a crlf) )

Daca nu este corecta, care sunt erorile ?


• Când va fi activata regula urmatoare ? Ce rezultat va afisa la executie ?

(defrule r (a ?x) (bind ?x 1) => (printout t ?x crlf) )

• Câte variabile nespecificate pot fi folosite într-o regula ?


• Trebuie scrisa o regula care sa gaseasca toate listele cu 3 elemente. Care din
urmatoarele variante este mai buna ? De ce ?

(defrule R1 (multime ?nume ? ? ?) => (printout t “S-a gasit o multime cu 3 elemente” crlf) )
(defrule R2 (multime ?nume $?) => (printout t “S-a gasit o multime cu 3 elemente” crlf) )

• Ce efect are comanda “reset” asupra variabilelor globale ?

b. Cu referire la sablonul (5.17), scrieti o regula care sa determine toti studentii din
anul V de la facultatea de mecanica; regula va afisa numele studentilor gasiti si domiciliul lor.
204 Reprezentarea cunoasterii folosind mediul CLIPS

c. Cu referire la sablonul (5.18), scrieti regulile care sa determine:


• doua multimi ce au acelasi element pe pozitia a doua;
• doua multimi ce au aceleasi elemente;
• doua multimi ce au un element comun (indiferent de pozitia acestuia), respectiv
doua multimi care au doua elemente în comun;
• o multime în care un element se repeta de 3 ori, indiferent de pozitiile în care se
repeta (admitem ca este posibila o asemenea repetare).

d. Introduceti o definitie de variabila globala si scrieti programul CLIPS cu urmatoarea


comportare: daca în BF exista faptul (schimbare) atunci valoarea variabilei globale va trebui
sa devina simbolul DA, iar daca în BF exista faptul (pastrare) atunci variabila globala
respectiva trebuie adusa la valoarea din definitia ei (facem presupunerea ca faptele
(schimbare) si (pastrare) nu pot exista simultan în BF)

e. Construiti un program CLIPS (BF si BR) care sa contina informatii cu privire la


unele relatii de rudenie dintr-o familie si pe baza acestora sa se poata determina, prin reguli,
relatiile unchi/matusa.

f. O instalatie este supravegheata de 10 senzori. Fiecare senzor poate fi în starea 0 sau


în starea 1. Scrieti un program CLIPS (BF si BR) care sa determine un mesaj de avertizare
daca 3 sau mai multi senzori sunt pe 0. Programul trebuie sa se comporte astfel încât si atunci
când sunt pe 0 mai mult de 3 senzori mesajul de avertizare sa nu fie afisat decât o singura
data.
Sisteme bazate pe cunostinte 205

5.12. Realizarea testelor în CLIPS

În cele prezentate în paragrafele anterioare, testele care se puteau face în partea de


conditie a regulilor erau de urmatoarele doua tipuri:

• testarea valorii unui câmp dintr-un tipar, în sensul ca acesta sa fie identic cu o valoare
constanta; de exemplu, în regula (defrule r (a 12) => ) se cere ca faptul care satisface tiparul
regulii sa aiba primul câmp egal cu constanta a, iar al doilea câmp egal cu constanta 12;
• testarea ca valoarea a doua sau mai multe câmpuri din acelasi tipar, sau din tipare
diferite din partea de conditie a unei aceleiasi reguli sa fie egale, prin folosirea repetata a unei
aceleiasi variabile specificate; de exemplu, în regula (defrule r (a ?x ?x) (b ?x ?x) => ) se
cere ca faptele care satisfac cele doua tipare sa aiba câmpurile doi si trei egale între ele si
egale în cele doua fapte, valoarea respectiva urmând a se lega la variabila ?x.
În afara acestor tipuri de teste, CLIPS mai ofera si alte posibilitati discutate în
continuare.
5.12.1. Operatii logice asupra câmpurilor dintr-un tipar

În partea de conditie a unei reguli, asupra câmpurilor unui tipar se vor putea efectua
operatiile logice conjunctie, disjunctie, negare. Le vom ilustra folosind exemple care se refera
la sablonul (5.17).

a) Operatia de negare se simbolizeaza prin: ~ (tilda).


Astfel, regula care determina toti studentii de la facultatea de AC, care nu au domiciliul
în Iasi este:

(defrule r1 (student ?nume AC ? ? ~Iasi) =>


(printout t ?nume “ este student la AC si nu are domiciliul in Iasi” crlf) )

cu observatia ca între simbolul ~ si valoarea care se neaga nu trebuie lasat nici un spatiu. În
regula respectiva nu ne-au interesat valorile câmpurilor în care este precizat anul de studii si
grupa, astfel ca am folosit pentru pozitiile respective variabila simpla nespecificata.

b) Operatia disjuntie (SAU) se simbolizeaza prin: | (bara verticala).


Astfel, regula care determina toti studentii care au domiciliul în Iasi sau Pascani este:

(defrule r2 (student ?nume AC ? ? Iasi | Pascani) =>


(printout t ?nume “ este student la AC si are domiciliul in Iasi sau Pascani” crlf) )
206 Reprezentarea cunoasterii folosind mediul CLIPS

cu observatia ca înainte si dupa simbolul | poate fi, sau nu, lasat un spatiu, deoarece | este el
însusi un delimitator.

c) Operatia conjunctie (SI) se simbolizeaza prin: & (ampersand).


O operatie de conjunctie între doua constante, efectuata pentru un câmp al unui tipar,
fara sa cauzeze o eroare de sintaxa, va determina obtinerea unei reguli care nu va fi niciodata
activata, deci va fi o regula inutila. De exemplu, regula urmatoare:

(defrule eronata (student ?nume AC ? ? Iasi & Pascani) => )

ar fi activata daca în BF ar putea exista un fapt de forma (5.17) care sa aiba pe ultimul câmp si
valoarea Iasi si valoarea Pascani, ceea ce evident este imposibil. Astfel regula cu numele
eronata, desi va fi acceptata de sintaxa CLIPS, nu va putea fi activata si deci este inutila.

Operatia SI este totusi de utilizat în testele asupra câmpurilor tiparelor în urmatoarele


doua tipuri de situatii.
i) În cazul în care ne intereseaza sa realizam un test asupra unui câmp al unui tipar, iar
valoarea câmpului trebuie sa fie si pastrata într-o variabila, pentru a putea fi folosita în partea
de actiune, vom conecta variabila cu testul efectuat prin operatorul &. Asemenea situatii sunt
ilustrate prin urmatoarele doua reguli:

(defrule r3 (student ?nume AC ? ? ?x & ~Iasi) =>


(printout t ?nume “ este student la AC si nu are domiciliul in Iasi, ci in localitatea” ?x
crlf) )
(defrule r4 (student ?nume AC ? ? ?x & Iasi | Pascani) =>
(printout t ?nume “ este student la AC si are domiciliul in ” ?x crlf) )

Prima regula determina toti studentii de la AC care nu au domiciliul în Iasi si, spre
deosebire de regula r1, în partea de actiune afiseaza localitatea de domiciliu, deoarece aceasta
a fost pastrata în variabila ?x. Regula r4 determina toti studentii de la AC care au domiciliul în
Iasi sau Pascani, la fel ca regula r2, dar în plus afiseaza localitatea de domiciliu, a carei
valoare este pastrata în variabila ?x.
Un alt exemplu de folosire este urmatorul, în care regula r5 determina doi studenti de la
facultatea de AC, care nu locuiesc în Iasi, sunt din grupe diferite, din anul V, afisând numele
studentilor respectivi si grupele din care fac parte:

(defrule r5
(student ?nume1 AC V ?x ~Iasi)
(student ?nume2 AC V ?y&~?x ~Iasi) =>
(printout t ?nume1 “ de la grupa ” ?x “ si ” ?nume2 “ de la grupa ” ?y
Sisteme bazate pe cunostinte 207

“ satisfac cerintele impuse ” crlf) )

De observat ca în aceasta regula operatorul de negare a fost folosit si în fata unei


variabile (apare ~?x în tiparul al doilea); o asemenea utilizare presupune ca variabila
respectiva sa fie deja legata si semnificatia este aceea de a se admite o potrivire la o valoare
diferita de valoarea variabilei. De exemplu, faptele urmatoare:

(student Ionescu AC V 1501 Vaslui)


(student Popescu AC V 1502 Brasov)

activeaza regula r5, cu variabilele ?x si ?y legate la valorile 1501 si respectiv 1502, în timp ce
faptele:

(student Ionescu AC V 1501 Vaslui)


(student Popescu AC V 1501 Brasov)

nu activeaza regula r5, deoarece nu se respecta conditia ca valoarea lui ?y sa fie diferita de
valoarea lui ?x.

În concluzie, în cazul tratat la punctul i) operatorul & asigura legarea unei variabile
într- un tipar al unei reguli, legare care sa urmareasca si satisfacerea unei anumite conditii.

ii) În cazul în care trebuie sa realizam teste compuse, în care sa fie combinate mai multe
operatii logice, poate apare necesitatea folosirii operatiei SI. De exemplu, regula de
determinare a studentilor care sa nu aiba domiciliul nici în Iasi si nici în Pascani este:

(defrule r6 (student ?nume AC ? ? ?x & ~Iasi & ~Pascani) => (printout t ?nume
“ este student la AC si nu are domiciliul in Iasi sau Pascani, ci in” ?x crlf) )

Se observa ca în cazul de mai sus operatia & a fost folosita atât pentru legarea variabilei
?x la rezultatul unui test, cât si la obtinerea conjunctiei între cele doua negatii.

Operatiile logice asupra câmpurilor tiparelor se pot combina, creând posibilitatea testarii
unor conditii complexe. De exemplu, regula r7 va determina daca exista în BF doua fapte
(respectând tiparul (5.17)) cu privire la doua persoane, ce satisfac urmatoarele conditii:

• prima persoana este student la AC în grupa 1501 sau 1502 si nu locuieste în Iasi;
• a doua persoana este student la AC, în aceeasi grupa cu prima persoana si locuieste
sau în Bucuresti sau în aceeasi localitate ca si prima persoana.
208 Reprezentarea cunoasterii folosind mediul CLIPS

(defrule r7
(student ?nume1 AC ? ?gr&1501|1502 ?dom&~Iasi)
(student ?nume2&~?nume1 AC ? ?gr ?dom | Bucuresti)
=>
(printout t “Studentii ” ?nume1 “ si ” ?nume2 “ din grupa ” ?gr
“ indeplinesc conditiile cerute” crlf) )

Este de observat ca în al doilea tipar s-a verificat si conditia ca a doua persoana sa aiba
nume diferit fata de prima persoana, în acest fel împiedic ând activarea regulii cu cele doua
tipare potrivite pe acelasi fapt. De retinut aceasta modalitate de a nu permite ca un acelasi fapt
sa verifice doua tipare dintr-o regula, atunci când ne intereseaza asa ceva.

Exercitiul 5.19.
a. Verificati functionarea regulii r7, creând o BF cu fapte care sa restecte tiparul (5.17)
si în asa fel încât regula sa fie plasata în agenda de câteva ori.

b. Daca în BF cu referire la informa tiile despre studenti (fapte dupa sablonul (5.17))
apare un fapt de forma:

(caut-student <grupa> <domiciliul>)

în care în câmpurile doi si trei sunt precizate grupa, respectiv domiciliul dorit, sa se scrie
programul care sa gaseasca în BF studentii care satisfac conditia de domiciliu ceruta si nu
satisfac conditia privind grupa, studentii care satisfac conditia de grupa ceruta si nu satisfac
conditia privind domiciliul, si respectiv studentii care satis fac ambele conditii.

c. Cu referire la aceeasi BF din exercitiul anterior, sa se scrie programul care sa


determine existenta a doi studenti care sa satisfaca urmatoarele conditii:
i) primul este din anul IV sau V, nu este de la facultatea de AC si are domiciliul în Iasi;
ii) al doilea este din anul III si este de la aceeasi facultate ca si primul student, sau este
din aceeasi grupa cu primul student, daca acesta (primul student) satisface conditiile de la i) si
în plus este de la facultatea de textile.

5.12.2. Predicate în CLIPS

În CLIPS notiunea de predicat este aceeasi cu aceea din logica: un predicat este o
functie care are drept rezultat o valoare de adevar, adevarat sau fals. În CLIPS valoarea fals
este reprezentata de simbolul FALSE (numai în aceasta scriere, cu majuscule), iar valoarea
adevarat este reprezentata de orice alta constanta, diferita de FALSE. Atunci când
Sisteme bazate pe cunostinte 209

interpretorul CLIPS afiseaza o valoare de adevar foloseste TRUE pentru adevarat si FALSE
pentru fals.

Predicatele pentru operatiile logice conjunctie, disjunctie, negatie sunt în CLIPS:

(and <<<predicat>>>)
(or <<<predicat>>>)
(not <predicat>)

Tinând seama de felul în care interpreteaza CLIPS valorile de adevar (orice este diferit
de FALSE este adevarat), rezulta ca orice functie CLIPS care întoarce un rezultat, sau orice
constanta CLIPS, poate fi privita si ca predicat. În acest sens, transmise de la nivel superficial
urmatoarele expresii:

(or 12 “logica”)
(and bun (+ 11 2))

sunt evaluate la valoarea TRUE, în timp ce urmatoarele sunt evaluate la FALSE:

(and -90 FALSE)


(not -56)

Totusi, de obicei în operatiile logice vor fi utilizate o serie de predicate specializate.


Astfel, în efectuarea testelor vor fi utile urmatoarele predicate de testare a tipului: numberp -
pentru tipul numar, symbolp - pentru tipul simbol, stringp - pentru tipul sir de caractere,
integerp - pentru tipul numar întreg, evenp - pentru tipul numar par, oddp - pentru tipul numar
impar. Toate aceste predicate au aceeasi sintaxa, ilustrata pe cazul lui “numberp”:

(numberp <argument>)

care va determina rezultatul TRUE daca argumentul are ca valoare un numar si rezultatul
FALSE în caz contrar.
Pentru efectuarea de comparatii sunt utile urmatoarele predicate: eq - testarea
egalitatii, neq - testarea ne-egalitatii, = - testarea egalitatii, <> - testarea inegalitatii, >= - mai
mare sau egal, > - mai mare, <= - mai mic egal, < - mai mic. Toate aceste predicate au aceeasi
sintaxa, ilustrata pe exemplul urmator:

(eq <argument1> <argument2>)


210 Reprezentarea cunoasterii folosind mediul CLIPS

care va determina rezultatul TRUE daca valorile celor doua argumente sunt egale. Predicatele
eq si neq pot fi folosite pentru testarea a doua valori oarecare, în timp ce toate celelalte pot fi
folosite numai pentru cazul în care valorile argumentelor care se testeaza sunt numere. Daca
suntem în situatia de testare a egalitatii a doua valori al caror tip nu îl cunoastem, va trebui sa
folosim predicatul eq.

În CLIPS predicatele vor fi folosite în reguli, în partea de conditie a acestora. Pentru


aceasta va fi utilizat un tipar de test, realizat conform sintaxei:

(test <predicat>)

Se creeaza în acest fel un tipar în partea stânga a unei reguli care se va considera
satisfacut, daca rezultatul pe care îl furnizeaza argumentul predicat este TRUE. Sa consideram
în acest sens regula r8:

(defrule r8
(a 1)
(b ?x)
(test (> ?x 0))
=> (printout t ?x crlf))

Aceasta va fi activata daca în BF exista faptul (a 1) si un alt fapt care sa aiba drept prim
câmp simbolul b; al doilea câmp din faptul respectiv se leaga la variabila ?x. În conformitate
cu tiparul de test, regula este activata numai daca, în plus fata de cele spuse, valoarea legata la
variabila ?x este un numar (predicatul > da eroare daca argumentele sale nu sunt numere)
strict mai mare ca 0.
Un alt exemplu este acela al regulii r9, care este activata de fapte cu trei câmpuri, în
care: primul trebuie sa fie constanta data, al doilea trebuie sa fie un sir de caractere, iar al
treilea câmp trebuie sa fie un numar impar, mai mare sau egal cu 5 si strict mai mic ca 89;
valorile câmpurilor doi si trei sunt afisate la executia regulii.

(defrule r9
(data ?x ?y)
(test (and (stringp ?x)
(oddp ?y)
(>= ?y 5)
(< ?y 89)
)
)
=> (printout t ?x “ si ” ?y “ satisfac restrictiile cerute” crlf) )
Sisteme bazate pe cunostinte 211

Exercitiul 5.20.
a. Scrieti regula care sa determine faptele din BF care sunt de forma:

(data <valoare1> <valoare2>)

în care sau câmpurile doi si trei sunt numere ce satisfac conditia ca valoare1 este un multiplu
al lui valoare2, sau câmpurile doi si trei sunt doua simboluri egale.
Pentru testarea conditiei ca un numar sa fie multiplu al altuia se poate folosi functia
CLIPS:

(mod <argument1> <argumen2>)

în care cele doua argumente trebuie sa fie numere, si rezultatul va fi restul împartirii întregi a
primului argument la al doilea.

b. Scrieti regula care sa determine perechile de fapte din BF ce sunt ambele de câte trei
câmpuri, primul câmp fiind în amândoua constanta “exemplu”, iar urmatoarele doua câmpuri
sa satisfaca restrictiile:

• câmpul doi din primul fapt sa fie un numar si sa nu fie egal cu al treilea câmp din al
doilea fapt;
• al treilea câmp din primul fapt sa nu fie numar si sa fie egal cu câmp doi din al doilea
fapt.

5.12.3. Operatorul de restrictie asupra câmpurilor tiparelor

Acest operator este simbolizat prin : si permite efectuarea de teste direct asupra
câmpurilor tiparelor. Operatorul : trebuie sa fie urmat de un predicat CLIPS si efectul sau este
cel mai bine ilustrat printr- un exemplu. Fie urmatoarea regula:

(defrule r10
(numar ?nr)
(test (> ?nr 100) )
=>
(prinout t ?nr “ satisface restrictia impusa ” crlf) )

Conform celor precizate în paragraful anterior, aceasta regula va fi activata daca în BF


exista un fapt care are pe prima pozitie simbolul numar, iar pe a doua pozitie un numar strict
212 Reprezentarea cunoasterii folosind mediul CLIPS

mai mare ca 100. Cu ajutorul operatorului de restrictie asupra câmpurilor tiparelor, regula
poate fi rescrisa într-o forma cu un singur tipar:

(defrule r11
(numar ?nr&:(> ?nr 100) )
=>
(printout t ?nr “ satisface restrictia impusa ” crlf) )

În regula scrisa în acest fel operatorul & are rolul de a asigura legarea variabilei ?nr la
valoarea celui de-al doilea câmp din faptul ce satisface tiparul regulii (conform paragrafului
5.12.1), iar prin folosirea operatorlui : se cere si verificarea unei conditii asupra valorii
variabilei respective, conditie determinata aici de predicatul >. Deci, regula r11 este activata
numai daca predicatul care urmeaza dupa operatorul : determina valoarea adevarat, ceea ce
înseamna ca regula r11 este echivalenta cu regula r10. Despre succesiunea &: se spune ca are
întelesul lui “astfel înc ât”.

Observatia 5.10.
a. Operatorul : trebuie sa fie întotdeauna urmat de un predicat, adica de o functie
având drept rezultat o valoare de adevar.
b. Din punct de vedere al eficientei (timp de executie si memorie ocupata) regula r11
este mai buna decât r10; ea are un singur tipar, în comparatie cu prima varianta, care are doua
tipare - cel obisnuit si cel de test. Deci, pentru eficienta, vor fi de preferat testele efectuate
direct asupra câmpurilor tiparelor, fata de cele efectuate într-un tipar suplimentar de test.
c. Una din utilizarile obisnuite pentru operatorul : este aceea a verificarii corectitudinii
datelor de intrare. În CLIPS datele de intrare sunt sub forma de fapte si verificarea va însemna
efectuarea unor teste asupra câmpurilor din fapte. Un exemplu ilustrativ este urmatorul.

Regula urmatoare este activata de fapte cu trei câmpuri. Primul câmp trebuie sa fie
simbolul data, al doilea câmp trebuie sa fie un numar întreg, iar al treilea câmp trebuie sa fie
un sir de caractere sau un simbol. Vom da mai multe variante ale acestei reguli.

(defrule r12
(data ?n&:(integerp ?n) ?x&:(stringp ?x) |: (symbolp ?x))
=>
(printout t “data ” ?n “ este ” ?x crlf) )

În aceasta varianta am realizat operatia SAU între cele doua conditii, privind tipul
admisibil pentru ultimul câmp, cu ajutorul operatorului | . Deoarece în cazul regulii de mai sus
Sisteme bazate pe cunostinte 213

acest operator nu este urmat de o constanta (ca în utilizarile din paragraful 5.12.1), el a fost
succedat de operatorul : care poate fi urmat de un predicat.

(defrule r13
(data ?n&:(integerp ?n) ?x&:(or (stringp ?x) (symbolp ?x)) )
=>
(printout t “data ” ?n “ este ” ?x crlf) )

Aici operatia SAU a fost realizata cu predicatul “or”.

(defrule r14
(data ?n&:(integerp ?n) ?x&:(not (numberp ?x) ) )
=>
(printout t “data ” ?n “ este ” ?x crlf) )

Aici am tinut seama de faptul ca exista numai trei tipuri de constante (date primitive în
CLIPS): simboluri, siruri de caractere si numere. Atunci, se poate rescrie conditia ca un câmp
sa fie de tip sir de caractere sau simbol, sub forma conditiei ca acel câmp sa nu fie numar.
(defrule r15
(data ?n&:(integerp ?n) ?x&~: (numberp ?x) )
=>
(printout t “data ” ?n “ este ” ?x crlf) )

Schimbarea fata de varianta anterioara este aceea ca am folosit operatorul de negare


asupra câmpurilor tiparelor, adica ~. Deoarece ~ nu poate fi urmat de un predicat a fost
necesar sa folosim operatorul : în fata predicatului.

(defrule r16
(data ?n ?x )
(test (and (integerp ?n)
(or (stringp ?x) (symbolp ?x) )
)
)
=> (printout t “data ” ?n “ este ” ?x crlf) )

Aceasta ultima varianta se bazeaza pe folosirea unui tipar de test, în care se verifica
toate conditiile pe care trebuie sa le îndeplineasca valorile variabilelor ?n si ?x. Ar mai putea
fi scrisa o varianta, de acelasi fel cu ultima, în care în tiparul de test, în loc de predicatul “or”
sa apara (not (numberp ?x)).
214 Reprezentarea cunoasterii folosind mediul CLIPS

Din punct de vedere al eficientei variantele r12 - r15 sunt echivalente si mai bune
decât r16, care are un tipar în plus, cel de test.

Exercitiul 5.21.
Rezolvati cele doua probleme de la exercitiul 5.20, rescriind regulile care apar în asa
fel încât acestea sa nu mai foloseasca tipare de test.

5.12.4. Relatia = în CLIPS

Exista trei utilizari distincte ale lui = în CLIPS, dupa cum urmeaza.

a) Se poate utiliza = în partea de actiune a unei reguli, în interiorul unei comenzi


“assert”, având rolul unui operator de atribuire. Se va folosi = în fata unei expresii,
determinând atribuirea câmpului respectiv din faptul care se introduce prin “assert”, cu
valoarea la care se evalueaza expresia în fata careia se afla =. Un exemplu în acest sens este
regula urmatoare:

(defrule r17
(fapt1 ?n1&:(numberp ?n1))
(fapt2 ?n2&:(numberp ?n2))
=>
(assert (fapt-suma = (+ ?n1 ?n2)) ) )

În partea de actiune a regulii r17 se determina introducerea în BF a unui fapt având pe


prima pozitie simbolul fapt-suma, iar pe a doua pozitie numarul rezultat din sumarea
valorilor la care s-au legat variabilele ?n1 si ?n2 în procesul de potrivire.
În general = se poate pune într-un “assert” în fata oricarei expresii (nu si în interiorul
unei expresii) care se evalueaza la un singur câmp. Aceasta utilizare a lui = nu mai este strict
necesara în CLIPS versiunea 6, care admite scrierea unei expresii într-un “assert” si fara ca
aceasta sa mai fie precedata de =.

b) Se poate utiliza = în partea de conditie a unei reguli, în interiorul unui tipar în fata
unei expresii, expresie prin a carei evaluare trebuie sa se obtina o constanta. În acest fel,
cerinta de potrivire este ca în faptul care va satisface tiparul, pe pozitia respectiva sa fie
constanta rezultata prin evaluarea mentionata. Daca luam în considerare regula r18:

(defrule r18
(a ?x =(+ ?x 10) )
(b =(* ?x 5))
=>
Sisteme bazate pe cunostinte 215

(printout t ?x “Satisface restrictiile cerute ” crlf))

aceasta va fi activata daca în BF se gaseste o pereche de fapte care sa satisfaca urmatoarele


conditii: primul fapt trebuie sa aiba 3 câmpuri - primul trebuie sa fie a, al doilea câmp poate fi
orice numar, iar al treilea câmp trebuie sa fie un numar cu 10 mai mare decât cel aflat pe
pozitia a doua; al doilea fapt trebuie sa aiba pe prima pozitie b, iar pe pozitia a doua trebuie sa
fie un numar de 5 ori mai mare decât câmpul doi din primul fapt (de 5 ori valoarea variabilei
?x). De exemplu, perechea de fapte (a 2 12) (b 10) va determina activarea regulii r18.

Exercitiul 5.22.
Verificati functionarea regulii r18, introducând în BF faptele: (a 2 12)(b 10)(a abc 3).

Explicatia comportarii obtinute este urmatoarea. Atunci când în BF se introduce faptul


(a abc 3) interpretorul CLIPS va încerca potrivirea faptului pe primul tipar al regulii r18 si va
semnala eroare, deorece functia +, apelata în determinarea restrictiei pentru câmpul trei, nu va
putea aduna simbolul abc. De aceea, este de recomandat ca în locul regulii r18 sa folosim
regula r19:

(defrule r19
(a ?x&:(numberp ?x) =(+ ?x 10) )
(b =(* ?x 5))
=>
(printout t ?x “Satisface restrictiile cerute ” crlf))

Observatia 5.11.
a. Operatorul = se poate folosi împreuna cu operatorii logici în crearea conditiilor de
potrivire în partea stânga a regulilor. Un exemplu este urmatorul:

(defrule r20
(a ?x ~=(/ ?x 10))
(b ?y&=(+ 5 ?x)|=(- 12 ?x)) => )

Aceasta regula va fi activata, de exemplu, de perechea de fapte: (a 40 5)(b -28).


(Explicati de ce).
b. Atunci când în expresia în fata careia se afla = apare o variabila, aceasta trebuie sa
fie o variabila deja legata. O regula gresita din acest punct de vedere este urmatoarea:

(defrule r-gresita
(a =(+ ?x 3))
216 Reprezentarea cunoasterii folosind mediul CLIPS

(b ?x)
=> )

în care variabila ?x folosita în expresia de sumare din primul tipar nu este legata (interpretorul
va semnala eroare). Daca se inverseaza ordinea tiparelor regula devine corecta:
c) Cea de-a treia utilizare a lui = este aceea deja precizata în paragraful 5.12.2, de
predicat de testare a egalitatii a doua valori numerice; aceasta utilizare este ilustrata în
exemplul urmator.

(defrule r21
(dreptunghi ?identificator lungime ?x)
(dreptunghi ?identificator latime ?y)
(test (or (= ?y (+ 8 ?x))
(= ?y (- 20 ?x)) ) )
=>
(printout t “S-a gasit un dreptunghi cu identificatorul ” ?identificator crlf
“ care satisface conditiile cerute: lungime = ” ?x “ latime = ” ?y crlf) )

Daca în BF sunt informatii cu privire la dimensiunile unor dreptunghiuri, în sensul ca


pentru fiecare dreptunghi exista doua fapte, unul precizând marimea lungimii si altul a latimii,
atunci regula de mai sus determina toate dreptunghiurile pentru care marimea latimii este cu 8
mai mare ca lungimea, sau egala cu 20 - lungimea. De exemplu, faptele (dreptunghi 1
lungime 15) si (dreptunghi 1 latime 5) vor activa regula. În aceasta regula = a fost folosit ca
predicat de testare a egalitatii a doua valori numerice.

Pentru întelegerea elementelor din ultimele paragrafe se mai dau alte trei variante de
scriere a regulii r21.

(defrule r22
(dreptunghi ?identificator lungime ?x)
(dreptunghi ?identificator latime ?y&: (= ?y (+ 8 ?x)) |: ( = ?y (- 20 ?x)) )
=>
(printout t “S-a gasit un dreptunghi cu identificatorul ” ?identificator crlf
“ care satisface conditiile cerute: lungime = ” ?x “ latime = ” ?y crlf) )

Aici = s-a folosit tot ca predicat, dar nu într-un tipar de test ca în varianta anterioara, ci
într- un tipar obisnuit, determinând o restrictie asupra variabilei ?y, împreuna cu operatorul : .
O varianta apropiata de aceasta este:

(defrule r23
Sisteme bazate pe cunostinte 217

(dreptunghi ?identificator lungime ?x)


(dreptunghi ?identificator latime ?y&: (or (= ?y (+ 8 ?x) ) ( = ?y (- 20 ?x)) ) )
=>
(printout t “S-a gasit un dreptunghi cu identificatorul ” ?identificator crlf
“ care satisface conditiile cerute: lungime = ” ?x “ latime = ” ?y crlf) )

în care deosebirea fata de varianta anterioara este aceea ca operatia SAU a fost realizata cu
predicatul “or” în locul operatorului |.

(defrule r24
(dreptunghi ?identificator lungime ?x)
(dreptunghi ?identificator latime ?y& = (+ 8 ?x) | = (- 20 ?x))
=>
(printout t “S-a gasit un dreptunghi cu identificatorul ” ?identificator crlf
“ care satisface conditiile cerute: lungime = ” ?x “ latime = ” ?y crlf) )

În aceasta varianta = s-a folosit în sensul de la punctul b), în fata unei expresii,
împreuna cu &, care asigura legarea vaiabilei ?y si cu | pentru realizarea operatiei SAU.
Pe baza paragrafelor 5.12.1 – 5.12.4 se pot formula urmatoarele observatii în legatura
cu realizarea testelor în interiorul tiparelor (în aceste observatii facem referire la regulile date
în paragrafele mentionate, reguli notate în ordine: r1, r2, …).

Observatia 5.12.
a. Desi tiparele de test sunt mai usor de scris, din punct de vedere al eficientei va fi
bine sa efectuam testele în interiorul tiparelor, fara a adauga tiparul suplimentar de test (de
exemplu, regula r22 este mai eficienta decât r21).
b. Dupa operatorul de negare ~ poate sa urmeze o constanta (simbol, sir de caractere
sau numar). În acest caz semnificatia este aceea ca se cere o potrivire care sa fie diferita de
câmpul care urmeaza dupa operatorul de negare, ca de exemplu în regula r1. Dupa ~ poate sa
urmeze si o variabila, care trebuie sa fie deja legata la momentul respectiv, semnificatia fiind
aceea ca se cere o potrivire diferita de valoarea variabilei. Un exemplu în acest sens, este
regula r5, în care se cere ca acel câmp care se va lega la ?y sa fie diferit de valoarea variabilei
?x, ce este deja legata, din potrivirea pentru primul tipar al regulii r5. De asemenea, dupa ~
poate sa urmeze :, ca în regula r15, sau =, ca în regula r20. De subliniat ca operatorul de
negare ~ realizeaza numai negarea unui singur operand (urmatorul operand), adica ~ nu poate
nega o expresie logica de tip compus. Un exemplu în acest sens este urmatorul.

(defrule r25
(data ?x&~:(stringp ?x) |: (eq ?x “abc”) )
=> (printout t “Data ” ?x “ satisface restrictiile ” crlf) )
218 Reprezentarea cunoasterii folosind mediul CLIPS

Regula r25 este activata de un fapt care are pe prima pozitie simbolul data, iar pe a
doua pozitie trebuie sa nu fie un sir de caractere, sau sa fie sirul de caractere “abc”. Daca
dorim scrierea unei reguli care sa fie activata de un fapt ce are ca prim câmp simbolul data, iar
al doilea câmp sa nu fie de tip sir de caractere si nici sa nu fie egal cu simbolul abc, atunci
regula este:

(defrule r26
(data ?x&:(not (or (stringp ?x) (eq ?x abc) )) )
=> (printout t “Data ” ?x “ satisface restrictiile ” crlf) )

c. Dupa operatorii | si & trebuie sa urmeze o constanta, o variabila, :, = , sau ~ (vezi


regulile scrise în paragrafele anterioare).
d. Variabilele care se folosesc în conditii compuse în tipare trebuie manevrate cu
atentie, respectând urmatoarele reguli:
• daca variabila este pe prima pozitie a conditiei, atunci va fi conectata de restul
conditiei prin operatorul de legare a variabilelor & (ca variabila ?x în regula r26), sau prin
operatorul |, caz în care variabila trebuie sa fie deja legata (un exemplu în acest sens este
tiparul al doilea din r7; acesta este: (student ?nume2&~?nume1 AC ? ?gr ?dom | Bucuresti)
si aici variabila ?dom este conectata cu |, ea fiind deja legata din potrivirea pentru primul tipar
al regulii r7).
• daca variabila nu apare pe prima pozitie a conditiei, atunci ea trebuie sa fie deja
legata (asa cum este, de exemplu, variabila ?nume1 în acelasi tipar de mai sus al regulii r7).
e. În testele din partea stânga a regulilor pot fi implicate si variabilele globale, în aceea
ca acestea pot fi folosite ca termeni ai unor comparatii. Un exemplu de acest fel este:

(defrule R-exemplu
(data ?x&:(> ?x ?*A*) ) => (printout t “Valoare camp doi: ” ?x crlf) )

Folosirea regulii respective presupune ca, anterior introducerii definitiei ei, sa fi fost
definita variabila globala ?*A*, si aceasta sa aiba la momentul curent drept valoare un numar.
În aceasta situatie regula R-exemplu va fi activata de orice fapt cu doua câmpuri, primul egal
cu constanta data, iar al doilea câmp o valoare numerica mai mare decât valoarea variabilei
?*A*.
f. În teste pot fi folosite si variabilele legate la adresele faptelor, aspect necesar în
anumite situatii. Astfel, regula “determinare-bunic” din exercitiul 5.10 punctul c, avea ca
element nefavorabil activarea sa de catre un singur fapt, de exemplu (tatal- lui Ion este Ion).
Acesta, datorita egalitatii câmpurilor 2 si 4, este în situatia de a se potrivi pe ambele tipare ale
regulii. Daca este necesara eliminarea acestei situatii, regula respectiva se poate rescrie în
forma:
Sisteme bazate pe cunostinte 219

(defrule determinare-bunic
?a1 <- (tatal- lui ?copil este ?tata)
?a2 <- (tatal- lui ?tata este ?bunic)
(test (neq ?a1 ?a2) )
=>
(printout t “Bunicul lui ” ?copil “este” ?bunic crlf) )

Folosirea predicatului “neq” în regula de mai sus este justificata prin aceea ca adresele
faptelor din baza de fapte sunt simboluri (f – i) si nu numere.

Exercitiul 5.23.
a. Daca în regula r26, conditia “or” devine “and” se ajunge la regula:

(defrule r-exercitiu1
(data ?x&:(not (and (stringp ?x) (eq ?x abc) )) )
=>
(printout t “Data ” ?x “ satisface restrictiile ” crlf) )
Explicati când este activata aceasta regula si respectiv când este activata regula:

(defrule r-exercitiu2
(data ?x&:(not (and (stringp ?x) (eq ?x “abc”) )) )
=>
(printout t “Data ” ?x “ satisface restrictiile ” crlf) )

Care sunt formele echivalente, mai simple, pentru regulile r-exercitiu1 si r-exercitiu2 ?

b. Într-o BF se gasesc informatii cu privire la dimensiunile unor dreptunghiuri, în fapte


de forma: (dreptunghi <lungime> <latime>). Scrieti programul CLIPS care sa determine
suma ariilor dreptunghiurilor pentru care avem informatii în BF, valoarea respectiva urmând a
fi pastrata într-un fapt de forma: (suma-ariilor <valoare>).
În legatura cu acest exercitiu, explicati care este greseala facuta în cazul în care am
încerca rezolvarea prin regula (se presupune ca initial în BF exista faptul (suma-ariilor 0)):
(defrule r-capcana
(dreptunghi ?lung ?lat)
?a <- (suma-ariilor ?x)
=> (retract ?a)
(assert (suma-ariilor (+ ?x (* ?lung ?lat) ) ) ) )

Gasiti solutii care sa pastreze, sau nu, continutul initial al BF.


220 Reprezentarea cunoasterii folosind mediul CLIPS

5.13. Operatiile logice între tiparele unei reguli

Pe lânga operatiile logice între câmpurile tiparelor, prezentate în paragrafele


anterioare, CLIPS admite si efectuarea de operatii logice între tiparele unei reguli. Asa cum se
stie, în mod implicit între tiparele unei reguli se executa operatia de conjunctie, regula fiind
activata numai atunci când toate tiparele ei sunt verificate de fapte din BF. În plus, CLIPS
permite si folosirea unor operatii logice explicite între tiparele unei reguli.

5.13.1. Ope ratia de disjunctie între tiparele unei reguli

Plecam de la urmatorul exemplu; presupunem ca în BR exista regulile:

(defrule r27
(masina_unealta gata)
=> (printout t “Porneste transportorul” crlf) )

(defrule r28
(robot gata)
=> (printout t “Porneste transportorul” crlf) )

(defrule r29
(evacuare piese)
=> (printout t “Porneste transportorul” crlf) )

Se observa cum cele trei reguli au aceeasi parte de actiune. Într-un asemenea caz, în
locul scrierii acestor reguli, se poate folosi una singura având operatia de disjunctie (SAU)
între tipare:

(defrule r30
(or (masina_unealta gata) (robot gata) (evacuare piese) )
=> (printout t “Porneste transportorul” crlf) )

Din acest exemplu, rezulta sintaxa operatiei de disjunctie între tiparele unei reguli:

(or <<<tipar>>>)
Sisteme bazate pe cunostinte 221

unde tipar poate fi un tipar simplu, sau unul compus prin folosirea operatiilor logice
între tipare; de asemenea, sub operatia “or” se poate si prelua adresa unui fapt ce satisface un
tipar, ca în exemplul care va urma la observatia 4 (regula r33).

Observatia 5.13.
a. Regula r30 trebuie înteleasa în sensul existentei a trei reguli distincte în BR. Astfel,
daca în BF exista concomitent trei fapte care sa satisfaca tiparele de sub conditia or, regula
r30 va fi activata de trei ori, câte o data pentru fiecare fapt.
b. Într-o regula, în afara operatiei SAU, pot fi incluse si alte tipare, legatura fiind
asigurata implicit de operatia SI, ca în urmatorul exemplu:

(defrule r31
(mesaj netransmis)
(or (masina_unealta gata) (robot gata) (evacuare piese) )
=> (printout t “Porneste transportorul” crlf) )

Din nou trebuie înteles ca aceasta regula este echivalenta cu trei reguli distincte.

c. Activarea si apoi executia succesiva a unei reguli ce contine o operatie SAU între
tipare, de mai multe ori (datorita satisfacerii mai multor tipare de sub “or”) poate fi
suparatoare (nedorita). Acest inconvenient poate fi eliminat, ca în exemplul urmator:

(defrule r32
?x <- (mesaj netransmis)
(or (masina_unealta gata) (robot gata) (evacuare piese) )
=>
(retract ?x)
(assert (mesaj transmis))
(printout t “Porneste transportorul” crlf) )

În acest caz regula r32 va fi executata doar o data, chiar daca în BF exista faptele care
sa satisfaca toate cele trei tipare de sub SAU, deoarece stergerea faptului (mesaj netransmis)
în partea de actiune a regulii r32, determina ca dupa prima executie, regula sa nu mai fie
activata.
Daca se pune problema sa rescriem regula r32 în asa fel încât, în partea de actiune ea
sa determine si stergerea din BF a faptului care a determinat satisfacerea conditiei SAU,
varianta corecta este:

(defrule r33
?x <- (mesaj netransmis)
222 Reprezentarea cunoasterii folosind mediul CLIPS

(or
?motiv <- (masina_unealta gata)
?motiv <- (robot gata)
?motiv <- (evacuare piese) )
=>
(retract ?x ?motiv)
(assert (mesaj transmis))
(printout t “Porneste transportorul” crlf) )

Se remarca felul în care pentru adresele faptelor care satisfac tiparele de sub conditia
SAU s-a folosit o variabila unica, si anume: ?motiv. La prima vedere aceasta poate parea
incorect, dar trebuie sa tinem seama ca regula de mai sus este echivalenta a trei reguli
distincte. Daca s-ar fi folosit trei variabile diferite nu s-ar fi putut scrie în mod corect actiunea
“retract”, adica varianta urmatoare este gresita:

(defrule r-gresita
?x <- (mesaj netransmis)
(or
?motiv1 <- (masina_unealta gata)
?motiv2 <- (robot gata)
?motiv3 <- (evacuare piese) )
=>
(retract ?x ?motiv1 ?motiv2 ?motiv3)
(assert (mesaj transmis))
(printout t “Porneste transportorul” crlf) )

Eroarea este aceea ca daca, de exemplu, regula este activata de faptele (mesaj
netransmis) si (masina_unealta gata), în partea de actiune a regulii doua din cele trei variabile
“motiv” nu vor fi legate (variabilele ?motiv2 si ?motiv3 nu sunt legate).

Exercitiul 5.24.
Precizati care este grupul celor 3 reguli echivalente cu r31; aceeasi chestiune pentru
r33 (observati în acest fel greseala facuta în regula r-gresita).

5.13.2. Operatia de conjunctie între tiparele unei reguli

Datorita existentei implicite a conjunctiei între tiparele regulilor, aceasta conditie nu


apare ca necesara decât pentru materializarea unor expresii logice complexe între tipare, ca în
exemplul urmator.
Sisteme bazate pe cunostinte 223

(defrule r34
?x <- (mesaj netransmis)
(or
(masina_unealta gata)
(and (evacuare piese)
(depozit gol) )
(robot gata) )
=>
(retract ?x) (assert (mesaj transmis))
(printout t “Porneste transportorul” crlf) )

Observatia 5.14.
a. Datorita folosirii conditiei SAU, regula r34 este echivalenta cu trei reguli.
b. Fara a avea nici un avantaj, în loc de

(defrule R (a) (b) => )

putem scrie:
(defrule RR (and (a) (b) ) => )

Exercitiul 5.25.
a. Scrieti cele trei reguli echivalente cu r34.
b. Cum se poate obtine ca în exemplul cu regula r34 sa se realizeze pe lânga stergerea
din BF a faptului (mesaj netransmis) si stergerea celuilalt/celorlalte fapte care au determinat
executia regulii ?

5.13.3. Operatia de negatie asupra unui tipar

Aceasta operatie permite scrierea regulilor care sa fie activate atunci când un anume
fapt lipseste din BF. De exemplu, fie regulile:

(defrule r37
(faza informare-operator)
(alarma ?tip)
=>
(printout t “Exista in sistem alarma ” ?tip crlf) )

(defrule r38
(faza informare-operator)
(not (alarma ?) )
224 Reprezentarea cunoasterii folosind mediul CLIPS

=>
(printout t “Nu exista in sistem nici o alarma ” crlf) )

Daca BF contine, de exemplu, faptul (faza informare-operator) si faptul (alarma foc),


atunc i regula r37 este activata, iar r38 nu este activata. Aceasta din urma va fi activata atunci
când în BF exista faptul (faza informare-operator), si în plus, datorita tiparului (not (alarma
?) ), va fi activata numai daca în BF nu exista nici un fapt cu doua câmpuri, având primul
câmp simbolul alarma. În acest fel, regulile r37 si r38 sunt mutual exclusive. În concluzie,
sintaxa operatiei de negare asupra unui tipar este:

(not <tipar-simplu>)

unde tipar-simplu trebuie sa fie un tipar simplu si nu unul compus cu ajutorul operatiilor
disjunctie, conjunctie.

Ca un exemplu, regula care determina cel mai mare numar dintr-o colectie de fapte de
forma (numar <valoare-numerica>) este:

(defrule maximum
(numar ?x)
(not (numar ?y&:(> ?y ?x)))
=>
(printout t “Maximum = ” ?x crlf) )

Observatia 5.15.
a. Din punct de vedere al bazei logice a IA, felul în care se interpreteaza în CLIPS
negatia asupra unui tipar, înseamna folosirea asa numitei “presupuneri a lumii închise” (în
engleza – “closed world assumption”) [Kir 92], [Gia 89]. Pentru SBC construite în CLIPS
aceasta înseamna ca un fapt care lipseste din baza de fapte reprezinta o formula nesatisfaibila
(informal, este “falsa”). Evident, aceasta este doar o presupunere a modelului de reprezentare
a cunoasterii subînteles în CLIPS, facuta pentru a simplifica mecanismul de efectuare a
inferentelor. Greseala pe care o putem face este aceea ca, o piesa de cunoastere asupra careia
nu avem cunostinte, deci nu stim daca este adevarata sau falsa, în presupunerea lumii închise
este interpretata ca fiind falsa. Ulterior ea se poate dovedi ca adevarata, si deci ne înscriem în
clasa rationamentelor de tip nemonoton.

b. Este important locul plasarii unei operatii “not” în sirul de tipare din partea stânga a
unei reguli. De exemplu, fie urmatoarele doua reguli:

(defrule r39
Sisteme bazate pe cunostinte 225

(pereche ?x ?y)
(pereche ?y ?z)
(not (triplet ?x ?x ?z))
=>)

(defrule r40
(not (triplet ?x ?x ?z))
(pereche ?x ?y)
(pereche ?y ?z)
=>)

si fie în BF urmatoarele fapte:


f - 0 (pereche 3 4)
f - 1 (pereche 4 5)
f - 2 (triplet 4 4 6)

Vom constata ca regula r39 este activata, iar r40 nu. Explicatia este urmatoarea. Pentru
regula r39 faptul de la identificatorul f - 0 satisface primul tipar, cu le garea variabilei ?x la
valoarea 3 si a variabilei ?y la valoarea 4. Atunci, faptul de la identificatorul f - 1 satisface al
doilea tipar, cu legarea variabilei ?z la valoarea 5. Cu aceasta legare a variabilelor, cum în BF
nu exista faptul (triplet 3 3 5) si al treilea tipar al lui r39 (cel de tip “not”) este satisfacut si
regula este activata. În schimb, regula r40 nu este activata deoarece faptul de la identificatorul
f - 2 determina nesatisfacerea primului tipar al acestei reguli (acesta cere ca în BF sa nu existe
un fapt de forma “triplet” în care câmpurile doi si trei sa fie egale).

O concluzie importanta care se desprinde din acest exemplu, cât si din cele prezentate
în 5.12, este si aceea ca, atunci când scriem o regula trebuie sa tinem seama de felul în care se
produce procesul de potrivire:

• tiparele sunt verificate în ordinea în care apar în partea stânga a regulii;


• în interiorul unui tipar verificarea potrivirilor câmpurilor se face de la stânga spre
dreapta.

c. Atunci când o conditie “not” este satisfacuta, nu se produce o legare a variabilelor


de sub conditia “not”. De exemplu, fie urmatoarea regula:

(defrule r- incorecta
(not (data ?x))
=>
(printout t ?x crlf) )
226 Reprezentarea cunoasterii folosind mediul CLIPS

Interpretorul CLIPS va semnala eroare la introducerea acestei reguli deoarece variabila


?x, fiind sub tiparul caruia i se aplica operatia de negatie, ramâne nelegata.
d. Conditia “not” poate fi folosita numai pentru negarea unui tipar simplu. De
exemplu, nu este admisa de sintaxa CLIPS regula urmatoare:

(defrule r41
(not (or (a) (b) ) ) => )

Un exemplu care ilustreaza utilizarea eficienta a operatiilor logice, precum si


importanta variabilelor în crearea a diferite efecte de potrivire, este prezentat în continuare.

Exemplul 5.1.
În BF se gasesc fapte care reprezinta multimi, urmând urmatorul tipar:

(multime <nume- multime> <<element>>) (5.19)

Se cere sa se calculeze intersectia a doua multimi, la aparitia în BF a unui fapt de


declansare de forma:

(determinare- intersectie <nume- multime_1> <nume- multime_2>) (5.20)

în care câmpurile doi si trei vor contine numele multimilor a caror intersectie se cere a se
calcula. Pentru a nu complica rezolvarea, vom admite ca rezultatul sa nu respecte tiparul
(5.19), ci sa fie de forma sablonului:

(multime rezultat-intersectie <nume- multime_1> <nume-multime_2> <<element>>) (5.21)

Solutia presupune folosirea a doua reguli, si o prima varianta de scriere a acestora este:

(defrule R- initializare
?a <- (determinare- intersectie ?nume1 ?nume2)
(multime ?nume1 $?)
(multime ?nume2 $?)
=> (retract ?a)
(assert (multime rezultat- intersectie ?nume1 ?nume2) ) )

(defrule R-calcul
?a <- (multime rezultat- intersectie ?nume1 ?nume2 $?rest)
?b <- (multime ?nume1 $?x1 ?x $?x2)
Sisteme bazate pe cunostinte 227

?c <- (multime ?nume2 $?y1 ?x $?y2)


=> (retract ?a ?b ?c)
(assert (multime rezultat- intersectie ?nume1 ?nume2 ?rest ?x)
(multime ?nume1 $?x1 $?x2)
(multime ?nume2 $?y1 $?y2) ) )

Principiul este acela conform caruia, regula R-initializare declanseaza determinarea


solutiei, plecând de la faptul scop, de forma (5.20), si verifica existenta în BF a faptelor pentru
cele doua multimi a caror intersectie se cere. Efectul actiunii acestei prime reguli este
introducerea în BF a unui fapt corespunzator sablonului hotarât (5.21), dar fara a pune vreun
element în multimea rezultat (este rezultatul corect numai în cazul particular al intersectiei a
doua multimi disjuncte). Apoi, va fi activata regula R-calcul, aceasta preluând rezultatul
auxiliar al primei reguli. La fiecare executie a acesteia se completeaza în rezultat un element
comun al celor doua multimi; ea se executa de un numar de ori egal cu numarul de elemente
comune din multimile de intersectat.
Partea slaba a acestei rezolvari este aceea ca la finalul ei în BF nu mai regasim
informatiile corecte cu privire la multimile de plecare – la fiecare executie a lui R-calcul se
elimina din multimile de intrare elementul detectat ca fiind comun pentru acestea (altfel
regula ar intra într-o bucla infinita). Din punctul de vedere al reprezentarii cunoasterii aceasta
este o deficienta – este necesar ca informatiile cu privire piesele de cunoastere care nu sufera
modificari sa nu fie alterate de SE. Putem elimina aceasta deficienta rescriind regula R-calcul
în forma:

(defrule R-calcul-optimizat
(multime ?nume1 $? ?x $?)
(multime ?nume2 $? ?x $?)
(not (multime rezultat- intersectie ?nume1 ?nume2 $? ?x $?) )
?a <- (multime rezultat- intersectie ?nume1 ?nume2 $?rest)
=> (retract ?a)
(assert (multime rezultat- intersectie ?nume1 ?nume2 ?rest ?x) ) )

în care conditia “not” asigura faptul ca în rezultat un element sa fie pus o singura data, si
eliminând astfel afectarea informatiei initiale din BF.

Exercitiul 5.26.
a. Raspundeti la urmatoarele întrebari.
• Care sunt operatiile logice care se pot efectua asupra câmpurilor tiparelor si
respectiv între tipare ?
• Precizati când sunt activate urmatoarele reguli:
228 Reprezentarea cunoasterii folosind mediul CLIPS

(defrule r42 (data a1 | ~a2&~a3) => )


(defrule r43 (data ?x ~?x ?y ?x | ~?y) => )

• Precizati daca urmatoarele reguli sunt corecte:

(defrule r44 (data ?x ~?y) => )


(defrule r45 (data ?x ?y ?x&?y) => )
(defrule r46 (data ?x ~a ?y&~a) => )

• Ce se întelege prin predicat CLIPS ?


• Ce se întelege prin tipar de test în CLIPS ?
• Când va fi activata regula:

(defrule r47 (data ?x ?y)


(test
(or (and (numberp ?x) (numberp ?y)
(oddp ?x) (evenp ?y) (= (/ ?x ?y) 0.5) )
(not (and (eq ?x a)(eq ?y b) ) )
) ) => )
• Când trebuie folosit operatorul de restrictie asupra câmpurilor tiparelor ( : ) ?
• Care sunt cele trei utilizari ale lui = în CLIPS ?
• Când este activata regula urmatoare:

(defrule r48
(data ?x&:(integerp ?x) ?y&:(numberp ?y) )
(data ?z&=(+ ?x 1) =(+ ?z 1)|=(- ?y 1) ) => )
• Este corecta regula r49?

(defrule r49 (data ?x =(+ ?x ?y) ?y) => )

• Când este necesara folosirea operatiei SAU între tiparele unei reguli ?
• Când este necesara folosirea operatiei SI între tiparele unei reguli ?
• Când este necesara folosirea operatiei de negatie asupra unui tipar al unei reguli?
• Precizati care dintre urmatoarele reguli este corecta si care nu. Explicati de ce.

(defrule r50 (not (fapt ?x)) (test (> ?x 4)) => )


(defrule r51 (not (fapt ?x&:(> ?x 4))) => )
(defrule r52 (not (fapt ?x)) (fapt ?y&:(> ?y ?x)) => )
(defrule r53 (not (fapt ?x)) (fapt ?x&:(> ?x 4)) => )

b. Rescrieti regula r47 în asa fel încât sa nu mai apara tiparul de test.
Sisteme bazate pe cunostinte 229

c. Deoarece operatia “not” nu poate fi aplicata decât unui tipar simplu, urmatoarea
regula este gresita în sintaxa CLIPS:

(defrule eroare
(not (and (a ?x) (b ?x) ) )
=>
(assert (c) ) )

Transformati regula de mai sus într-un program CLIPS care sa rezolve situatia ceruta
(aceasta înseamna ca daca în BF nu sunt în acelasi timp doua fapte care sa aiba a, respectiv b,
pe primul câmp si sa aiba aceeasi valoare pe pozitia câmpului doi, atunci trebuie introdus în
BF faptul (c) ).

d. Cu referire la regula r7, din paragraful 15.12.1, reluata mai jos

(defrule r7
(student ?nume1 AC ? ?gr&1501|1502 ?dom&~Iasi)
(student ?nume2&~?nume1 AC ? ?gr ?dom | Bucuresti)
=> (printout t “Studentii ” ?nume1 “ si ” ?nume2 “ din grupa ” ?gr
“ indeplinesc conditiile cerute” crlf) )

regula care determina o pereche de fapte din BF ce satisfac anumite conditii, aparea deficienta
ca anumite perechi de fapte puteau activa regula de doua ori. De exemplu, faptele:
(student Ion AC 5 1501 Bucuresti) si (student Gelu AC 5 1501 Bucuresti)
activeaza regula r7 de doua ori, si la rulare determina afisarea mesajului de doua ori. Eliminati
aceasta deficienta.

e. Într-o BF se gasesc informatii cu privire la dimensiunile unor figuri geometrice


plane (triunghiuri, patrate, dreptunghiuri, etc.). Scrieti programul CLIPS care sa determine
suma perimetrelor figurilor geometrice asupra carora exista informatii în BF.

f. Scrie ti programul CLIPS care sa determine toate permutarile unei multimi cu trei
elemente.

g. Sa se scrie programul CLIPS care primind la intrare o lista cu elemente si o


informatie cu privire la înlocuirea unui element din lista cu o alta valoare sa determine:
i) înlocuirea elementului din lista cu valoarea indicata, daca elementul
respectiv apare în lista o singura data.
ii) transmiterea unui mesaj daca elementul indicat nu apare în lista.
iii) transmiterea altui mesaj daca elementul în cauza apare în lista de doua ori,
situatie în care înlocuirea sa se faca pentru a doua aparitie.
230 Reprezentarea cunoasterii folosind mediul CLIPS

h. Scrieti programul CLIPS (se vor concepe faptele si regulile necesare) care sa
determine:
ii) reuniunea a doua multimi;
iii) diferenta a doua multimi.
Sisteme bazate pe cunostinte 231

5.14. Tehnici de intrare/iesire în CLIPS

În CLIPS se pot utiliza fisiere care trebuie în prealabil deschise, folosind functia:

(open <nume- fisier> <nume- logic> [<acces>])

nume-fisier – trebuie sa fie de tip simbol sau sir de caractere si va reprezenta numele
sub care este cunoscut fisierul respectiv de catre sistemul de operare;
nume-logic – trebuie sa fie o constanta CLIPS (simbol, sir de caractere sau numar) si
va reprezenta numele sub care interpretorul CLIPS recunoaste fisierul în cauza; acesta este
identificatorul pe care îl vom folosi în programele CLIPS atunci când ne referim la un fisier
(este numele care va fi utilizat, de exemplu, în reguli, în partea de actiune, sau în comenzi date
la nivel superficial, cu privire la un fisier). Un acelasi nume- logic nu trebuie sa fie folosit de
mai multe ori pentru fisiere diferite.
Un avantaj al folosirii celor doua argumente – nume-fisier, pentru sistemul de operare
si nume- logic, pentru interpretorul CLIPS, este acela ca putem usor înlocui un fisier cu altul
într-o aplicatie scrisa în CLIPS, fara a trebui sa facem schimbari majore în program. Deoarece
în program se foloseste numai numele-logic, iar numele propriu- zis apare numai o singura
data, în comanda “open”, rezulta ca putem substitui un fisier cu altul, facând o singura
modificare: se schimba în functia “open” argumentul “nume- fisier”.
acces – este un argument optional si fixeaza modul de acces la fisier; trebuie sa fie de
tip sir de caractere, fiind posibile urmatoarele patru cazuri: “r” – fisier deschis numai pentru
citire; “w” - fisier deschis numai pentru scriere; “r+” - fisier deschis pentru citire si scriere;
“a” - fisier deschis numai pentru concatenare (scriere la sfârsitul fisierului). Daca argumentul
acces lipseste, se va da de catre sistem valoarea implicita “r”.

Observatia 5.15.
a. Consecinta operatiei “open” depinde si de sistemul de operare în care se lucreaza.
De exemplu, în DOS sau în Windows, sisteme de operare care nu lucreaza cu versiuni
multiple ale fisierelor, redeschiderea pentru scriere a unui fisier existent va determina
înlocuirea acestuia cu unul nou.
b. Functia “open” lucreaza ca un predicat, în sensul ca determina ca rezultat TRUE
daca deschiderea fisierului s-a facut cu succes si FALSE în caz contrar. De exemplu, daca se
foloseste într-o comanda “open” numele unui fisier inexistent, cu argumentul acces egal cu
“r” (deschidere pentru citire), atunci rezultatul obtinut va fi FALSE: nu poate fi deschis pentru
citire un fisier care nu exista. În acest fel, functia “open” poate fi inclusa în teste, care sa
transmita mesajele corespunzatoare în cazul aparitiei unor erori.
Atunci când accesul la un fisier nu mai este necesar se va folosi functia “close”, pentru
închiderea acestuia. Daca fisierul nu se închide, nu avem garantia ca datele din el sunt salvate
232 Reprezentarea cunoasterii folosind mediul CLIPS

în mod corect. De asemenea, cu cât un fisier este deschis un timp mai mare, cu atât el este mai
expus pericolului ca o cadere de tensiune sa- l afecteze. De aceea, într- un program CLIPS, de
îndata ce nu mai avem nevoie de un fisier, îl vom închide cu functia “close”. Sintaxa pentru
aceasta este:

(close [<nume- logic>])

unde argumentul nume-logic este optional si specifica numele logic (acelasi cu cel declarat în
“open”) al fisierului care va fi închis. Daca argumentul lipseste, CLIPS va închide toate
fisierele deschise. Functia “close” determina rezultatul TRUE daca fisierul specificat a putut fi
închis, sau atunci când argumentul nume- logic lipseste, rezultatul furnizat de “close” este
TRUE daca macar un fisier a putut fi închis; într-un caz contrar rezultatul lui “close” este
FALSE.
Conform celor mentionate mai sus este bine sa existe o regula actionând, daca nu se
poate mai devreme, în finalul rularii programului CLIPS si care sa închida toate fisierele
deschise în timpul executiei acelui program. În legatura cu acest aspect, chiar interpretorul
CLIPS va închide, la executia comenzii “exit” de parasire a interpretorului, toate fisierele
ramase deschise (lucru care nu se mai întâmpla daca parasim interpretorul cu ctrl-c).

Înscrierea si citirea datelor din fisiere se poate face cu ajutorul functiilor “printout” si
“read”. În exemplele anterioare “printout” a fost folosita numai pentru transmiterea de
informatii pe terminal; în acest sens, reamintim forma generala a comenzii “printout”:

(printout <nume-logic> <<element-de-iesire>>)

Daca argumentul nume-logic este t, atunci elementele-de-iesire sunt transmise pe


terminal (elementul standard de iesire, monitor), iar daca este numele- logic al unui fisier (ceea
ce înseamna ca fisierul a fost deschis cu o comanda prealabila “open” în care a aparut
numele- logic respectiv), atunci elementele-de-iesire sunt înscrise în fisierul în cauza. De
exemplu, în comanda:

(printout data 1 2 3 crlf)

numerele 1, 2 si 3 sunt înscrise în fisierul având numele-logic data, pe o linie a fisierului


respectiv, dupa care se trece la o linie noua (conform semnificatiei caracterului de control
crlf). Aceasta presupune ca anterior executiei acestei comenzi, sa se fi executat, de exemplu,
comanda:

(open f1.dat data “a”)


Sisteme bazate pe cunostinte 233

Pentru citirea unor informatii dintr- un fisier se va folosi comanda:

(read [<nume- logic>])

Daca argumentul optional nume- logic este prezent atunci citirea se face din fiserul
identificat prin numele- logic respectiv, iar daca argumentul lipseste sau este simbolul t atunci
informatia este preluata de la tastatura (elementul standard de intrare). Este de mentionat ca
“read” permite introducerea unui singur câmp. De exemplu, fie urmatoarea succesiune de
comenzi, date la nivel superficial:

(read) ¶
abc 12¶
abc¶
În aceasta succesiune, cea de-a treia linie, formata din simbolul abc, este raspunsul
interpretorului, care dupa comanda “read” preia de la tastatura numai primul câmp, astfel ca
numarul 12, care este al doilea câmp introdus pe aceeasi linie, se pierde; aceasta înseamna ca
daca folosim comanda “read” pentru a prelua date de la tastatura, la fiecare introducere
trebuie sa dam ¶ dupa fiecare câmp.
În schimb, daca se executa comanda:

(read intrari)

atunci va fi preluat din fisierul respectiv, cel cu numele-logic intrari, un câmp, pentru ca la
repetarea comenzii sa se citeasca urmatorul câmp din fisier, de pe aceeasi linie cu primul, sau
de pe urmatoarea, în functie de felul în care este plasat acest al doilea câmp.
Comanda “read” permite si preluarea unor câmpuri care nu sunt simboluri, siruri de
caractere sau numere, cum ar fi parantezele; acestea vor fi tratate ca siruri de caractere si deci
introduse între ghilimele. Felul în care se poate lucra cu fisiere în CLIPS este ilustrat prin
urmatorul exemplu.

Exemplul 5.2.
Sa se scrie programul CLIPS care sa foloseasca doua fisiere în felul urmator. Din
primul fisier vor fi citite numere; daca numarul preluat este mai mare sau egal cu 0 atunci
numarul respectiv este transmis pe monitor si în fisierul de iesire, însotit de cuvântul pozitiv,
iar daca numarul este strict mai mic ca 0, atunci este transmis pe monitor si în fisierul de iesire
însotit de cuvântul negativ.
Fara sa mai notam forma faptelor pe care le vom folosi, expresiile acestora fiind
simple, vom scrie direct regulile necesare. Programul care rezolva problema trebuie sa aiba o
desfasurare secventiala, fiind organizat în urmatoarele faze: initializare, citire date din fisierul
de intrare, prelucrare date, transmitere date în fisierul de iesire, terminare program. Daca
234 Reprezentarea cunoasterii folosind mediul CLIPS

prima si ultima faza trebuie sa se execute o singura data, la începutul si respectiv sfârsitul
lucrului, celelalte trei faze (citire, prelucrare, transmitere rezultate) trebuie sa se execute în
mod repetat, într- un ciclu care sa se încheie atunci când nu mai sunt date de citit din fisierul
de intrare. Din acest punct de vedere, exemplul considerat arata si felul în care se poate
solutiona în programarea bazata pe reguli, fara elemente procedurale pentru controlul
executiei, o asemenea ciclare.
Faza de initializare are de rezolvat deschiderea fisierelor pe care le vom folosi în
program, ceea ce presupune folosirea urmatoarei reguli:

(defrule deschidere- fisiere


=>
(open intrare.dat date)
(open iesire.txt iesire “w”)
(assert (faza citire) ) )
Deoarece aceasta regula trebuie sa se execute prima, imediat dupa “reset”, partea ei de
conditie este vida. În partea de actiune, pe lânga deschiderea celor doua fisiere de lucru, se
introduce în BF faptul (faza citire) având rolul de a face trecerea la faza urmatoare a ciclului
de lucru. Regula care rezolva citirea unei date din fisierul “intrare.dat” este:

(defrule citire
?a <- (faza citire)
=>
(retract ?a)
(bind ?x (read date))
(if (eq ?x EOF)
then (assert (faza oprire) )
else (assert (valoare- numerica ?x) ) ) )

În aceasta regula, dupa ce un câmp este citit din fisierul având numele- logic date (prin
functia “read”), valoarea respectiva, pastrata în variabila ?x, este comparata cu simbolul EOF,
în interiorul unei functii “if”; aceasta functie are în CLIPS semnificatia cunoscuta din
programarea procedurala si asupra ei se va reveni ulterior. Sistemul CLIPS returneaza
valoarea EOF atunci când printr-o operatie de citire se ajunge la sfârsitul unui fisier. În acest
fel am putut controla momentul terminarii citirii din fisier, prin functia “if” din regula de mai
sus: daca fisierul s-a terminat se introduce în BF faptul (faza oprire), iar în caz contrar se
introduce în BF un fapt cu primul câmp simbolul valoare-numerica, iar al doilea câmp,
numarul citit din fisier. Este usor de scris regula care sa rezolve terminarea programului,
operatia de efectuat fiind cea de închidere a fisierelor:
Sisteme bazate pe cunostinte 235

(defrule terminare
?a <- (faza oprire)
=>
(retract ?a) (close date) (close iesire) )

În locul celor doua comenzi “close” am fi putut folosi una singura, fara nici un
argument - adica (close) - situatie în care interpretorul CLIPS ar fi închis toate fisierele
deschise în acel moment.
Pentru rezolvarea fazei de prelucrare a datelor citite din fisier vom folosi doua reguli,
corespunzatoare celor doua situatii posibile:

(defrule r1 “regula ce actioneaza atunci cand valoarea citita din fisier este >= 0”
?a <- (valoare-numerica ?v&:(>= ?v 0) )
=>
(retract ?a)
(printout t “S-a gasit o valoare pozitiva: ” ?v crlf)
(printout iesire ?v “ pozitiv” crlf)
(assert (faza citire) ) )

(defrule r2 “regula ce actioneaza atunci cand valoarea citita din fisier este < 0”
?a <- (valoare-numerica ?v&:(< ?v 0) )
=>
(retract ?a)
(printout t “S-a gasit o valoare negativa: ” ?v crlf)
(printout iesire ?v “ negativ” crlf)
(assert (faza citire) ) )

Este de observat ca în programul astfel scris faptele (faza citire) si (faza oprire) au
rolul de a asigura secventierea necesara; ele sunt introduse în BF atunci când se doreste
trecerea la o anumita faza (de exemplu, dupa executia uneia din regulile r1, r2 se va reveni la
activarea regulii citire, adica la faza de citire); în acest sens ele se numesc si fapte de control
al executiei.

Pentru citirea unei date de intrare, functia “read” prezentata anterior are dezavantajul
ca nu permite decât preluarea unui singur câmp o data. Atunci când vrem sa preluam o linie
întreaga, fie de la tastatura fie dintr- un fisier, vom folosi functia urmatoare:

(readline [<nume- logic>])


236 Reprezentarea cunoasterii folosind mediul CLIPS

Aceasta functie determina citirea unei întregi linii de intrare, continutul respectiv fiind
preluat sub forma unui singur câmp, de tip sir de caractere (adica inclus între ghilimele). Daca
argumentul nume-logic este absent sau este t, citirea se face de la tastaura, iar daca este
prezent, citirea se face din fisierul indicat prin numele- logic respectiv. La fel ca si în cazul
functiei “read”, atunci când citirea se face dintr-un fisier si s-a atins sfârsitul acestuia
rezultatul returnat este simbolul EOF. Modul de utilizare a acestei comenzi este ilustrat pe
exemplul urmator:

(defrule citire-nume “regula de citire a numelui si prenumelui”


=>
(printout t “Care este numele si prenumele ? ” crlf)
(assert (nume =(readline) ) ) )

Regula este scrisa în ideea în care utilizatorul va introduce de la tastatura, pe aceeasi


linie, doua sau mai multe câmpuri, ce vor fi preluate simultan. Totusi, “readline” are o
deficienta, aceea ca determina drept rezultat un singur câmp, de tip sir de caractere (în cazul
regulii de mai sus, aceasta la executie adauga în BF un fapt cu 2 câmpuri – primul este nume,
al doilea este sirul de caractere obtinut în urma preluarii de la tastatura).

În ceea ce priveste folosirea fisierelor pentru pastrarea programelor CLIPS, comenzile


“load” si “save” (descrise în 5.3.2) sunt cele care permit încarcarea si respectiv salvarea
definitiilor de constructii (a bazei de definitii de constructii – fig. 5.1). Mai exista doua functii
care permit încarcarea si respectiv salvarea BF într-un fisier.

(load- facts <nume-fisier>)

determina încarcarea în BF a faptelor din fisierul specificat (argumentul nume- fisier poate fi
de tip sir de caractere sau simbol). Fisierul respectiv poate fi scris cu un editor de texte, dar
trebuie sa contina faptele organizate în formatul corespunzator. De exemplu, daca în fisierul
f1.fap se gaseste continutul:

(temperatura punct A 152)


(presiunea punct A 7.3)
(curent- motor 6.7)
la comanda (load- facts f1.fap) cele trei fapte vor fi adaugate în BF.

(save-facts <nume-fisier>)
Sisteme bazate pe cunostinte 237

determina salvarea tuturor faptelor din BF în fisierul precizat prin argument. Salvarea se face
în formatul corespunzator faptelor în CLIPS, astfel ca o folosire a comenzii “save-facts” va
permite o încarcare ulterioara a faptelor astfel salvate, prin folosirea lui “load- facts”.

Exercitiul 5.27.
Scrieti programul CLIPS care sa salveze într-un fisier un anume grup de fapte din BF
de la momentul curent. În acest sens mai întâi se va prelua de la utilizator numele fisierului în
care sa se faca salvarea si primul câmp al faptelor care trebuie salvate (de exemplu, daca
utilizatorul introduce de la tastatura: data, nume si timp, atunci în fisierul indicat vor fi salvate
toate faptele din BF care încep cu unul din simbolurile data, nume, timp).
238 Reprezentarea cunoasterii folosind mediul CLIPS

5.15. Functii auxiliare în CLIPS


5.15.1. Functii CLIPS pentru siruri de caractere si pentru valori multicâmp

Exista mai multe functii CLIPS ce permit prelucrarea sirurilor de caractere si a


valorilor cu mai multe câmpuri; în continuare fiind prezentate cele mai importante.

(str-assert <sir-de-caractere>)
Determina introducerea unui fapt în BF pe baza sirului de caractere primit ca
argument. Sirul respectiv trebuie sa contina si parantezele ce delimiteaza faptul, iar spatiile
din interiorul sirului de caractere sunt delimitatorii care determina câmpurile din faptul ce se
creeaza. Daca dorim ca un câmp al faptului ce se formeaza sa fie de tip sir de caractere atunci
trebuie sa folosim înaintea ghilimelelor caracterul de control \ (“back-slash”). Un exemplu de
utilizare este urmatorul:

(str-assert “(marimi- masurate presiune temperatura \“volum-exterior\” )”)

obtinându-se introducerea în BF a unui fapt cu 4 câmpuri, dintre care ultimul este de tip sir de
caractere. Evident functia “str-assert” poate fi folosita nu numai la nivel superficial ci si în
reguli, în partea de actiune, când argumentul va putea fi obtinut si prin folosirea unor variabile
sau functii. În CLIPS versiunea 6 exista si functia:

(assert-string <sir-de-caractere>)

cu acelasi efect ca si “str-assert”.

(str-cat <<element>>)

Construieste un singur sir de caractere din elementele care sunt parametri în comanda
respectiva (elementele furnizate ca parametri pot fi constante CLIPS, variabile simple legate,
sau functii ce determina ca rezultat un singur câmp).
Ca exemplu, se poate construi o noua varianta a regulii “citire-nume” în care, fata de
solutia data în paragrafului anterior, sa se introduca în BF un fapt având un numar de câmpuri
corespunzator numarului de câmpuri introduse de la tastatura; aceasta se va face folosind cele
doua functii descrise în acest paragraf:

(defrule citire-nume1 “regula de citire a numelui si prenumelui in care acestea devin


campuri distincte”
=>
(printout t “Care este numele si prenumele ? ” crlf)
Sisteme bazate pe cunostinte 239

(str-assert (str-cat “(” “nume ” (readline) “)”) ) )

Exista mai multe functii CLIPS pentru valori multicâmp, dintre care functia
“mv-append” a fost deja prezentata în 5.11.5; o reamintim aici:

(mv-append <<element>>)

ea creând o valoare multicâmp din elementele care sunt argumente. Un caz particular este
acela al apelului acestei functii cu zero argumente, caz în care se obtine valoarea multicâmp
cu zero câmpuri. Alte functii pentru valori multicâmp sunt date în continuare.

(mv-delete <indice-câmp> <valoare-multicâmp>)

Efectul este de stergere (eliminare) a câmpului indicat prin indice din valoarea
multicâmp data ca al doilea argument; acest ultim argument trebuie sa fie o valoare
multicâmp. De exemplu comanda:

(mv-delete 1 (mv-append a b 1 2) )

determina rezultatul (b 1 2); în acest exemplu functia “mv-append” este folosita pentru a crea
o valoare multicâmp; într- un program CLIPS, valorile multicâmp vor putea fi obtinute si din
legari ale variabilelor multiple petrecute si în timpul rularii, sau ca valori ale variabilelor
globale.

(length <valoare- multicâmp>)

Determina ca rezultat numarul de câmpuri din valoarea multicâmp ce este data ca


argument.

(nth <indice-câmp> <valoare- multicâmp)

Întoarce drept rezultat câmpul din cel de-al doilea argument ce are pozitia data prin
primul argument. Daca pozitia respectiva nu exista rezultatul ce se obtine este nil.

(member <câmp> <valoare-multicâmp>)

Determina ca rezultat pozitia câmpului dat de primul argument în cel de-al doilea
argument, care trebuie sa fie o valoare multicâmp. Daca primul argument este un câmp care
nu exista în valoarea multicâmp ce este al doilea argument, atunci rezultatul ce se obtine este
FALSE.
240 Reprezentarea cunoasterii folosind mediul CLIPS

(subset <valoare- multicâmp1> <valoare- multicâmp2>)

Întoarce rezultatul TRUE daca câmpurile care apar în primul argument se regasesc
toate printre câmpurile din cel de-al doilea argument si FALSE în caz contrar (ambele
argumente trebuie sa fie valori multicâmp). Este de observat ca valoarea multicâmp cu zero
câmpuri se regaseste în orice alta valoare multicâmp. De exemplu, apelul:
(subset (mv-append) (mv-append 1 2 3) )

va determina rezultatul TRUE.

(str-explode <sir-de-caractere>)

Converteste un sir de caractere într-o valoare multicâmp (delimitatorii sunt spatiile din
interiorul sirului de caractere). Functia inversa este:

(str- implode <valoare- multicâmp>)

care converteste o valoare multicâmp într- un singur câmp, de tip sir de caractere.

5.15.2. Elemente procedurale de control al executiei programului

CLIPS poseda câteva functii de tipul celor care în limbajele imperative permit
controlul executiei programelor. Desi acestea pot fi folosite si la nivel superficial, ele îsi
gasesc utilitatea în scrierea unor reguli care pot deveni mai eficiente prin folosirea în partea de
actiune a functiilor procedurale de control al executiei; de altfel, functiile pe care le prezentam
în continuare pot fi folosite în reguli numai în partea de actiune (nu si în partea de conditie).
Exista în CLIPS trei asemenea functii, prezentate în cele ce urmeaza.

(if <predicat> then <<<actiune>>> [else <<<actiune>>>])

Când se întâlneste aceasta functie (în partea dreapta a unei reguli sau la nivel
superficial), mai întâi se evalueaza predicatul. Daca rezultatul evaluarii este TRUE se executa
actiunea/actiunile de dupa “then”, iar daca rezultatul evaluarii predicatului este FALSE si
daca exista clauza “else”, atunci se executa actiunea/actiunile de dupa “else”. Daca predicatul
determina rezultatul FALSE si nu exista clauza “else” atunci nu se executa nici o actiune si se
trece la urmatoarea comanda.
Functia “if” poate fi utila pentru efectuarea unor teste în partea de actiune a unei
reguli, evitând în acest fel scrierea unor reguli suplimentare. Ca exemplu, regula de mai jos
are rolul de a ghida continuarea unui program, în functie de continutul unui fapt din BF. Daca
Sisteme bazate pe cunostinte 241

faptul care activeaza regula are pe pozitia a doua un simbol sau sir de caractere se introduce
un fapt de control ce va determina activarea regulilor corespunzatoare prelucrarilor simbolice,
iar în cazul în care câmpul este numar, sunt lansate alte reguli, de un alt fapt de control.

(defrule verificare-continuare
(data ?x)
=>
(if (or (symbolp ?x) (stringp ?x) )
then (assert (faza prelucrare-simbolica) )
else (assert (faza prelucrare-numerica) ) ) )

Este evident ca regula de mai sus nu este în spiritul programarii bazate pe reguli. De
aceea se propune urmatorul exercitiu.

Exercitiul 5.28.
Înlocuiti regula de mai sus cu un grup de reguli care sa determine aceleasi consecinte
si care sa nu mai foloseasca functia “if”.

(while <predicat> [do] <<<actiune>>>)

Cuvântul do este optional, iar actiunea/actiunile care urmeaza constituie corpul


ciclului. Mai întâi se evalueaza predicatul; daca rezultatul determinat este TRUE, atunci se
executa corpul, iar daca predicatul se evalueaza la FALSE, atunci se trece mai departe, la
urmatoarea comanda CLIPS. Dupa executarea corpului ciclului se testeaza din nou predicatul,
s.a.m.d.
Ca exemplu, regula urmatoare preia de la utilizator informatia cu privire la continuarea
unui program, introducând în BF un fapt corespunzator, dupa cum valoare furnizata este
pozitiva sau negativa. În plus, daca utilizatorul nu furnizeaza un numar, programul intra într-o
bucla, creata prin folosirea functiei “while”.

(defrule r-alegere-continuare
?a <- (faza verificare-continuare) =>
(retract ?a)
(printout t “Introduceti data: ” crlf)
(bind ?x (read))
(while (not (numberp ?x) )
do (printout t “Introduceti data: (valoare numerica) ” crlf)
(bind ?x (read) ) )
(if (> ?x 0)
then (assert (faza valoare-pozitiva) )
242 Reprezentarea cunoasterii folosind mediul CLIPS

else (assert (faza valoare-negativa) ) ) )

Este de subliniat ca functiile “if” si “while” nu sunt obisnuite într- un program bazat pe
reguli. Scrierea unei parti ample procedurale, în partea de actiune a unei reguli, prin folosirea
lui “if” si “while” determina pierderea caracterului de program bazat pe reguli. Într-un SE
functiile “if” si “while” vor fi folosite numai pentru efectuarea unor teste si bucle simple;
pentru obtinerea anumitor secventieri vor fi de preferat faptele (respectiv tiparele) de control.
O alta functie de control al executiei programului este:

(halt)

Aceasta determina oprirea executiei unui program CLIPS (se opreste executia
regulilor, inclusiv a regulii curente) si se revine la nivel superficial. Agenda va continua sa
pastreze regulile ce eventual existau în ea, astfel ca o comanda “run” care va urma le va putea
pune în executie. În acest fel, comanda “halt” poate fi utila în depanare; dupa o oprire datorata
acestei comenzi utilizatorul poate urmari starea agendei, a BF, pentru ca apoi sa reia rularea
programului.

Desi nu sunt strict încadrate în aceasta categorie, mai amintim aici alte doua functii,
importante pentru programarea în CLIPS.

(system <<<valoare>>>)

Aceasta poate ajuta utilizatorul în interfatarea programelor CLIPS cu alte programe.


Functia “system” determina executarea unei comenzi a sistemului de operare. Argumentele ei
trebuie sa fie constante CLIPS sau expresii care sa furnizeze ca rezultat un singur câmp.
Efectul este acela de a trece controlul sistemului de operare si de a executa comanda care se
obtine prin concatenarea argumentelor care apar în comanda “system”; în acest sens, pentru a
crea comanda de executat de catre sistemul de operare, se concateneaza într-un singur sir de
caractere toate valorile date prin argumente.

(gensym)

Este o functie fara argumente si care la fiecare apel determina ca rezultat un nou
simbol de forma: gen<întreg>. Astfel, la primul apel al acestei functii rezultatul obtinut va fi:
gen1, urmat la apelurile urmatoare de gen2, gen3, s.a.m.d. Importanta ei este aceea ca
genereaza de fiecare data un simbol nou. Asa ceva poate fi util, de exemplu, în cazul în care
mai multe fapte au un continut comun si pentru a le face distincte introducem în ele un câmp
care sa fie completat de functia “gensym”. Putem seta la o anumita valoare contorul functiei
“gensym” prin comanda:
Sisteme bazate pe cunostinte 243

(setgen <întreg>)

Astfel, dupa comenzile (setgen 14) (gensym) rezultatul va fi gen14.

Exercitiul 5.29.
a. Raspundeti la urmatoarele întrebari:
• Care este deosebirea între argumentele nume-fisier si nume-logic într-o
comanda “open” ?
• Care este deosebirea între comenzile “load” si “load-facts” si respectiv între
“save” si “save- facts” ?
• Care este rezultatul urmatoarei comenzilor:

(member (length (mv-append 1 2 3) ) (mv-append a 1 c 3 d) )


(nth 5 (str-explode “a b c d e f 6”))
244 Reprezentarea cunoasterii folosind mediul CLIPS

5.16. Fapte CLIPS de tip structurat

În CLIPS exista doua tipuri de fapte: nestructurate (toate cele folosite pâna acum) si
structurate. Într-un fapt nestructurat ordinea câmpurilor poate fi oarecare, aceasta fiind aleasa
de programator, dar o data ordinea fixata, ea trebuie respectata în întreg programul CLIPS.
Altfel spus, într-un fapt nestructurat conteaza atât continutul fiecarui câmp, cât si ordinea
câmpurilor. De exemplu, în urma comenzii (assert (a b c) (a c b)) în BF vor fi introduse
doua fapte distincte. În acest sens, faptele nestructurate se numesc si fapte de tip ordonat, în
ideea ca au câmpurile asezate într-o ordine bine stabilita si, în principiu, pentru a avea acces la
o anumita informatie programatorul trebuie sa stie al câtelea câmp din fapt contine informatia
respectiva (atunci când ordinea câmpurilor nu este cunoscuta a priori, folosirea variabilelor
multiple poate rezolva, în anumite situatii, gasirea unui anumit câmp). Spre deosebire de acest
caz, în faptele structurate ordinea în care sunt plasate informatiile nu mai are importanta; de
aceea, acestea se numesc si fapte de tip neordonat.
Faptele de tip structurat sunt asemanatoare cu tipurile structurate din programarea
imperativa, urmarind si caracteristicile modelului de cadru din IA.

5.16.1. Definirea faptelor structurate

Pentru a putea fi folosit un fapt de tip structurat trebuie mai întâi definit, prin comanda
de definitie de constructie:

(deftemplate <nume-deftemplate> [<comentariu>]


<<fateta-cu-un-câmp>>
[<fateta- multicâmp>] (5.22)
<<fateta-cu-un-câmp>> )

Observam respectarea tipicului pentru definirile de constructii din CLIPS si


asemanarea cu definirea faptelor nestructurate prin “deffacts”.
Faptul structurat care se defineste va putea fi identificat prin argumentul
nume-deftemplate; acesta trebuie sa fie un simbol. Comentariu are aceeasi forma ca si în toate
celelalte definitii de constructii din CLIPS, adica este un sir de caractere.
Din expresia (5.22) rezulta ca un fapt structurat poate fi definit cu oricâte fatete cu un
singur câmp si cu cel mult o fateta multicâmp (restrictia de o singura fateta multicâmp nu mai
exista în CLIPS versiunea 6). Fateta multicâmp poate fi plasata oriunde în interiorul definitiei.
În definitia de mai sus fateta cu un câmp trebuie sa respecte urmatoarea sintaxa:

(field <nume- fateta> <<specificare-fateta>>)


Sisteme bazate pe cunostinte 245

iar fateta multicâmp:

(multifield <nume- fateta> <<specificare- fateta>>)

Argumentul nume- fateta trebuie sa fie un simbol. Prin argumentele specificare- fateta
se vor preciza caracteristicile informatiei care poate fi pastrata într-o fateta a unui fapt
structurat. Mai este de mentionat ca în CLIPS versiunea 6 în loc de cuvântul cheie “field”
poate fi folosit si cuvântul “slot”, iar în loc de “multifield” se va putea folosi si “multislot”.

Exista mai multe tipuri de specificari de fateta, ele putând fi împartite în doua
categorii: specificari pentru valoarea cea mai asteptata si specificari de restrictionare.

A. Specificarea de valoare cea mai asteptata este cea care corespunde fatetei default
din modelul de reprezentare a cunoasterii de cadru – vezi 3.3.2, având întelesul precizat la
acea varianta de model. Astfel, daca se stie valoarea cea mai plauzibila pentru o fateta, aceasta
valoare va fi data într-o specificare “default”. Totodata, exact ca în modelul de cadru,
specificarea “default” are rolul de a furniza valoarea unei fatete atunci când utilizatorul nu da
pentru fateta respectiva o valoare explicita (de exemplu, una corespunzatoare unui caz de
exceptie). Sintaxa acestei specificari este:

(default <valoare-asteptata>)

cu observatia ca argumentul valoare-asteptata va avea un singur câmp, sau 0 ÷ n câmpuri,


dupa cum specificarea respectiva face parte dintr-o fateta cu un câmp, respectiv una
multicâmp.
Drept valoare asteptata se poate folosi si ?NONE. În CLIPS versiunea 5, specificarea
(default ?NONE) nu determina introducerea nici unei valori “default” (este la fel ca si în
cazul în care specificarea respectiva ar lipsi), în timp ce în CLIPS versiunea 6, atunci când o
fateta are specificarea (default ?NONE), utilizatorul este obligat ca de fiecare data când
introduce un fapt structurat în BF sa precizeze valoarea fatetei respective.
Ca un prim exemplu se defineste un fapt structurat cu numele “microprocesor”:

(deftemplate microprocesor “acesta este un fapt structurat”


(field nume)
(field magistrala (default 8)) )

În acest exemplu s-a definit faptul structurat cu numele microprocesor, având doua
fatete: nume si magistrala. Pentru fateta magistrala s-a introdus si o specificare default.
Aceasta determina ca, atunci când utilizatorul nu precizeaza valoarea explicita a acestei fatete,
sistemul sa introduca de la sine valoarea data în “default”, adica valoarea 8 în cazul nostru.
246 Reprezentarea cunoasterii folosind mediul CLIPS

Daca pentru fateta magistrala este data o valoare explicita, atunci valoarea din default este
ignorata. Toate acestea se pot verifica prin comanda:

(assert (microprocesor (nume 8080) ) (microprocesor (nume 80286) (magistrala 16) )

Este de observat ca faptele structurate se introduc în BF tot prin comanda “assert”,


folosita si pentru faptele nestructurate. Într-o asemenea comanda trebuie manevrate cu grija
parantezele: fiecare fapt structurat trebuie inclus între paranteze si fiecare fateta dintr-un fapt
structurat (precizata prin numele ei) trebuie si ea inclusa într-o pereche de paranteze.

B. Specificarile de restrictionare sunt de patru feluri: de tip, de valori permise, de


domeniu si de cardinalitate.
Specificarea de restrictionare de tip are sintaxa:

(type <<<tip>>> )

unde argumentul tip poate fi unul din urmatoarele: INTEGER, FLOAT, NUMBER,
SYMBOL, STRING, LEXEME (tipurile trebuie scrise în mod obligatoriu cu majuscule) sau
poate fi ?VARIABLE. Atunci când într-o fateta apare o asemenea specificare, informatia care
va putea fi pastrata în fateta este restrictionata la tipul indicat. Semnificatiile sunt: INTEGER
înseamna restrictionare la numere întregi, FLOAT la numere reale, NUMBER la orice fel de
numere, SYMBOL restrictionare la simboluri CLIPS, STRING la siruri de caracter,
LEXEME la simboluri sau siruri de caractere, iar daca se foloseste ?VARIABLE atunci nu se
produce nici o restrictionare de tip (orice tip este admis, situatia fiind aceeasi cu aceea în care
specificarea de tip nu este folosita). Într-o specificare de tip pot fi prevazute si mai multe
argumente tip. De exemplu, daca în faptul structurat microprocesor vrem ca numele sa poata
fi numai de tip simbol sau sir de caractere, atunci putem reface definitia anterioara:

(deftemplate microprocesor “acesta este un fapt structurat”


(field nume (type STRING SYMBOL) )
(field magistrala (default 8)) )

Aceasta definitie este echivalenta cu urmatoarea:


(deftemplate microprocesor “acesta este un fapt structurat”
(field nume (type LEXEME) )
(field magistrala (type ?VARIABLE) (default 8)) )

Atunci când valoarea memorata într-o fateta vrem sa fie sau un întreg sau un real vom
putea folosi (type NUMBER); daca folosim (type FLOAT) atunci o valoare întreaga va
însemna eroare, ca în exemplul ur mator:
Sisteme bazate pe cunostinte 247

(deftemplate oscilator
(field frecventa (type FLOAT) ) )

La comanda (assert (oscilator (frecventa 10))) se va semnala eroare de tip, pentru ca


valoarea folosita pentru fateta frecventa este un întreg si nu un numar real.

Specificarea de restrictionare de valori permise are sintaxa de una din urmatoarele


forme:

(allowed-symbols {<însiruire-de-simboluri>, ?VARIABLE})


(allowed-strings {<însiruire-de-siruri-de caractere>, ?VARIABLE})
(allowed- lexemes {<însiruire-de-simboluri-sau-siruri-de-caractere>, ?VARIABLE})
(allowed- integers {<însiruire-de-numere- întregi>, ?VARIABLE})
(allowed- floats {<însiruire-de-numere-reale>, ?VARIABLE})
(allowed-numbers {<însiruire-de-numere- întregi-sau-reale>, ?VARIABLE})
(allowed-values {< însiruire-de-valori>, ?VARIABLE})

Restrictionarea care se face în acest caz este la valorile din însiruirea ce este argument,
trebuind evident sa existe o concordanta între elementele din însiruire si varianta “allowed”
care se foloseste; de exemplu, se poate utiliza (allowed-symbols microprocesor
microcontroler), dar nu se poate folosi (allowed-symbols 12 -34). Specificarea “allowed-
values” face o restrictionare stricta, la valorile din însiruirea care urmeaza; în celelalte cazuri
restrictia apare numai pentru tipul specificat, asa cum se arata în exemplul urmator.

(deftemplate microprocesor1
(field nume (allowed-symbols I8086 I80286) ) )

(deftemplate microprocesor2
(field nume (allowed- values I8086 I80286) ) )
Pe baza acestor doua definitii putem da comanda:

(assert (microprocesor1 (nume I80286)) (microprocesor1 (nume 80286)) )

Vom constata ca ambele fapte sunt introduse în BF. Explicatia este aceea ca primul
fapt satisface restrictia de simboluri impusa, iar al doilea are valoarea fatetei nume un numar,
iar restrictia specificata se refera numai la simboluri. În acest sens, daca se da comanda:

(assert (microprocesor1 (nume I86)) )


248 Reprezentarea cunoasterii folosind mediul CLIPS

se va semnala eroare, deoarece valoarea fatetei nume este un simbol si acesta nu este printre
cele din însiruirea “allowed-symbols”. Tot eroare se obtine si în cazul comenzii:

(assert (microprocesor2 (nume 8086)) )

pentru ca la faptul structurat “microprocesor2” s-a facut o restrictionare stricta, cu specificarea


“allowed-values”, ceea ce înseamna ca numai cele doua valori care apar în însiruirea din
definitie pot fi folosite ca valori ale fatetei nume.
Daca într-o specificare “allowed” în locul unei însiruiri apare ?VARIABLE, atunci nu
se face nici o restrictionarea asupra tipului respectiv. De exemplu, o definitie de forma:

(deftemplate identificator (field nume (allowed- values ?VARIABLE) ) )

nu introduce nici o restrictie asupra valorii care va fi introdusa în fateta nume. Conform cu
sintaxa pentru fatete, specificarile de restrictionare de tip si de valori permise pot fi si
combinate ca în exemplul urmator:

(deftemplate identificator
(field nume (type SYMBOL) (allowed-symbols I1 I2 I3) )
(field val1 (type NUMBER SYMBOL) (allowed-symbols a1 a2) )
(field val2 (type LEXEME) )
(multifield val3 (type STRING) (allowed-values “1” “2”) ) )

Exercitiul 5.30.
Comentati restrictiile care apar în definitia de mai sus. Gasiti o definitie logic
echivalenta cu aceea a faptului identificator si care sa aiba mai putine specificari de
restrictionare. Introduceti în BF fapte structurate de tip identificator.

Specificarea de restrictionare de domeniu are sintaxa:

(range <minim> <maxim>)


Aceasta determina intervalul în care trebuie sa se încadreze valorile fatetei respective,
atunci când tipul acesteia este INTEGER, FLOAT sau NUMBER. Daca tipul nu este unul din
acestea trei si se foloseste specificarea “range”, atunci aceasta nu determina nici o restrictie.
Argumentele minim si maxim pot fi numere întregi sau reale, sau pot fi ?VARIABLE. Daca
se foloseste ?VARIABLE drept argument minim atunci limita inferioara a domeniului astfel
stabilit este -∞, iar daca ?VARIABLE se foloseste drept argument maxim, atunci limita
superioara a domeniului de restrictionare este +∞. Folosirea acestei specificari este ilustrata
în urmatoarele exemple:
Sisteme bazate pe cunostinte 249

(deftemplate numar (field valoare (range ?VARIABLE 50.5) ) )


(deftemplate parametru (field valoare (type INTEGER) (range 0 1000) ) )

Se poate observa ca am folosit acelasi nume de fateta - valoare - în doua fapte


structurate, ceea ce nu determina nici o legatura între acestea. În faptul numar, fateta valoare
poate fi orice numar în intervalul (-∞, 50,5] (aici neimpunându-se o restrictie de tip, se poate
si ca fateta valoare sa nu fie numar, situatie în care restrictia de domeniu este inoperanta). În
faptul parametru fateta valoare poate fi orice numar întreg din intervalul [0, 1000]. De
remarcat ca domeniile se stabilesc ca intervale închise.
Este de notat ca specificarea range nu poate fi utilizata în acelasi timp cu una din
specificarile: allowed- values, allowed- numbers, allowed- integers, sau allowed- floats.

Specificarea de restrictionare de cardinalitate, care este operationala numai în CLIPS


versiunea 6, restrictioneaza numarul de câmpuri care pot fi introduse într-o fateta de tip
multicâmp. Este evident ca o asemenea specificare va putea fi folosita numai pentru o fateta
de tipul respectiv. Sintaxa este:

(cardinality <min> <max>)

Parametrii min si max pot fi numere întregi sau pot fi ?VARIABLE. Ei precizeaza
numarul minim, respectiv numarul maxim de câmpuri care pot fi pastrate în fateta multicâmp
respectiva. Daca pentru min, în locul unui întreg, se foloseste ?VARIABLE, atunci înseamna
ca numarul minim posibil de câmpuri este fixat la zero. Daca ?VARIABLE se foloseste
pentru max, atunci numarul maxim de câmpuri din fateta este, în principiu, +∞. Daca
specificarea de cardinalitate nu este prezenta între specificarile unei fatete de tip multicâmp,
atunci, în mod implicit, se stabileste ca numarul de câmpuri poate fi între 0 si +∞.

5.16.2 Calculul valorii celei mai asteptate a unui fapt structurat

O problema care poate apare este aceea a determinarii pentru o fateta a valorii celei
mai asteptate (default), atunci când specificarea “default” nu exista pentru acea fateta. Într-un
asemenea caz, valoarea cea mai asteptata se va deduce de catre interpretorul CLIPS dupa
urmatoarele reguli, care se aplica în ordinea în care sunt enumerate:

1. Tipul pentru valoarea cea mai asteptata este ales din lista de tipuri permise pentru
fateta, în urmatoarea ordine de preferinte: SYMBOL, STRING, INTEGER, FLOAT.
2. Daca tipul rezultat dupa regula 1 are o specificare “allowed” (de exemplu, fateta are
specificarile (type INTEGER) si (allowed- integers -4 0 34) ) atunci prima valoare din lista
“allowed” este aleasa ca valoare default (în cazul considerat, valoarea default ar fi –4).
3. Daca tipul fixat pentru fateta este INTEGER, FLOAT sau NUMBER si exista
specificarea “range” atunci valoarea minima a domeniului devine valoare default, daca nu este
250 Reprezentarea cunoasterii folosind mediul CLIPS

-∞; daca valoarea minima a domeniului este -∞ si valoarea maxima a domeniului nu este +∞,
atunci valoarea maxima a domeniului se considera ca valoare default.
4. Daca fateta nu are tipul precizat, dar are o specificare “allowed-symbols”, atunci
prima valoare din lista respectiva se ia ca valoare default.
5. Daca valoarea default nu este determinata prin una din regulile de mai sus, atunci ea
se fixeaza în functie de tipul fatetei, dupa cum urmeaza: pentru tipul STRING este “” (sirul de
caractere vid), pentru INTEGER este 0, pentru FLOAT este 0.0, iar pentru tipul SYMBOL
sau atunci când tipul nu este precizat este simbolul nil.
6. Daca fateta este de tip multicâmp atunci valoarea multicâmp cu 0 câmpuri este
folosita, daca nu suntem în cazul în care pentru fateta respectiva s-a fixat printr-o specificare
de cardinalitate un numar minim de câmpuri mai mare ca 0. Într-un asemenea caz valoarea
default va avea un numar de câmpuri egal cu minimul permis prin specificarea “cardinality” si
valoarea din fiecare câmp va fi aceea calculata dupa regulile 1 ÷ 5, ca si în cazul în care fateta
respectiva ar fi de tipul cu un câmp.

În CLIPS versiunea 5 intra în functiune numai regula 5 si regula 6 (aceasta din urma
fara cazul în care apare si specificarea “cardinality”). Regulile de mai sus exprima felul în
care în CLIPS se încearca rezolvarea eficienta, chiar si atunci când informatiile sunt restrânse,
a calculului valorii celei mai asteptate (este vorba si de acele cunostinte numite de “bun-simt”
în capitolul al treilea).

Exercitiul 5.31.
Fie urmatoarea definitie de fapt structurat:

(deftemplate Microprocesor
(multifield nume (type LEXEME) )
(field bus (allowed-values 1 4 8 16 32) )
(field viteza (type STRING NUMBER) )
(field tehnologie (allowed-symbols CMOS NMOS PMOS) )
(field putere (type NUMBER) (range ?VARIABLE 10) )
(field stare (allowed-values actual depasit) (default actual) ) )
Determinati continutul faptului care se introduce în BF la comanda: (assert
(Microprocesor) ).

5.16.3. Introducerea faptelor structurate în baza de fapte

Asa dupa cum s-a vazut si din paragrafele anterioare, introducerea faptelor structurate
în BF se face prin aceleasi procedee ca si pentru faptele nestructurate: prin comenzi “assert”
(date la nivel superficial sau din partea de actiune a regulilor), respectiv prin comenzi
“deffacts” (date la nivel superficial sau încarcate din fisiere). Deosebirea fata de faptele
Sisteme bazate pe cunostinte 251

nestructurate este accea ca pentru a putea folosi un fapt structurat într-o operatie de
introducere în BF este necesar ca în prealabil acesta sa fi fost definit printr-o definitie
“deftemplate”. Aceasta, fiind definitie de constructie, poate fi data la nivel superficial sau
înscrisa în fisiere. Asa cum se vede si din exemplele anterioare, într-o comanda “assert” (si la
fel stau lucrurile si pentru comanda “deffacts”) se va prevedea, într-o pereche de paranteze,
numele faptului structurat si 0 ÷ n din fatetele acestuia, unde n este numarul de fatete care
apare la definitia faptului structurat respectiv. Fatetele care sunt prevazute sunt acelea pentru
care vrem sa fixam o valoare diferita de valoarea “default”, în timp ce fatetele care nu sunt
prezente vor lua în mod implicit valoarea “default”. Fiecare fateta trebuie inclusa într-o
pereche de paranteze.
Drept exemple, având definitia faptului structurat din exercitiul 5.31, adaugari în BF
ale unor fapte structurate cu numele Microprocesor sunt:

(assert (Microprocesor (putere 5) (nume Intel I80286) (bus 16) ) )


(deffacts ini (Microprocesor (nume I8080) (stare depasit) (bus 8) ) )

Observatia 5.16.
a. Conform celor stiute pentru comanda “deffacts”, aceasta determina introducerea
faptelor din interiorul ei în BF numai dupa un “reset”.
b. Este de notat ca în cazul faptelor structurate ordinea fatetelor nu are nici o
importanta, asa cum se vede si din cele doua situatii de mai sus.

Pentru faptele structurate exista câteva noi posibilitati de introducere în BF. Astfel,
atunci când în BF exista deja un fapt structurat si vrem sa introducem unul asemanator, putem
folosi comanda:

(duplicate <index-fapt-structurat> <<fateta-de-modificat>>)

unde am notat prin index- fapt-structurat contorul din identificatorul ce însoteste faptul
structurat în BF (este aceeasi identificare, de forma f – i, ca la faptele nestructurate). Efectul
este acela de introducere a unui nou fapt structurat în BF, cu acelasi continut ca si cel al
faptului deja existent si care are indexul precizat prin primul argument, mai putin fatetele care
apar explicit în comanda respectiva si pentru care se folosesc valorile date în comanda.
De exemplu, conform definitiei “deftemplate” din exercitiul 5.31, daca avem în BF
faptul structurat “Microprocesor” cu fateta nume Intel I80286 (acesta fiind plasat la
identificatorul f- 1), si daca ne intereseaza sa introducem în BF un nou fapt structurat, cu
acelasi continut, mai putin fatetele nume si putere, care trebuie sa devina I80386, respectiv 3,
vom putea folosi comanda:

(duplicate 1 (nume I80386) (putere 3) )


252 Reprezentarea cunoasterii folosind mediul CLIPS

Daca se foloseste o comanda “duplicate” în care nu apare nici o fateta de modificat,


atunci rezultatul depinde de starea bistabilului privind faptele duplicat (sunt sau nu admise
fapte duplicat în BF – vezi paragraful 5.18). Nefiind definitii de constructii, comenzile
“duplicate” pot fi date la nivel superficial, sau în partea de actiune a regulilor.

O alta posibilitate de introducere în BF a faptelor structurate este cea data de comanda:

(modify <index- fapt-structurat> <<fateta-de-modificat>>)

Efectul este acela de stergere din BF a faptului structurat având indexul precizat prin
primul argument al comenzii si de introducere a unui nou fapt, cu un continut identic cu cel al
faptului sters, mai putin fatetele de modificat, care iau valorile indicate în comanda. Astfel,
daca în BF, la identificatorul f-2, se gaseste faptul “Microprocesor”, cu fateta nume I8080 si
fateta stare depasit, comanda:

(modify 2 (stare actual) )

va determina înlocuirea în BF a faptului respectiv cu un altul, în care se produce schimbarea


valorii fatetei stare. Folosirea comenzii “modify” fara nici o fateta de modificat este posibila
si va determina stergerea faptului identificat prin argumentul “index-fapt-structurat” si
reintroducerea aceluiasi fapt în BF, cu acelasi continut, dar într-o noua pozitie (la urmatorul
index liber). Mai mentionam ca, în conformitate cu sintaxa data, în comenzile “modify” sau
“duplicate” poate fi implicat un singur fapt structurat.

5.16.4. Corelarea faptelor structurate cu regulile

Faptele structurate se coreleaza cu regulile la fel ca faptele nestructurate: prezenta lor


în BF determina activarea regulilor, prin procesul de potrivire. Deosebirea care apare este data
de accea ca ordinea fatetelor nu are importanta (în contrast cu câmpurile din faptele
nestructurate, a caror ordine conteaza în procesul de potrivire).
Exemplul 5.3.
Sa se scrie o regula care sa afiseze toate microprocesoarele de 8 biti, a caror putere
este strict mai mare decât 2 si pentru care fateta stare are valoarea depasit. Consideram ca BF
contine fapte structurate de tip “Microprocesor”, conform definitiei din exercitiul 5.31.

(defrule determinare-uP-depasit1
(Microprocesor (nume $?n)
(bus 8)
(putere ?x&:(> ?x 2) )
Sisteme bazate pe cunostinte 253

(stare depasit) )
=> (printout t ?n “este un microprocesor depasit” crlf) )

De observat cum tiparul din partea de conditie a regulii de mai sus contine atât
perechea de paranteze corespunzatoare faptului structurat, precum si perechile de paranteze
corespunzatoare fatetelor care sunt folosite în crearea conditiei respective. Nu este necesar ca
într- un tipar dintr-o regula sa apara toate fatetele unui fapt structurat, ci numai acele pentru
care vrem sa impunem conditii de potrivire. Ordinea fatetelor neavând importanta, regula de
mai sus este echivalenta cu urmatoarea:

(defrule determinare-uP-depasit2
(Microprocesor
(putere ?x&:(> ?x 2) )
(bus 8)
(stare depasit)
(nume $?n) )
=> (printout t ?n “este un microprocesor depasit” crlf) )

Nu exista nici o restrictie privind tiparele referitoare la faptele structurate, care pot fi
folosite la fel ca si tiparele pentru faptele nestructurate (pot fi folosite si împreuna cu acestea)
si pot fi folosite în conditii privind stergerea faptelor din BF, ca în exemplul urmator.

(defrule actualizare
(faza actualizare BF)
(or ?a <- (Microprocesor
(bus ?b&:(< ?b 8) )
(stare depasit)
(nume $?n) )
?a <- (Microprocesor
(putere ?x&:(> ?x 5) )
(nume $?n) ) )
=> (retract ?a)
(printout t ?n “este un microprocesor depasit sau de putere mare” crlf) )

Noi posibilitati de programare sunt create pentru faptele structurate prin folosirea
comenzilor “duplicate” si “modify”.

Exemplul 5.4.
Sa se scrie regula care sa gaseasca o pereche de microprocesoare respectând conditia
ca primul sa aiba puterea mai mica sau egala cu 4, al doilea sa aiba puterea mai mare decât 4,
254 Reprezentarea cunoasterii folosind mediul CLIPS

ambele sa fie în tehnologia CMOS si sa aiba starea depasit. Pentru primul, daca fateta viteza
este data ca numar, aceasta se va modifica, trebuind sa devina cu 1 mai mica, iar pentru al
doilea se va mai introduce în BF înca un fapt similar, dar cu fateta tehnologie la valoarea
NMOS si cu puterea având vechea valoare plus 2.

(defrule R
?a <- (Microprocesor (tehnologie CMOS)
(stare depasit)
(viteza ?v)
(putere ?p1&:(<= ?p1 4) ) )
?b <- (Microprocesor (tehnologie CMOS)
(stare depasit)
(putere ?p2&:(> ?p2 4) ) )
=>
(if (numberp ?v) then (modify ?a (viteza =(- ?v 1) ) ) )
(duplicate ?b (tehnologie NMOS) (putere =(+ ?p2 2) ) ) )

Exercitiul 5.32.
Experimentati functionarea regulii de mai sus, creând conditiile pentru activarea ei.
Explicati efectul negativ care apare si modificati regula pentru a- l înlatura.

5.16. 5.Verificarea automata a restrictiilor din faptele structurate

Unul din avantajele folosirii faptelor structurate, în comparatie cu cele nestructurate,


este acela ca sistemul efectueaza în mod automat un control al corectitudinii definitiei si
respectiv un control al valorilor înscrise în fatete, tinând seama de restrictiile impuse la
definirea faptului structurat. Exista doua variante de efectuare a acestei verificari: statica si
dinamica. Utilizatorul poate seta tipul de verificare convenabil, fie folosind meniul Execution,
optiunea Options, fie folosind, comanda (în CLIPS versiunea 5):

(set-dynamic-deftemplate-checking {TRUE,FALSE})
sau în CLIPS versiunea 6:

(set-dynamic-constraint-checking {TRUE,FALSE})

Starea implicita a bistabilului respectiv este FALSE, caz în care verificarea ce se va


face este de tip static. Fara a intra în toate detaliile, daca verificarea este de tip static atunci ea
se face numai la încarcarea programelor, în timp ce pentru cazul verificarii dinamice, aceasta
se executa si în timpul rularii programelor. Pentru a explica modul de verificare sunt
considerate urmatoarele exemple ilustrative (se indica si urmarirea lor experimentala).
Sisteme bazate pe cunostinte 255

Exemplul 5.5.
Fie urmatoarea definitie de fapt structurat:

(deftemplate Greseala (field abc (type FLOAT) (allowed-values 1 2 a) ) )

definitie care este gresita prin aceea ca determina doua restrictii neconcordante în privinta
tipului admis si a valorilor admise pentru fateta abc. Eroarea este semnalata la încercarea de
introducere a unui fapt Greseala în BF – de exemplu la comanda (assert (Greseala (abc 1) ) )
– când pe verificarea statica se semnaleaza eroare si faptul nu este adaugat în BF, iar pe cea
dinamica se face introducerea în BF, dar se semnaleaza eroare.

Exemplul 5.6.
Fie urmatoarea definitie:

(deftemplate G1 (field mm (type INTEGER) (allowed-symbols A B) ) )

La introducerea ei se va semnala eroare privind neconcordanta celor doua restrictii


folosite.

Exemplul 5.7.
Fie urmatoarea definitie de fapt structurat:

(deftemplate fapt (field nume (type SYMBOL) ) (field val (allowed-values 1 2 3) ))

La comanda (assert (fapt (nume 2))) se va semnala eroare datorita nerespectarii


conditiei de tip privind fateta nume si faptul nu este introdus în BF. Aceasta se întâmpla
indiferent de tipul setarii (statica sau dinamica) si se produce si atunci când faptul respectiv
este încarcat dintr- un fisier. La comanda (assert (fapt (val 5))) se semnaleaza eroare, cu
aceeasi explicatie ca în cazul anterior.
O comportare diferita, functie de tipul setarii, apare la comanda (assert (fapt) ). Daca
se lucreaza cu verificarea statica, atunci nu se semnaleaza nici o eroare; aceasta desi valoarea
care se atribuie pentru fateta val este nil, în conformitate cu regulile precizate anterior pentru
fixarea valorii unei fatete care nu are specificarea default. Valoarea astfel obtinuta nu se
încadreaza în valorile din lista “allowed-values” si aceasta eroare este semnalata daca se
lucreaza cu verificarea dinamica. Este de mentionat ca si pentru verificarea dinamica faptul
este introdus în BF, eroarea respectiva fiind numai semnalata, ramânând ca utilizatorul sa ia
masurile necesare.

Exemplul 5.8.
256 Reprezentarea cunoasterii folosind mediul CLIPS

Daca dintr-un fisier, sau de la nivel superficial se introduc urmatoarele doua definitii:

(deftemplate A (field a (type INTEGER) (range 0 10) ) )


(defrule r1 (A (a 11) ) => )

atunci, indiferent de tipul setarii, se semnaleaza eroare pentru regula r1, datorita tiparului
regulii care nu respecta cerinta privind domeniul fixat pentru fateta a; în consecinta, regula r1
nu este luata în considerare (nu este introdusa în BR).

Exemplul 5.9.
Daca sunt introduse urmatoarele doua definitii:

(deftemplate Simbol (field val (type LEXEME) ) )


(defrule r2 (Simbol (val ?x&:(> ?x 0) ) ) => )

iar apoi se da comanda (assert (Simbol (val abc) ) ), atunci se va semnala eroare în legatura
cu regula r2. Aceasta pentru ca faptul introdus creeaza o eroare în privinta apelului
predicatului >, care nu poate face o comparatie asupra unei valori nenumerice. Aceasta
comportare se produce în CLIPS versiunea 5, indiferent de setarea în care se lucreaza. În
CLIPS versiunea 6, comportarea este chiar mai buna, în sensul ca interpretorul determina
neconcordanta între tiparul regulii r2 si restrictia din fateta val chiar de la introducerea regulii,
semnalând eroarea respectiva si neacceptând introducerea regulii r2 în BR. Mai trebuie
mentionat cu privire la acest exemplu, ca ordinea în care sunt date cele doua definitii este
stricta; daca am încerca ordinea inversata, definind întâi regula r2, si apoi faptul structurat
Simbol, atunci se va semnala eroare: apare în partea de conditie a regulii o referire la un fapt
structurat a carui definitie nu se cunoaste.

Exemplul 5.10.
Fie urmatoarele doua definitii:
(deftemplate Fapt (field a1 (type STRING) ) (field a2 (type NUMBER) ) )
(defrule R
(Fapt (a1 ?x) )
(Fapt (a2 ?x) )
=> )

Regula este gresita prin aceea ca tiparele ei nu vor putea fi niciodata satisfacute
datorita restrictiilor impuse pentru cele doua fatete ale faptului structurat. Aceasta eroare este
semnalata numai în CLIPS versiunea 6, pe verificare statica.

Exemplul 5.11.
Sisteme bazate pe cunostinte 257

Daca se introduc ur matoarele doua definitii:

(deftemplate Fapt1 (field a1 (type INTEGER) ) )


(defrule r3 => (assert (Fapt1 (a1 =(read) ) ) ) )

si se activeaza regula r3 (prin comanda “reset”), iar de la tastatura, ca raspuns la functia


“read”, se introduce valarea abc (adica un simbol), atunci comportarea este diferita, în functie
de setarea în care se lucreaza. În cazul verificarii statice nu se semnaleaza nici o eroare; în
cazul celei dinamice se semnaleaza eroarea privind neconcordanta tipului valorii furnizate
pentru fateta a1, fata de tipul impus pentru fateta prin definitie (totusi faptul este introdus în
BF, dar rularea se opreste, pentru a avertiza utilizatorul). Este exemplul care ilustreaza
deosebirea dintre comportarea statica si cea dinamica. Mai mentionam ca în CLIPS versiunea
6 este posibila si o eliminare a verificarii automate a restrictiilor, daca se doreste asa ceva, din
meniul Execution, optiunea Options putând fi anulata si verificarea statica si cea dinamica. De
asemenea, aici este posibila setarea ambelor optiuni – verificare statica, dinamica – când se
vor cumula efectele acestora.

5.16. 6. Aspecte deosebite ale folosirii faptelor structurate

Pentru manevrarea faptelor structurate exista o serie de comenzi ajutatoare. Astfel,


“deftemplate” fiind o definitie de constructie, vor putea fi folosite comenzile “list-
deftemplates”, “ppdeftemplate” (semnificatia si sintaxa este aceeasi ca la “list-deffacts” si
“ppdeffacts”) pentru a lista toate definitiile deftemplate existente, respectiv pentru a lista
continutul unei anumite definitii “deftemplate”, sau se va putea folosi, pentru aceleasi scopuri,
meniul Browse.

O definitie de fapt structurat se va putea sterge cu comanda: (undeftemplate <nume-


deftemplate>), dupa cum repetarea unei definitii “deftemplate” cu acelasi argument nume-
deftemplate conduce la înlocuirea vechii definitii cu cea noua, ca la orice alta definitie de
constructie.
În CLIPS versiunea 6, apare un element deosebit în ceea ce priveste stergerea si
redefinirea unui fapt structurat, operatii care se pot face numai daca faptul respectiv nu este în
functiune. Aceasta presupune ca sa nu existe nici un fapt structurat cu numele respectiv
prezent în BF si nici o regula din BR sa nu aiba în partea de conditie sau în cea de actiune
vreo referire la faptul structurat respectiv.
De exemplu sa presupunem ca s-a introdus urmatoarea definitie de fapt structurat:

(deftemplate F (field a) )
258 Reprezentarea cunoasterii folosind mediul CLIPS

Daca se da apoi comanda (assert (F) ), atunci stergerea definitiei faptului structurat F
sau redefinirea acestuia se pot face numai dupa eliminarea din BF a faptului introdus prin
comanda “assert”. De asemenea, daca dupa definitia de mai sus se definesc urmatoarele doua
reguli:

(defrule R1 (F) =>)


(defrule R2 => (assert (F) ) )

atunci redefinirea sau stergerea definitiei lui F nu mai este posibila. Mai întâi trebuie sterse
cele doua reguli si abia apoi se va putea redefini F sau sterge definitiei sa.
O situatie deosebita (care în principiu este bine a se evita si care în CLIPS versiunea 6
nici nu poate apare) este aceea când un acelasi simbol CLIPS este folosit si ca prim câmp într-
un fapt nestructurat si ca argument nume-deftemplate într- un fapt structurat. O asemenea
situatie ar putea fi generata prin urmatoarele comenzi:

(assert (F) ) ; se introduce in BF un fapt nestructurat.


(deftemplate F (field f1) (field f2) ) ; se defineste si un fapt structurat cu numele F.

În CLIPS versiunea 6 aceasta situatie nu poate apare: definitia faptului structurat cu


numele F nu este admisa (se semnaleaza si eroare) atâta timp cât în BF exista un fapt
nestructurat care are primul câmp F. În CLIPS versiunea 5, dupa cele doua comenzi de mai
sus nu se semnaleaza eroare; în schimb, dupa cea de-a doua comanda, faptul (F) ce exista deja
în BF este considerat ca fapt structurat, cu cele doua fatete f1 si f2 absente.

Exercitiul 5.33.
a. Raspundeti la urmatoarele întrebari:
• Care sunt deosebirile dintre faptele structurate si cele nestructurate ?
• Când va trebui preferata folosirea faptelor structurate ?
• Care este valoarea default pentru urmatorul fapt structurat:

(deftemplate Aa (field b1) (field b2 (allowed-symbols as bas) )


(field b3 (allowed-values 1 3 2) ) (field b4 (type INTEGER) )
(field b5 (type STRING) (allowed-strings “lk” “1 2 3”) ) )

• Care sunt posibilitatile de introducere a faptelor structurate în BF ?


• Când va fi activata urmatoarea regula ?

(defrule R
(student (domiciliul Iasi) (nume $?n) )
(not (student (nume $?n) (domiciliul Vaslui) ) ) => )
Sisteme bazate pe cunostinte 259

5.17. Sistemul de mentinere a consistentei bazei de fapte în CLIPS

Sistemul de mentinere a consistentei faptelor (în engleza: “truth maintenance system”)


este o tehnica de IA care faciliteaza efectuarea rationamentului nemonoton. Acesta este de
obicei necesar într-un univers de discurs nesimplificat, si este luat în considerare si de
modelele de reprezentare a cunoasterii, CLIPS oferind în acest sens o varianta de
implementare prin programarea bazata pe reguli. În CLIPS consistenta BF se poate pastra prin
folosirea unor tipare speciale în partea de conditie a regulilor, numite tipare “logical”
(inconsistenta BF ar însemna, în principiu, existenta în aceasta a unor fapte contradictorii, sau
a unora ce nu reprezinta formule valide).

Sintaxa unui tipar “logical” este:

(logical <tipar>)

În partea de conditie a unei reguli pot fi folosite oricâte tipare de tip “logical”, cu
singura restrictie ca acestea sa fie plasate pe primele pozitii, putând fi urmate de tipare
obisnuite. Efectul folosirii tiparelor “logical” este acela ca faptele care sunt introduse în BF
prin partea de actiune a regulii respective devin sustinute logic de faptele care verifica tiparul
sau tiparele de tip “logical”. Aceasta înseamna ca atunci când faptul sau faptele de sustinere
sunt sterse din BF si faptele sustinute sunt eliminate din BF, în mod automat. Explicatia este
aceea ca se invalideaza efectul unei deductii anterioare, deoarece una din ipoteze nu mai este
valida. Modul de functionare a sustinerii logice se va ilustra pe mai multe exemple.

Exemplul 5.12.
Fie regula:
(defrule R1
(logical (a) )
(b)
=>
(assert (c) ) )

În partea de conditie a regulii R exista un tipar de tip “logical” si un tipar obisnuit.


Efectul este urmatorul. Daca în BF exista faptele (a) si (b) atunci regula R1 este activata si, la
executie, ea determina introducerea în BF a faptului (c). Daca ulterior din BF este sters faptul
(b), aceasta nu are nici o consecinta asupra faptului (c); în schimb, la stergerea din BF a
faptului (a), sistemul va elimina în mod automat si faptul (c) din BF, deoarece acesta era
sustinut (prin tiparul “logical” al regulii R1) de catre faptul (a).
260 Reprezentarea cunoasterii folosind mediul CLIPS

Exemplul 5.13.
Urmatoarele doua reguli sunt echivalente:

(defrule R2 (defrule R3
(logical (a1) (a2) ) (logical (a1) )
=> (logical (a2) )
(assert (A1) ) ) =>
(assert (A1) ) )

Exemplul 5.14.
Urmatoarea regula este gresita sintactic:

(defrule R- gresita
(a)
(logical (b) ) => )

deoarece are un tipar obisnuit plasat înaintea unui tipar “logical”.

Exemplul 5.15.
Sub o conditie “logical” poate fi plasata o operatie SAU între mai multe tipare, ca în
cazul regulii R4:
(defrule R4
(logical (or (b1) (b2) ) )
(b3)
=> (assert (B1) ) )

functionarea fiind cea obisnuita pentru disjunctia între tipare.

Exercitiul 5.33.
Verificati functionarea regulii R4, observând felul în care se produce sustinerea logica
în acest caz. Scrieti cele doua reguli care sa nu mai foloseasca conditia SAU între tipare si
care împreuna sa fie echivalente cu regula R4.

Exemplul 5.16.
Desi un tipar de tip “not” poate fi plasat sub “logical”, nu se produce nici un efect de
sustinere. Fie în acest sens regula:

(defrule R5
(logical (a)
(not (b) ) )
=> (assert (c) ) )
Sisteme bazate pe cunostinte 261

Daca dupa introducerea acestei definitii urmeaza comenzile:

(assert (a) )
(run)
(assert (b) )

vom constata ca faptul (c) nu este scos din BF, desi prin introducerea lui (b) în BF partea de
conditie a regulii R5 nu mai este satisfacuta (în CLIPS versiunea 5 se transmite doar un mesaj
de avertizare – “warning”).

Exemplul 5.17.
Un fapt poate fi în situatia de a fi sustinut logic de diferite grupuri de fapte, provenite
din mai multe reguli. Într- un asemenea caz faptul respectiv va fi eliminat automat din BF
numai atunci când îsi pierde sustinerea din toate grupurile (ceea ce este în concordanta cu
teoria deductiei), asa cum se ilustreaza prin urmatoarele doua reguli:

(defrule R6 (defrule R7
(logical (a) ) (logical (e)
(b) (f) )
=> (assert (c) (d) ) ) => (assert (c) ) )
Exercitiul 5.34.
Introduceti regulile R6 si R7 în BR, activati- le si executati- le, iar apoi verificati
momentul când faptul (c), respectiv faptul (d), îsi pierd sustinerea logica. Explicati
comportarea obtinuta.

Exemplul 5.18.
Daca un fapt este introdus în BF printr-o modalitate independenta de sustinerea logica
(aceasta poate fi o comanda “deffacts” urmata de “reset”, sau “assert” data la nivel superficial,
sau din partea de actiune a unei reguli), atunci sustinerea logica nu mai este luata în
considerare. Aceasta situatie este ilustrata prin urmatoarele doua reguli:

(defrule R8 (defrule R9
(logical (y1) ) (y2)
=> =>
(assert (Y) ) ) (assert (Y) ) )

Daca în urma executiei celor doua reguli faptul (Y) este prezent în BF, iar ulterior
faptul (y1) este scos din BF, asupra lui (Y) nu se întâmpla nimic; aceasta deoarece el este
rezultatul si al regulii R9, adica al unei adaugari în BF independenta de sustinerea logica.
262 Reprezentarea cunoasterii folosind mediul CLIPS

Exemplul 5.19.
Daca o regula care a generat sustinerea logica pentru un fapt este stearsa din BR,
atunci sustinerea logica respectiva este anulata. Aceasta înseamna ca faptul nu va mai fi sters
din BF la pierderea sustinerei logice, asa cum se ilustreaza în cazul urmator.

(defrule R10
(logical (t1) )
=>
(assert (t2) ) )

La comenzile:

(assert (t1) )
(run)
(undefrule R10)
(retract 0)

daca f-0 este identificatorul la care se afla faptul (t1), vom constata ca faptul (t2) nu este
eliminat din BF, sustinerea sa logica anulându-se odata cu stergerea regulii R10 din BR.

Exemplul 5.20.
O regula în care exista un tipar “logical” creeaza o dependenta numai în legatura cu
comenzile “assert” existente în partea ei de actiune, nu si cu comenzile de stergere a faptelor
din BF - “retract”. De exemplu, considerând regula:

(defrule R11
(logical (h1) )
?a <- (h2)
=>
(retract ?a) (assert (h3) ) )

la activarea si executia ei faptul (h2) este scos din BF, iar (h3) este adaugat. La o scoatere
ulterioara din BF a lui (h1), faptul (h3) îsi pierde sustinerea logica si este sters din BF, dar nu
trebuie sa ne asteptam ca se produce o readucere automata a faptului (h2) în BF.

Exemplul 5.21.
Sustinerea logica se produce si în legatura cu faptele structurate, ca în cazul urmator:

(deftemplate F (field f) )
(defrule R12
Sisteme bazate pe cunostinte 263

(logical (F (f 1) )
(fa) )
=> (assert (Aa) ) )

Exercitiul 5.35.
Verificati modul de manifestare a sustinerii logice în cazul regulii de mai sus.

Exista o serie de comenzi ajutatoare pentru urmarirea sustinerii logice. Acestea sunt
urmatoarele.

(dependencies <index- fapt>)

Drept argument se poate folosi indexul unui fapt din BF sau o variabila legata la
indexul unui fapt (un caz de folosire a unei variabile în acest scop este cel din exercitiul 5.37
punctul d). Efectul este acela de listare a identificatorilor faptelor care asigura sustinerea
logica pentru faptul precizat prin argument.

(dependents <index- fapt>)

Argumentul poate fi indexul uni fapt din BF sau o variabila legata la indexul unui fapt.
Rezultatul care se obtine este acela de listare a identificatorilor faptelor care primesc suportul
logic de la faptul indicat prin argument.
Exercitiul 5.36.
Construiti un exemplu în care sa verificati modul de functionare pentru comenzile
“dependencies” si “dependents”.

Exercitiul 5.37.
a. Raspundeti la urmatoarele întrebari.
• Ce înseamna în IA rationament monoton si respectiv nemonoton si care sunt
cazurile în care trebuie sa intervina sistemul de mentinere a consistentei?
• Ce se întâmpla atunci când un fapt este sustinut logic din mai multe reguli ?
• Ce se întâmpla atunci când un tipar de tip “not” apare sub “logical” ?
• Care este efectul comenzilor “dependencies” si “dependents” ?
• Care este rezultatul ce se obtine dupa activarea si executia regulii urmatoare:

(defrule regula
(logical ?a <- (b) )
=>
(retract ?a)
(assert (c) ) )
264 Reprezentarea cunoasterii folosind mediul CLIPS

b. Fie urmatoarea regula:

(defrule rr
(logical ?a <- (A ?)
?b <- (A ?) )
(test (neq ?a ?b) )
=> (assert (c)))

Este regula respectiva corecta? Daca da, când este regula activata, ce se întâmpla dupa
executia ei si dupa eliminarea din BF a unuia din cele doua fapte care au determinat activarea.

c. Fie urmatoarele definitii de constructii (de observat ca numele unui fapt structurat
este acelasi cu numele unei reguli, fara sa existe vreo restrictie în acest sens, sau vreo
posibilitate de confuzie):

(deftemplate M (field m) )
(defrule M
(logical ?a <- (M (m 1) )
(b) )
=> (duplicate ?a (m 2) ) )

Cum se manifesta sustinerea logica în acest caz? Aceeasi întrebare pentru cazul în care
în partea de actiune a regulii M, actiunea “duplicate” este înlocuita cu una “modify”, adica
partea dreapta a regulii devine: (modify ?a (m 2) ) ).

d. Care este rezultatul care se obtine dupa efectuarea comenzilor (observati modul de
folosire a variabilei globale ?*A*) ?

(defglobal ?*A* = 0)
(defrule D1 (logical (d1) ) => (assert (d2) ) )
(defrule D2 ?a <- (d2) => (bind ?*A* ?a) )
(assert (d1) )
(run)
(dependencies ?*A*)
Sisteme bazate pe cunostinte 265

5.18. Optiuni ale functionarii interpretorului CLIPS

Interpretorul CLIPS poseda câteva optiuni, permitând utilizatorului sa aleaga între mai
multe variante în functionare, în functie de specificul problemei pe care o rezolva (una a fost
deja discutata, în 5.11.6, si anume bistabilul referitor la comportarea variabilelor globale la
comanda “reset”). Aceste optiuni se gasesc în meniul Execution, optiunea Options. Exista
doua optiuni cu privire la BF si BR:

• comportarea BF în ceea ce priveste faptele duplicat;


• felul în care regulile sunt sensibile la momentul introducerii faptelor în BF.

În ceea ce priveste faptele duplicat, exista un bistabil care regleaza aceasta


comportare. Acesta poate fi modificat prin comanda:

(set- fact-duplication {TRUE, FALSE})

sau din meniul Execution, conform mentiunii anterioare (rezultatul acestei comenzi, ca si la
toate comenzile de tip “set”, este vechea valoare a bistabilului respectiv). Valoarea implicita a
bistabilului este FALSE, situatie în care un fapt, cu un anume continut, este admis o singura
data în BF. În acest caz, daca de la nivel superficial sau din partea de actiune a unei reguli se
executa o comanda de introducere în BF a unui fapt care deja exista în BF atunci faptul
respectiv nu mai este înscris în BF, fara ca interpretorul sa semnaleze situatia respectiva. În
situatia în care bistabilul este pus pe TRUE, un fapt poate fi introdus în BF de ori câte ori
(evident la identificatori – adrese diferite), cu consecintele care pot apare în ceea ce priveste
procesul de potrivire. Starea bistabilului la un moment dat se poate vedea din meniul
Execution, optiunea Options sau cu comanda:
(get- fact-duplication)

Un alt bistabil care controleaza sensibilitatea regulilor la momentul introducerii


faptelor în BF. El poate fi modificat prin comanda:
(set- incremental-reset {TRUE, FALSE})

Valoarea implicita a bistabilului este TRUE, situatie în care regulile “vad” faptele (în
sensul ca sunt activate de ele) indiferent de momentul în care au fost introduse faptele în BF.
Daca bistabilul este pus pe FALSE, atunci regulile nu mai “vad” (în sensul ca nu sunt
activate) decât faptele care au fost introduse în BF dupa definitia lor. Starea bistabilului poate
fi determinata din meniul Execution sau prin comanda:

(get- incremental-reset)
266 Reprezentarea cunoasterii folosind mediul CLIPS

Mai mentionam ca starea acestui bistabil va putea fi modificata numai daca în BR nu


exista nici o regula.

Exercitiul 5.38.
Verificati influenta celor doua optiuni discutate mai sus folosind comenzile urmatoare
(în timpul experimentelor se va urmari si agenda). Se vor explica rezultatele obtinute.

(get- fact-duplication)¶
(get- incremental-reset)¶
(set- incremental-reset FALSE)¶
(assert (a))¶
(assert (a))¶
(defrule r (a) => (assert (b)) )¶
(retract 0)¶
(assert (a))¶
(run)¶
(set- incremental-reset TRUE)¶
(clear)¶
(set- incremental-reset TRUE)¶
(set- fact-duplication TRUE)¶
(assert (a) )¶
(defrule r (a) => (assert (b)) )¶
(assert (a) )¶
(run)¶

Exercitiul 5.39.
În cazul în care se lucreaza cu admiterea faptelor duplicat în BF (prin trecerea pe
TRUE a bistabilului “Fact Duplication”), se vor obtine efecte deosebite privind activarea
regulilor si privind sustinerea logica.
Verificati acest lucru, trecând pe TRUE bistabilul “Fact Duplication”, folosind regula:
(defrule R8
(logical (P1) (P2) )
=>
(assert (P) ) )

si introducând comenzile:

(assert (P1) (P2) (P1) (P1) (P2) )


(run)
Sisteme bazate pe cunostinte 267

Explicati felul în care faptele din BF îsi pierde sustinerea logica, eliminând din BF, pe
rând, diferitele fapte (P1) si (P2). (obtineti explicatia tinând seama ca faptele identice din
punct de vedere al continutului sunt deosebite dupa indexul lor).
268 Reprezentarea cunoasterii folosind mediul CLIPS

5.19. Reglarea functionarii motorului de inferente în CLIPS –


cresterea adaptabilitatii programelor în CLIPS

În privinta ciclului de lucru al motorului de inferente din CLIPS, se pot face unele
“reglaje” ale acestuia, care se refera la pasul al doilea (cel de rezolvare a conflictului – vezi
paragraful 5.5). Astfel, regulile sunt plasate în agenda în functie de prioritatile atasate explicit
(conform declaratiei “salience” – relatia 5.15, paragraful 5.4) sau implicit. Din acest punct de
vedere exista doua comportari posibile pentru motorul de inferente: evaluarea statica si
respectiv dinamica a prioritatilor regulilor.
În cazul variantei statice, prioritatile regulilor sunt stabilite la definirea acestora, si
schimbarea prioritatii fixate pentru o regula se poate face numai prin redefinirea ei; de aceea,
interpretorul CLIPS numeste aceasta situatie ca evaluarea “la definire” (în engleza: “when
defined”).
În cazul evaluarii dinamice, exista doua subvariante:
a) se reevalueaza prioritatile regulilor de fiecare data când acestea sunt plasate în
agenda (activate); de aceea denumirea variantei este “la activare” (în engleza: “when
activated”);
b) se reevalueaza prioritatile tuturor regulilor din agenda dupa fiecare executie a unei
reguli, adica la fiecare ciclu de lucru al motorului de inferente; de aici denumirea variantei, ca
“la fiecare ciclu” (în engleza “every cycle”).

Aceste variante pot fi alese din meniul Execution, optiunea Options, sau folosind
comanda:

(set-salience-evaluation {when-defined, when-activated, every-cycle})


Metoda implicita, adica aceea cu care porneste motorul de inferente, este cea statica.
Cele trei variante sunt incluse una în alta: când optiunea este “la activare”, evaluarea
prioritatilor se face si la definirea regulilor, iar daca este “la fiecare ciclu”, atunci evaluarea se
face si la definire si la fiecare plasare a unei reguli în agenda.

La folosirea comportarii dinamice, prioritatea unei reguli se poate modifica în timpul


rularii unui program. În acest fel, se creeaza posibilitatea ca un program bazat pe reguli sa-si
poata îmbunatati pe parcursul rularii functionarea, prin cresterea sau scaderea adecvata a
prioritatilor anumitor reguli. Se obtine astfel capacitatea ca programul sa evolueze, sa fie
adaptabil. În acest sens va fi aleasa de catre programator una din cele doua variante de
evaluare dinamica a prioritatilor, iar în definirea regulilor, în declararea prioritatii, vor fi
folosite variabile globale, ale caror valori vor fi schimbate în mod corespunzator prin
program. O asemenea definitie a unei reguli va fi sub formele sugerate mai jos:
Sisteme bazate pe cunostinte 269

(defrule R-adaptabila-1 (defrule R-adaptabila-2


(declare (salience ?*prioritate*) ) (declare (salience (– ?*p* 5) ) ) )
... ...
) )

Observatia 5.17.
a. O regula de forma:

(defrule r (declare (salience ?x) ) . . .)

este evident gresita, variabila locala, nelegata la momentul respectiv, neavând cum sa
furnizeze valoarea prioritatii.
b. La comportarea dinamica privind prioritatile, numai declaratia “salience” este
reevaluata. Plasarea sau nu în agenda este legata de mecanismul de potrivire si de cel de
refractie (fortarea replasarii în agenda, în sensul depasirii refractiei, se poate obtine prin
comanda “refresh” – vezi paragraful 5.6).
c. Exista comanda (refresh-agenda) care determina, la executie, reevaluarea
prioritatilor regulilor din agenda, indiferent de tipul de comportare setat pentru motorul de
inferente la momentul respectiv. Folosind-o în partea de actiune a unei reguli, vom putea
obtine adaptarea programului la anumite momente, acelea ale executiei regulii respective.

Un alt aspect al “reglajului” pe care îl poate face programatorul asupra motorului de


inferente este acela cu privire la strategia de rezolvare a conflictului. Aceasta intervine în
pasul 2 al ciclului motorului de inferente, care se refera la ordonarea regulilor în agenda.
Acest pas, mai în detaliu fata de cele spuse în paragraful 5.5, presupune urmatoarele criterii:

1. O regula nou activata este plasata în agenda deasupra tuturor regulilor de prioritate
mai mica decât a ei, si sub regulile de prioritate mai mare decât a ei.
2. Între regulile de prioritate egala plasarea se face în conformitate cu tipul de strategie
de rezolvare a conflictului care este activata (setata).

Trebuie mentionat ca, în cazul în care mai multe reguli sunt activate de aceeasi
introducere sau stergere a unui fapt sau a unor fapte din BF si criteriile de mai sus nu
determina fixarea ordinii între regulile respective, atunci plasarea lor în agenda se face într-o
ordine arbitrara, care nu este influentata de ordinea în care au fost definite regulile respective.
Aceasta înseamna ca metoda de rezolvare a problemei nu trebuie sa depinda de o anumita
ordine de executie a regulilor care se afla în situatia mentionata.
270 Reprezentarea cunoasterii folosind mediul CLIPS

În ceea ce priveste criteriul al doilea, exista în CLIPS sapte strategii de rezolvare a


conflictului. Deoarece acestea se refera la ordonarea între regulile de prioritate egala, în
continuare ne vom referi numai la reguli aflate în aceasta situatie. Cele sapte strategii sunt
urmatoarele.

1. Strategia în adâncime (în engleza: “depth”) – o regula nou activata este plasata
înaintea oricarei reguli existente în agenda; aceasta înseamna ca agenda se comporta ca o stiva
(LIFO).

2. Strategia în largime (în engleza: “breadth”) – o regula nou activata este plasata dupa
regulile existente în agenda; aceasta înseamna ca agenda se comporta ca o coada (FIFO).

3. Strategia simplitatii (în engleza: “simplicity”) – o regula nou activa ta este plasata
deasupra tuturor regulilor care au un coeficient de simplitate strict mai mare decât al ei si sub
regulile având un coeficient de simplitate egal, sau mai mic. Coeficientul de simplitate este
dat, în principiu, de numarul de comparatii care se efectueaza în partea de conditie a regulii, în
procesul de potrivire. Practic acest coeficient se calculeaza în felul urmator. Se pleaca de la
valoarea 0. Fiecare comparatie în procesul de potrivire al unui tipar cu o constanta sau o
variabila deja legata adauga 1 la coeficientul de simplitate. Fiecare apel al unei functii într-un
tipar, în cadrul operatorilor =, :, test, adauga 1 la coeficientul de simplitate. Apelul
predicatelor “and”, “or”, “not” nu adauga nimic la coeficientul de simplitate; în schimb,
argumentele lor adauga 1 la coeficientul de simplitate. Apelul unei functii în interiorul altei
functii nu adauga nimic la coeficientul de simplitate.
Fie, ca exemplu, regula:

(defrule exemplu
(a ?x ?y ?x)
(test (and (numberp ?x) (> ?x (+ 10 ?y) ) (< ?x 100) ) ) =>. . .)

Aceasta are coeficientul de simplitate 5, determinat de: comparatia primului câmp al


primului tipar cu constanta a, comparatia ultimului câmp al tiparului respectiv cu câmpul 2
(cu valoarea unei variabile deja legate), testarea tipului pentru variabila ?x, în predicatul
“numberp”, argument al predicatului “and”, cele doua testari prin predicatele > si <, aflate
de asemenea ca argumente ale lui “and”.

4. Strategia complexitatii (în engleza: “complexity”) – o regula nou activata este


plasata deasupra tuturor regulilor având coeficientul de simplitate strict mai mic si sub
regulile având coeficientul de simplitate mai mare sau egal cu al ei.
Sisteme bazate pe cunostinte 271

5. Strategia LEX – se tine seama în primul rând de noutatea faptelor care au


determinat activarea, si apoi de complexitate. O regula activata de un fapt mai nou în BF (deci
având un index mai mare) este plasata deasupra tuturor regulilor activate de fapte mai vechi.
Daca între tiparele care activeaza o regula exista si tipare de tip “not”, atunci acestea se
considera a avea în corespondenta un fapt fictiv, cu indexul mai mic decât al oricarui fapt
satisfacând un tipar obisnuit (care nu este de tip “not”). Între mai multe tipare “not” se tine
seama de ordinea în care au fost satisfacute, preferându-se regula cu tiparul “not” satisfacut
cel mai recent. Între mai multe reguli pentru care criteriul noutatii faptelor ce le-au satisfacut
nu poate face discriminare, se va prefera regula cu coeficientul de simplitate mai mare. De
exemplu, agenda ar putea arata la un moment dat în felul urmator:

0 R-6: f-1, f-4


0 R-5: f-1, f-2, f-3,
0 R-1: f-1, f-2, f-3
0 R-2: f-3, f-1
0 R-4: f-1, f-2,
0 R-3: f-2, f-1

Se observa ca în vârful agendei apare regula R-6, în a carei activare a intervenit faptul
de la identificatorul f-4, adica faptul cel mai recent din BF. Regula R-5 este pusa înainte de
regula R-1, deoarece are un coeficient de simplitate mai mare, având un tipar în plus, de tip
“not”. Prezenta acestuia este identificata prin “,” care apare dupa f- 3 (un tipar “not” dintr-o
regula activata este marcat prin semnul “,” în vizualizare agendei). La fel (prin complexitatea
mai mare) se explica ordonarea între R-1 si R-2, si respectiv între R-4 si R-3.

Strategia LEX poate fi utila în probleme de monitorizare, deoarece ea poate favoriza


un raspuns prompt la modificarea datelor din proces, date reflectate de faptele din BF.

6. Strategia MEA – se face o ordonare a regulilor tinând seama de noutatea faptului


care a determinat satisfacerea primului tipar al regulilor. Daca mai multe reguli aflate în
conflict au primul tipar satisfacut de un acelasi fapt, atunci decizia între acestea se ia în
functie de celelalte tipare, conform strategiei LEX. De exemplu, pe cazul age ndei discutate la
strategia LEX, ordonarea regulilor respective dupa strategia MEA va fi:

0 R-2: f-3, f-1


0 R-3: f-2, f-1
0 R-6: f-1, f-4
0 R-5: f-1, f-2, f-3,
0 R-1: f-1, f-2, f-3
0 R-4: f-1, f-2,
272 Reprezentarea cunoasterii folosind mediul CLIPS

Strategia MEA este legata de o metoda de rezolvare a problemelor folosita în IA,


numita “analiza mijloacelor de obtinere a scopului” (în engleza: “Means Ends Analysis”)
[Gia 89]. În aceasta metoda se face o comparatie între starea finala si cea prezenta, cautându-
se apoi mijloace de a reduce aceasta diferenta. Daca metoda se materializeaza într- un program
bazat pe reguli, atunci se poate folosi strategia MEA de rezolvare a conflictului, având grija ca
primul tipar al regulilor sa aiba importanta maxima în reducerea diferentei între starea
prezenta si starea scop.

7. Strategia aleatoare (în engleza: “random”) – în momentul activarii unei reguli i se


atribuie un numar aleator, care serveste la rezolvarea conflictului. Acest numar se pastreaza
daca strategia de rezolvare a conflictului este schimbata, si la o revenire la strategia aleatoare
se obtine o aceeasi ordonare ca înainte de schimbarea tipului de strategie.

Aceste strategii au caracter de generalitate, fiind cele mai întâlnite pentru motoarele de
inferente ale SE. În enumerarea lo r s-au facut unele aprecieri privind adecvarea la anumite
tipuri de probleme. Situatia ideala, aceea în care regulile unui SE sunt total independente, ar
însemna ca motorul de inferente poate determina solutia indiferent cu care strategie se
lucreaza. În realitate, se poate întâmpla ca natura problemei sa faca foarte dificila sau
imposibila obtinerea solutiei pe anumite strategii (a se vedea exemplul din paragraful
urmator). De aceea, cunoasterea lor poate permite adaptarea functionarii motorului de
inferente la specificul problemei, si în plus, experimentele facute cu diferite strategii ne pot
ajuta sa întelegem interdependentele care exista între reguli, punctele slabe ale functionarii
SE.

Caracteristica de adaptabilitate în CLIPS se poate obtine si prin aceea ca noi reguli


(sau în general noi definitii de constructii) pot fi create în timpul rularii programului. În acest
sens exista comanda:

(build {sir de caractere, simbol})


Sirul de caractere sau simbolul respectiv trebuie sa reprezinte o definitie de constructie
(defrule, deffacts, defglobal, etc.), efectul fiind acela de introducere a definitiei respective în
baza de definitii de constructii a sistemului. Comanda “build” va fi utila în partea de actiune a
regulilor, caz în care va determina introducerea definitiei respective, la momentul executiei
regulii, ca si cum aceasta ar fi fost data de la nivel superficial. Ca exemplu, regula urmatoare
determina, la executie, introducerea în BR a unei noi reguli: r-urgenta. Aceasta va determina,
prin actiunile ei, modificari ale comportarii sistemului: reevaluarea prioritatilor pentru toate
regulile din agenda si trecerea strategiei de rezolvare a conflictului pe varianta LEX.
Sisteme bazate pe cunostinte 273

(defrule r-adaptare
(faza adaptare)
(valoare-senzor S ?x&:(or (and (numberp ?x)(> ?x 100))
(and (symbolp ?x) (eq ?x mare))) )
=>
(assert (urgenta) )
(build “(defrule r- urgenta
(urgenta)
=>
(refresh-agenda)
(set-strategy lex) )” ) )

Se observa, din regula de mai sus, ca exista, în afara de meniul Execution, si


posibilitatea de schimbare a strategiei de rezolvare a conflictului prin comanda:

(set-strategy {depth, breadth, simplicity, complexity, lex, mea, random})


274 Reprezentarea cunoasterii folosind mediul CLIPS

5.20. Planificarea actiunilor unui robot folosind programarea bazata


pe reguli

Mediul de lucru (universul de discurs) este


D
A cel din fig. 5.2. Singurele elemente de interes sunt
E blocurile (corpuri având forma de paralelipiped) si
B robotul care le misca. Blocurile sunt asezate unele
C F peste altele, pe podea, în diverse configuratii. În
podea
prima abordare a problemei vom face o serie de
Fig. 5.2 ipoteze simplificatoare.
Acestea sunt:

• un singur bloc va fi stivuit deasupra altuia;


• robotul poate misca un singur bloc o data; ne intereseaza numai nivelul superior al
sistemului de comanda a robotului, fara detaliile privind materializarea fiecarei miscari pe
care acesta o efectueaza;
• pe podea pot fi puse oricâte blocuri;
• va fi admis numai un scop simplu, exprimabil printr-o singura conditie; pentru
situatia din Fig. 5.1, un asemenea scop ar fi: blocul C sa fie deasupra blocului E.

Vom parcurge cele 3 etape ale metodei descrise în paragraful 3.4 pentru
implementarea unui sistem bazat pe reguli. În primul pas scriem regulile necesare în
rezolvarea problemei într-o prima forma, de tip pseudocod.

1) În situatia în care se cere printr- un scop ca un bloc sa fie deasupra altui bloc si atât
blocul care se muta (blocul sursa) cât si cel destinatie sunt libere, adica se afla în vârful
stivelor din care fac parte, robotul poate face miscarea de mutare. Rezolvarea acestei situatii
este concretizata în urmatoarea regula, numita Mutare-directa:

Daca scopul este de a muta blocul ?sursa pe blocul ?destinatie si


blocul ?sursa este liber si blocul ?destinatie este liber atunci
muta blocul ?sursa pe blocul ?destinatie.

În exprimarea de mai sus am folosit notarea variabilelor din CLIPS.

2) Deoarece podeaua are o situatie deosebita fata de blocuri (poate primi deasupra ei
oricâte blocuri), vom prevedea o regula distincta pentru mutarea unui bloc pe podea, numita
Mutare-pe-podea.
Sisteme bazate pe cunostinte 275

Daca scopul este de a muta blocul ?sursa pe podea si blocul ?sursa este liber
atunci muta blocul ?sursa pe podea.

În acest fel regula Mutare-directa va fi de folosit în cazul în care sursa si destinatia


sunt blocuri, iar regula Mutare-pe-podea va fi de folosit atunci când destinatia nu este un bloc,
ci podeaua.

3) O regula care sa permita eliberarea unui bloc care nu este liber si care printr-un
scop existent urmeaza a fi mutat este urmatoarea (o numim regula Eliberare-sursa):

Daca scopul este de a muta blocul ?x si blocul ?x nu este liber


si blocul ?y este pe blocul ?x atunci creeaza scopul de a muta blocul ?y pe podea.

În legatura cu regula de mai sus este de observat ca destinatia blocului ?x nu


intereseaza în aceasta regula si de aceea ea nu apare, iar faptul ca blocul ?x nu este liber
înseamna ca el nu este în vârful stivei sale. Regula scrisa, conform felului în care lucreaza un
SE, se va aplica în mod repetat atunci când mai multe blocuri sunt deasupra unui bloc, creând
toate scopurile necesare.

4) O regula similara cu aceea de mai sus este cea de eliberare a destinatiei unui scop
(regula Eliberare-destinatie):

Daca scopul este de a muta ceva pe blocul ?x si blocul ?x nu este liber


si blocul ?y este pe blocul ?x atunci creeaza scopul de a muta blocul ?y pe podea.

În aceasta regula nu a interesat care este blocul care urmeaza a fi mutat pe blocul ?x.

Dupa ce a fost stabilita forma principiala a regulilor putem trece la pasul al doilea al
metodei, acela de fixare a formei faptelor prin care sa se descrie starea initiala din problema
respectiva. Tinând seama de fig. 5.2, de felul în care am conceput cele patru reguli
preliminare, rezulta ca necesare urmatoarele tipuri de fapte.

a) Pozitia relativa a blocurilor o vom preciza prin fapte de urmatorul tip:

(pe <element> <element>)

Exemple de folosire a acestui sablon pe fapte din problema noastra sunt: (pe A B)
(pe F podea) (pe nimic D).

b) Cuvintele nimic, podea, trebuie sa aiba un înteles deosebit fata de cuvintele care
reprezinta blocurile, pentru a nu putea fi interpretate ca blocuri. De aceea, ca masura de
precaut ie, vom preciza blocurile prin fapte de forma:
276 Reprezentarea cunoasterii folosind mediul CLIPS

(este-bloc <nume-bloc>)

În problema în lucru vom avea: (este-bloc A), (este-bloc B) s.a.m.d.

c) În regulile stabilite anterior este necesara precizarea scopurilor; în acest sens vom
folosi fapte de forma:

(scop muta <bloc> pe <element>) (5.23)

De exemplu, scopul din problema propusa va fi de forma: (scop muta C pe E). În


toate aceste tipare am folosit o serie de cuvinte cu rol ajutator, astfel ca BF sa fie mai usor de
urmarit si înteles.

Trecem acum la pasul al treilea al metodei, acela în care tinând seama de cele stabilite
în cele doua etape anterioare, cât si de sintaxa limbajului, scriem forma finala a regulilor.
Regula Mutare-directa, scrisa în CLIPS, este:

(defrule mutare-directa “aceasta regula intra in executie cand sursa si destinatia sunt
libere si destinatia este un bloc”
?scop <- (scop muta ?bloc1 pe ?bloc2)
(este-bloc ?bloc1)
(este-bloc ?bloc2)
(pe nimic ?bloc1)
?stiva1 <- (pe nimic ?bloc2)
?stiva2 <- (pe ?bloc1 ?bloc3)
=> (retract ?scop ?stiva1 ?stiva2)
(assert (pe ?bloc1 ?bloc2) (pe nimic ?bloc3) )
(printout t “blocul ” ?bloc1 “ este mutat pe blocul ” ?bloc2 crlf) )

Se pot face urmatoarele observatii în legatura cu aceasta regula. Ea are mai multe
roluri.

• Sa determine momentul când o miscare de mutare a unui bloc poate fi facuta de


catre robot, în conformitate cu scopurile existente în BF si cu conditiile necesare pentru
efectuarea miscarii. Astfel primul tipar al regulii verifica existenta scopului care va declansa
miscarea. Tiparele doi si trei se refera la conditia ca ?bloc1 si ?bloc2 sa fie în adevar blocuri,
iar urmatoarele doua contin conditiile ca blocurile care sunt implicate în miscare (blocul sursa
si cel destinatie) sa fie în vârful stivelor din care fac parte. Ultimul tipar al regulii are
importanta pentru procesul de actualizare a BF.
Sisteme bazate pe cunostinte 277

• Sa efectueze o actualizare a BF. De altfel, acesta este un principiu general; ori de


câte ori un SE determina o modificare în universul de discurs, va trebui facuta si actualizarea
corespunzatoare în BF, în ceea ce priveste modelul mediului (modelul de reprezentare a
cunoasterii) aflat în BF. În acest fel, BF va pastra în permanenta situatia curenta, corecta, din
universul de discurs. Concret, în exemplul considerat, actualizarea BF se refera la stergerea
faptelor care nu mai sunt actuale: scopul care a declansat regula si care fiind îndeplinit trebuie
eliminat din BF si faptele care se refera la starea anterioara a celor doua stive care sunt
afectate de miscarea efectuata (stiva din care se ia blocul având numele în variabila ?bloc1 si
stiva în care se pune acest bloc, peste blocul ?bloc2). Pe lâ nga stergerea faptelor care nu mai
trebuie sa existe în BF, actualizarea se refera si la introducerea celor doua noi fapte în BF, în
partea de actiune a regulii, în conformitate cu noua situatie a stivelor afectate de miscarea
respectiva.

Mai mentionam ca SE nefiind conectat efectiv cu un robot, comanda miscarii este


înlocuita cu mesajul transmis pe terminal, prin partea de actiune a regulii.
O forma similara are regula Mutare-pe-podea:
(defrule mutare-pe-podea “aceasta regula intra in executie cand un bloc trebuie mutat
pe podea si blocul respectiv este liber”
?scop <- (scop muta ?bloc1 pe podea)
(este-bloc ?bloc1)
(pe nimic ?bloc1)
?stiva <- (pe ?bloc1 ?bloc2)
=> (retract ?scop ?stiva)
(assert (pe ?bloc1 podea) (pe nimic ?bloc2) )
(printout t “blocul ” ?bloc1 “ este mutat pe podea” crlf) )

Partea de conditie si cea de actiune a acestei reguli sunt usor de urmarit, explicatiile
fiind similare cu acelea de la regula anterioara, cu observatia ca regula Mutare-pe-podea are
mai putine tipare si actiuni, deoarece în ceea ce priveste podeaua nu mai sunt necesare
verificari (conform uneia din specificatii, podeaua poate primi oricâte blocuri).

Pentru regula Eliberare-sursa, plecând de la forma în pseudocod se ajunge la


urmatoarea forma în CLIPS:

(defrule eliberare-sursa “aceasta regula intra in executie cand un bloc trebuie mutat
undeva si deasupra sa se afla alt bloc”
(scop muta ?bloc1 pe ?)
(este-bloc ?bloc1)
(pe ?bloc2 ?bloc1)
(este-bloc ?bloc2)
278 Reprezentarea cunoasterii folosind mediul CLIPS

=> (assert (scop muta ?bloc2 pe podea) ) )


Sunt usor de urmarit partile de conditie si de actiune ale acestei reguli. Este de
observat ca destinatia mutarii blocului ?bloc1 nu este necesara în aceasta regula si de aceea
s-a folosit în tiparul respectiv variabila simpla nespecificata.

Exercitiul 5.40.
a. Sa se scrie în CLIPS regula Eliberare-distinatie.
b. Sa se experimenteze functionarea programului format din cele 4 reguli, având grija
sa fie introduse în BF faptele corespunzatoare starii initiale si scopul, de exemplu cel propus
anterior: (scop muta C pe E).
c. Verificati starea BF dupa rularea programului, observati faptul incorect care apare si
modificati programul în asa fel încât sa nu mai apara eroarea respectiva.

O a doua varianta a programului de planificare a actiunilor robotului se va putea


obtine considerând turnurile în care se afla blocurile ca niste structuri de date de tip stiva. În
acest sens este de interes scrierea programului CLIPS care sa manevreze asemenea structuri
de date.
Datorita simplitatii problemei nu vom mai parcurge în mod explicit cele trei etape ale
metodei folosite la planificarea robotului. O stiva va fi reprezentata în BF sub forma
urmatorului tipar:

(stiva <<element-stiva>>)

O data stabilita forma acestui fapt vor fi usor de scris regulile care sa realizeze
operatiile de prelucrare a stivei - introducere si scoaterea de elemente din aceasta. Deoarece
numarul de elemente din stiva nu se cunoaste a priori, în scrierea regulilor vom folosi
variabilele multiple. Pentru regula de introducere în stiva consideram ca va exista un fapt de
declansare a acestei operatii, de forma:

(push <valoare>)

unde câmpul al doilea va contine valoarea ce se doreste a se adauga în stiva. Astfel, regula
(scrisa direct în CLIPS) rezulta de forma:

(defrule push-valoare “regula de introducere in stiva”


?adresa <- (push ?valoare)
?stiva <- (stiva $?rest)
=> (retract ?adresa ?stiva)
(assert (stiva ?valoare $?rest))
(printout t “S-a introdus in stiva valoarea: ” ?valoare crlf) )
Sisteme bazate pe cunostinte 279

Pentru operatia de extragere din stiva trebuie sa concepem doua reguli care sa intre în
actiune în cele doua cazuri posibile: se cere o extragere din stiva ce contine macar un element
si respectiv cazul în care se cere extragerea dintr-o stiva vida. Pentru prima situatie regula
este:

(defrule pop-stiva-plina “regula de extragere dintr-o stiva ce contine macar un


element”
?adresa <- (pop)
?stiva <- (stiva ?valoare $?rest)
=> (retract ?adresa ?stiva)
(assert (stiva $?rest))
(printout t “Valoarea extrasa din stiva este: ” ?valoare crlf) )

În regula de mai sus faptul (pop) va apare în BF atunci când utilizatorul doreste
efectuarea unei extrageri din stiva (evident, am presupus ca în BF exista o singur a stiva).
Exercitiul 5.41.
a. Scrie ti regula pentru cazul în care se cere extragerea dintr-o stiva vida (observati
caracterul disjunct al acestei reguli cu cea scrisa mai sus, în sensul neactivarii simultane a
celor doua reguli).
b. Rescrie ti regulile de extragere din stiva în asa fel încât utilizatorul sa fie anuntat
atunci când se extrage ultimul element din stiva.
c. Rescrieti regulile de lucru cu stive pentru cazul în care în BF se pot afla mai multe
stive.
d. Scrieti regulile pentru lucrul cu o structura de date de tip coada.

Tinând seama de aceste explicatii privind lucrul cu o structura de stiva în CLIPS


putem gasi o noua solutie la problema de planificare a actiunilor robotului. Astfel fiecare turn
de blocuri poate fi modelat printr-o structura de date de tip stiva, caz în care operatiile de
mutare se vor reduce la operatii asupra structurilor de date respective. În acest fel se
simplifica si forma faptelor, ajungând, pentru cazul din Fig. 5.2, la urmatorul grup de fapte
reprezentând starea initiala:

(deffacts stare- initiala


(stiva A B C)
(stiva D E F)
(scop muta C pe E) )

Simplificarea provine din aceea ca nu a mai fost necesar sa reprezentam explicit


elementul care este în vârful unui turn, el fiind implicit primul din stiva respectiva, si nici
280 Reprezentarea cunoasterii folosind mediul CLIPS

elementul aflat pe podea, acesta fiind ultimul din stiva; de asemenea podeaua nu a mai fost
reprezentata explicit. Regula Mutare-directa devine în noua abordare:

(defrule mutare-directa
?scop <- (scop muta ?bloc1 pe ?bloc2)
?stiva1 <- (stiva ?bloc1 $?rest1)
?stiva2 <- (stiva ?bloc2 $?rest2)
=> (5.24)
(retract ?scop ?stiva1 ?stiva2)
(assert (stiva $?rest1) (stiva ?bloc1 ?bloc2 $?rest2) )
(printout t “blocul ” ?bloc1 “ este mutat pe blocul ” ?bloc2 crlf) )

Exercitiul 5.41.
Scrieti celelalte trei reguli de planificare a actiunilor unui robot în noua varianta, aceea
a lucrului cu stive.

Putem perfectiona si aceasta ultima varianta de planificare a robotului, în sensul de a


renunta la simplificarea considerata la începutul paragrafului cu privire la scopul care poate fi
dat robotului. Astfel, vom considera ca scopul va fi acela de obtinere a anumitor configuratii
(anumitor stive) si putem obtine rezolvarea în aceasta noua formulare a problemei, prin
scrierea altor reguli si efectuarea
unor teste suplimentare.
D
Conform fig. 5.3, utiliza-
D A torul va trebui sa precizeze starea
initiala (notata în fig. 5.3 cu a) si
A E G pe cea finala (notata cu b),
aceasta însemnând ca vor trebui
B F B E
sa existe fapte în BF care sa
podea contina informatiile respective.
C G C F
Având la dispozitia ultima
a) Fig. 5.3 b) varianta de rezolvare vom încerca
sa folosim cât mai mult din
aceasta si sa o adaptam la noile cerinte. Astfel, vom pastra pentru reprezentarea pozitiei
blocurilor aceeasi forma ca mai sus – fiecarui turn îi corespunde o stiva. În consecinta,
descrierea starii initiale din fig. 5.3 va fi facuta prin grupul de fapte din definitia urmatoare:

(deffacts stare- initiala


(stiva A B C)
(stiva D E F G) )
Sisteme bazate pe cunostinte 281

Starea finala, cea scop, o vom reprezenta dupa acelasi principiu, dar, pentru a o
distinge de cea initiala, vom adauga cuvântul “scop” pe prima pozitie a faptelor respective.
Înseamna ca tiparul folosit este:

(scop stiva <<element-stiva>>) (5.25)

si grupul de fapte corespunzator cazului din fig. 5.3 este:

(deffacts stare- finala


(scop stiva D A G B C)
(scop stiva E F) )

Pentru a putea folosi, cu eventuale adaptari, cele 4 reguli din vechea solutie, ar fi
necesar ca scopurile sa apara în vechea forma, aceea data prin (5.23), aceasta fiind forma
pentru care sunt construite partile lor de conditie si de actiune. În consecinta, vom scrie niste
reguli care sa transforme scopurile date în forma concisa (5.25) în vechea forma (5.23). Una
din aceste reguli este:

(defrule initiala1
(declare (salience 10))
(scop stiva $? ?bl1 ?bl2 $?)
=> (assert (scop muta ?bl1 pe ?bl2)))

Regula “initiala1” preia un scop de forma (5.25) si, prin activari si executii repetate,
determinate de diferitele legari ale variabilelor ?bl1 si ?bl2, produce introducerea în BF a
tuturor scopurilor (în forma veche) care deriva dintr-un scop în noua reprezentare. Mai trebuie
mentionat ca am atasat acestei reguli o prioritate mai mare, pentru ca ea corespunde unei
prime faze a rularii, aceea în care se pregatesc conditiile pentru actiunea propriu- zisa a
regulilor de planificare.

Exercitiul 5.42.
Scrieti cea de-a doua regula necesara pentru aducerea scopurilor la vechea forma,
aceea corespunzatoare scopurilor de plasare a unui bloc pe podea.

Executia celor doua reguli discutate mai sus se va produce fara vreo precautie asupra
faptului ca anumite scopuri de plasare a unor blocuri ar putea fi deja îndeplinite din momentul
initial, fiind vorba de cazuri în care blocurile au aceeasi asezare atât în starea initiala, cât si în
cea finala. De exemplu, pentru situatia din fig. 5.3, acesta este cazul pentru blocurile B si C.
În consecinta trebuie concepute niste reguli, actionând dupa cele de initializare, si care sa
282 Reprezentarea cunoasterii folosind mediul CLIPS

elimine din BF scopurile create nejustificat (redundant). Acestea sunt cele doua reguli
prezentate în continuare:

(defrule scop-gata1
(declare (salience 5))
?sc <- (scop muta ?bl1 pe ?bl2)
(stiva $? ?bl1 ?bl2 $?)
(not (scop muta ?bl2 pe ?))
=> (retract ?sc))

(defrule scop-gata2
(declare (salience 5))
?sc <- (scop muta ?bl pe podea)
(stiva $? ?bl)
=> (retract ?sc))

Regula “scop-gata1” rezolva cazul în care scopul redundant se refera la plasarea a


doua blocuri unul peste celalalt si acestea sunt deja asezate în acest fel, în timp ce regula
“scop- gata2” rezolva cazul în care este vorba despre plasarea unui bloc pe podea si acesta este
deja pe podea. O precautie suplimentara trebuie sa ia prima dintre aceste reguli. Situatia
respectiva se explica usor pe cazul blocurilor E si F din fig. 5.3. Acestea, desi se gasesc în
aceeasi situare relativa unul fata de celalalt în starea initiala si cea finala, nu înseamna ca nu
trebuie mutate. Problema este creata de faptul ca blocul de dedesubt (blocul destinatie în
tiparul scop al regulii “scop-gata1”) nu este în starea initiala în pozitia necesara, conform
starii scop. În consecinta regula nu trebuie sa intre în actiune, scopul respectiv netrebuind a fi
scos din BF si din acest motiv apare tiparul de tip “not” în regula discutata.
Pe baza pregatirilor facute de cele patru reguli discutate mai sus, vom putea folosi, cu
unele adaptari, cele 4 reguli ale vechii solutii: “mutare-directa”, “mutare-pe-podea”,
“eliberare-sursa” si “eliberare-destinatie”. Doua dintre acestea sunt prezentate mai jos:

(defrule mutare-directa
?sc <- (scop muta ?bl1 pe ?bl2)
(not (scop muta ?bl2 pe ?))
?st1 <-(stiva ?bl1 $?rest1)
?st2 <-(stiva ?bl2 $?rest2)
=> (retract ?sc ?st1 ?st2)
(assert (stiva ?bl1 ?bl2 $?rest2))
(if (neq $?rest1 (mv-append)) then (assert (stiva $?rest1)))
(printout t "blocul " ?bl1 " este mutat pe blocul " ?bl2 crlf))
Sisteme bazate pe cunostinte 283

(defrule eliberare-sursa
(scop muta ?bl pe ?)
(stiva ?virf $? ?bl $?)
(not (scop muta ?virf pe podea))
=> (assert (scop muta ?virf pe podea)))

Comparând noua forma a regulii “mutare-directa” cu vechea varianta (5.24),


constatam introducerea în partea de conditie a unui nou tipar, de tip “not”. Justificarea este
oarecum asemanatoare cu aceea a tiparului “not” din regula “sop- gata1”, fiind vorba aici de
precautia ca un bloc sa fie asezat peste altul numai daca blocul destinatie este deja în pozitia
sa finala (pozitia scop). Fara aceasta precautie, pe cazul din fig. 5.3, programul ar putea gresi,
planificând ca prima miscare, asezarea blocului D pe A; miscarea respectiva, desi fezabila la
momentul initial, ar fi evident o greseala pentru planul de lucru al robotului.
În ceea ce priveste partea de actiune a regulii discutate, s-a introdus un test asupra
valorii variabilei multiple $?rest1 pentru a evita greseala semnalata în exercitiul 5.40,
punctul c, anume aceea de introducere a unui fapt incorect în BF în cazul în care blocul sursa
(cel care este mutat) nu se gaseste pe un alt bloc, ci pe podea. Este de remarcat felul în care
am testat faptul ca variabila $?rest1 nu este legata la valoarea cu zero câmpuri, folosind
functia “mv-append”.
În privinta regulii “eliberare-sursa”, aici singura noutate este aceea a introducerii
tiparului “not”. Fara tiparul respectiv este posibil sa se produca o activare si executie
redundanta a regulilor “eliberare-sursa” si “eliberare-destinatie”, în sensul ca un scop de
mutare a unui bloc pe podea sa fi fost deja creat si ele sa- l mai adauge în BF. Tot ca un
element de acuratete a programarii, se poate introduce o regula suplimentara, care sa “curete”
în final BF de faptul scop, acesta fiind rezolvat la momentul respectiv; aceasta regula este
prezentata mai jos:

(defrule final "regula de curatire a bazei de fapte"


(declare (salience -2))
?sc <- (scop stiva $?)
=> (retract ?sc))

Cu aceasta ultima regula se respecta un principiu al SBC, anume acela ca la finalul


executiei programului, utilizatorul sa nu gaseasca în baza de cunostinte fapte auxiliare,
necesare în timpul rezolvarii, ci numai faptele care reflecta starea curenta a universului de
discurs, si cele care exprima solutia la problema propusa SBC spre rezolvare.

Exercitiul 5.43.
a. Scrieti pentru noua abordare a programului de planificare a miscarilor robotului
regulile “mutare-pe-podea” si “eliberare-destinatie”.
284 Reprezentarea cunoasterii folosind mediul CLIPS

b. Experimentati functionarea programului obtinut, pentru diferite configuratii ale


starilor initiala si finala, cu numere diferite de blocuri si turnuri.
c. Este posibila înlocuirea tiparului al doilea din regulile “eliberare-sursa” si
“eliberare-destinatie” cu un tipar de forma data mai jos?

(stiva $? ?v ?bl $?)

Ultima varianta a programului de planificare a actiunilor robotului creeaza si un bun


mediu pentru ilustrarea strategiilor de rezolvare a conflictului, cele explicate în paragraful
5.19. Astfel, luând de exemplu o problema pentru care starea initiala si cea finala sunt date
prin grupul de fapte de mai jos:

(deffacts problema-test
(stiva d c b a)
(stiva f e)
(stiva g k l j) (5.26)
(scop stiva d j f e)
(scop stiva c k g l b a))
si rulând programul cu motorul de inferente fixat pe strategia în adâncime, vom constata ca se
obtine solutia corecta, listata în continuare:

blocul g este mutat pe podea


blocul k este mutat pe podea
blocul l este mutat pe podea
blocul j este mutat pe blocul f
blocul d este mutat pe blocul j
blocul c este mutat pe podea
blocul l este mutat pe blocul b
blocul g este mutat pe blocul l
blocul k este mutat pe blocul g
blocul c este mutat pe blocul k

În schimb, schimbând strategia de rezolvare a conflictului pe varianta în largime, vom


constata ca aceeasi problema nu mai este rezolvata corect. Conflictul apare între regulile
“mutare-directa” si “mutare-pe-podea” si o prima solutie este aceea de a acorda o prioritate
mai mare regulii “mutare-directa”, ca fiind regula care trebuie preferata în timpul planificarii.
Procedând în acest fel vom constata ca noua varianta a programului gaseste o solutie corecta
si pe strategia de rezolvare a conflictului în largime, solutie data mai jos:

blocul g este mutat pe podea


blocul d este mutat pe podea
Sisteme bazate pe cunostinte 285

blocul k este mutat pe podea


blocul c este mutat pe podea
blocul l este mutat pe blocul b
blocul g este mutat pe blocul l
blocul j este mutat pe blocul f
blocul k este mutat pe blocul g
blocul d este mutat pe blocul j
blocul c este mutat pe blocul k

Se constata ca aceasta solutie difera de aceea a strategiei în adâncime (remarcati


parcurgerea turnurilor de blocuri în cele doua maniere), dar este echivalenta cu respectiva
solutie, fiind vorba de acelasi numar de miscari planificate pentru robot (nu exista miscari
redundante). În concluzie, aceasta ultima solutie, în care regula “mutare-directa” are o atasata
o prioritate mai mare decât regula “mutare-pe-podea”, furnizeaza solutii corecte atât pe
strategia în adâncime cât si pe cea în largime.
În schimb, comutând strategia de rezolvare a conflictului pe varianta complexitatii,
vom constata din nou o solutie eronata. Aceasta provine din aceea ca, de fapt, conflictul dintre
regulile “mutare-directa” si “mutare-pe-podea” nu a fost în totalitate înlaturat prin cresterea
prioritatii uneia fata de cealalta. Din punct de vedere logic, problema este aceea ca la un
moment dat poate exista pentru un bloc un scop de mutare a sa pe podea (pentru a elibera un
bloc sursa sau unul destinatie), si în acelasi timp sa fi fost create si conditiile ca blocul
respectiv sa fie dus în pozitia sa finala, aceasta nefiind una pe podea, ci pe un alt bloc. Evident
în acest caz mutarea directa este cea care trebuie efectuata, deoarece dorim gasirea unui plan
optim. În acelasi timp, daca miscarea respectiva se produce, scopul de mutare pe podea a
blocului nu mai este actual si deci trebuie scos din BF. Rezulta necesitatea scrierii a doua
reguli “mutare-directa”, care sa rezolve cele doua cazuri distincte:

a) un bloc este mutat pe altul într-o situatie în care pentru el exista creat si un scop de
mutare pe podea, scop pe care regula trebuie sa-l elimine,
b) nu exista la momentul mutarii directe si scopul de mutare pe podea a blocului
deplasat, caz în care regula “mutare-directa” îsi pastreaza vechea forma.

Aceste doua reguli sunt date în continuare:

(defrule mutare-directa1
(declare (salience 1))
?sc <- (scop muta ?bl1 pe ?bl2)
(not (scop muta ?bl2 pe ?))
?st1 <- (stiva ?bl1 $?rest1)
?st2 <- (stiva ?bl2 $?rest2)
286 Reprezentarea cunoasterii folosind mediul CLIPS

?a <- (scop muta ?bl1 pe podea)


=>
(retract ?a ?sc ?st1 ?st2)
(assert (stiva ?bl1 ?bl2 $?rest2))
(if (neq $?rest1 (mv-append)) then (assert (stiva $?rest1)))
(printout t "blocul " ?bl1 " este mutat pe blocul " ?bl2 crlf))

(defrule mutare-directa2
(declare (salience 1))
?sc <- (scop muta ?bl1 pe ?bl2)
(not (scop muta ?bl2 pe ?))
?st1 <- (stiva ?bl1 $?rest1)
?st2 <- (stiva ?bl2 $?rest2)
(not (scop muta ?bl1 pe podea))
=> (retract ?sc ?st1 ?st2)
(assert (stiva ?bl1 ?bl2 $?rest2))
(if (neq $?rest1 (mv-append)) then (assert (stiva $?rest1)))
(printout t "blocul " ?bl1 " este mutat pe blocul " ?bl2 crlf))
Este de observat caracterul mutual exclusiv al celor doua reguli de mai sus, asigurat
prin folosirea unui tipar într-una, si a aceluiasi tipar, sub un “not” în cealalta, ceea ce este în
concordanta cu logica rezolvarii.

Exercitiul 5.44.
Introduceti cele doua reguli “mutare-directa” în ultima versiune a programului si
experimentati programul pe problema propusa prin grupul de fapte (5.26). Rulati programul
pe toate cele 7 strategii de rezolvare a conflictului. Veti constata obtinerea unor solutii
corecte.

Concluziile care se desprind în urma studierii acestei probleme sunt:


i) rulând un program bazat pe reguli pe diferite strategii de rezolvare a conflictului ne
putem da seama de interdependentele existente între reguli;
ii) cel mai adesea, un conflict între reguli, sau o anumita ordine de executie necesara a
se respecta între ele, nu se vor rezolva prin atasarea de prioritati, ci prin identificarea
conditiilor logice generând conflictul sau care determina ordinea dorita pentru executie,
conditii care vor putea fi materializate prin scrierea unor tipare adecvate; se respecta în acest
fel si principiul conform caruia în programarea bazata pe reguli nu trebuie folosite multe
nivele de prioritate pentru reguli (o cifra maxima recomandata este 7), deoarece prioritatile
“strica” modularitatea si caracterul oportun al interventiei regulilor.
Sisteme bazate pe cunostinte 287

Exercitiul 5.45.
Refaceti programul de planificare a actiunilor robotului folosind tipare de tip “logical”
(vezi paragraful 5.17). În acest sens, se poate obtine o noua solutie, în care sa se renunte la
regula mutare-directa1, prin folosirea tiparelor de tip “logical”. Ca indicatie, tiparele “logical”
vor fi folosite în regulile “eliberare-sursa” si “eliberare-destinatie”.

5.21. Probleme propuse

În final sunt propuse câteva probleme a caror rezolvare va presupune atât aplicarea
modelelor teoretice de reprezentare a cunoasterii, cât si a
3
n4 n5 principiilor programarii bazate pe reguli pentru implementarea în
CLIPS.
-1 -2 -1
1 Problema 1.
n2 n3
Sa se scrie un program CLIPS care sa simuleze
2 1 functionarea retelei neuronale de tip Hopfield din fig. 5.4.
Programul trebuie sa preia de la utilizator informatia cu privire la
n1 nodurile care sunt active si cele care nu sunt active, si sa
determine starea stabila în care ajunge reteaua neuronala.
Fig. 5.4.
Problema 2.
a. Materializati în CLIPS retelele semantice din fig. 3.4 si fig. 3.7.
b. Folosind reprezentarea de la punctul a, scrieti programul CLIPS care sa determine
valoarea unei proprietati specificate pentru un nod precizat dintr-o retea semantica (va puteti
ghida dupa algoritmul 3.1, dar materializarea nu trebuie sa fie procedurala, ci prin
programarea bazata pe reguli).
c. Scrieti programul CLIPS care sa gaseasca toate nodurile dintr-o retea semantica ce
au o anumita valoare a unei proprietati date.

Problema 3.
Construiti, cu ajutorul unor fapte structurate, reprezentarea în CLIPS a modelului de
cadru pentru un robot industrial (va puteti ghida dupa modelele date în fig. 3.11 si 3.12).

Problema 4.
Implementati în CLIPS modelul de reprezentare a cunoasterii corespunzator
exercitiului 27, pg. 128 (fig. 3.16).

Problema 5.
Creati o BF cu privire la studentii unei grupe. Scrieti programul CLIPS care sa
determine localitatea unde îsi au domiciliul cei mai multi studenti, studentul care are media
cea mai mare pentru semestrul curent (vor fi prezente informatii cu privire la notele din
288 Reprezentarea cunoasterii folosind mediul CLIPS

semestrul respectiv, media calculându-se numai pentru acei studenti care au cel mult o
restanta), numarul studentilor integralisti, numarul studentilor care nu au luat un examen, al
celor care nu au luat doua examene, respectiv al celor care nu au luat mai mult de doua
examene, si obiectul la care sunt cei mai multi restantieri.
Indicatie. Se vor putea folosi fapte structurate, care sa fie realizate în asa fel încât sa se
preîntâmpine introducerea de informatii incorecte în BF (de exemplu, o nota poate fi un
numar întreg între 1 si 10, numele disciplinelor de studiu sunt a priori cunoscute). Se va putea
folosi pentru pastrarea informatiilor cu privire la notele unui student o fateta multicâmp, în
care sa fie trecute, în perechi de câmpuri alaturate, numele disciplinei si nota obtinuta, sau
simbolul absent.

` Problema 6.
Concepeti un program în CLIPS care sa determine orarul unei facultati.
Indicatie. Se vor scrie mai întâi regulile principiale care ghideaza realizarea orarului,
apoi se vor concepe faptele necesare si regulile în CLIPS.

You might also like