Sunteți pe pagina 1din 8

2017 / 2018, FEAA, MASTER, MAE I, SISTEME INTELIGENTE ÎN AFACERI, LUCRAREA DE LABORATOR NR 1

SISTEMUL DE PROGRAME CLIPS

I. PREZENTAREA SISTEMULUI DE PROGRAME CLIPS. STRUCTURA


GENERALĂ A UNUI PROGRAM CLIPS
CLIPS este un acronim pentru C Language Integrated Production System, o unealtă pentru
construirea sistemelor expert dezvoltată de NASA în anii 1980. Sintaxa și numele au fost inspirate
de OPS (sistem de producție oficial, în engleză Official Production System) creat de Charles Forgy.
Primele versiuni de CLIPS au fost dezvoltate începând cu 1984 la NASA - Johnson Space
Center (ca o alternativă la sistemul existent numit ART*Inference) până la începutul
anilor 1990 când subvenția a încetat din cauza problemelor bugetului Federal, și a unui ordin
conform căruia NASA trebuia să cumpere software comercial în loc să-l dezvolte.
CLIPS este probabil cea mai folosită unealtă pentru sisteme expert deoarece este rapidă,
eficientă și gratuită și incorporează un limbaj de programare complet orientat obiect. Cu toate că
acum face parte din domeniul public, este încă actualizat și susținut de autorul original, Gary Riley.
CLIPS incorporează un limbaj de programare orientat obiect numit COOL pentru a scrie
sisteme expert. Cu toate că este scris în limbajul e programare C, interfața sa seamănă foarte mult
cu cea a limbajului de programare Lisp. Se pot scrie extensii în C, iar CLIPS poate fi chemat din
C1 .

CLIPS este un sistem de programe din clasa generatoarelor de sisteme expert, cunoscute
şi sub numele de nuclee de sisteme expert sau unelte de dezvoltare a sistemelor expert. În
esenţă, acest lucru înseamnă că sistemul CLIPS furnizează toate ingredientele - un motor de
inferenţă, modulul de achiziţie a cunoştinţelor, facilităţi pentru construirea unei interfeţe utilizator,
modulul explicativ şi o gamă largă de comenzi - necesare pentru dezvoltarea unui sistem expert.
Pentru construirea unui astfel de sistem, programatorul - numit în acest caz şi inginer de
cunoştinţe - trebuie să codifice cunoaşterea expertă de rezolvare a problemei în limbajul acceptat
de baza de cunoştinţe - numit şi formalism de reprezentare a cunoştinţelor. În cazul sistemului
CLIPS, acest formalism se bazează pe modelul regulilor de producţie, iar motorul de inferenţă se
bazează pe raţionamentul deductiv (înlănţuirea înainte), spre deosebire de Prolog, care foloseşte
raţionamentul inductiv (înlănţuirea înapoi).
Limbajul CLIPS este un limbaj multiparadigmă, adică un limbaj de programare care suportă
mai multe paradigme de programare. Astfel, limbajul CLIPS suportă paradigma procedurală,
paradigma bazată pe reguli (reguli de producţie + înlănţuirea înainte) şi paradigma orientată pe
obiect.
Lucrarea de laborator de faţă are în vedere versiunea CLIPS 6.3.

1
http://ro.wikipedia.org/wiki/CLIPS
Amelia BĂDICĂ, Valentin LIŢOIU 1
2017 / 2018, FEAA, MASTER, MAE I, SISTEME INTELIGENTE ÎN AFACERI, LUCRAREA DE LABORATOR NR 1

1.1 Introducere în CLIPS. Fapte


Lansarea în execuţie a sistemului CLIPS conduce la apariţia ferestrei principale a sistemului,
ilustrată în figura 1.1.

Figura 1.1 - Fereastra principală a sistemului CLIPS

Orice program CLIPS este compus dintr-o mulţime de reguli. Aceste reguli operează asupra
unor date memorate sub forma unei baze de fapte - numită şi memorie de lucru.
Un fapt este o secvenţă de unul sau mai multe câmpuri incluse între paranteze rotunde.
Un câmp poate fi de unul dintre tipurile:
 cuvânt - este o secvenţă de unul sau mai multe caractere ASCII afişabile, care nu începe cu
nici unul dintre caracterele < \ & $ ? + - (); şi nu conţine nici unul dintre caracterele < \&()
 şir de caractere - este un şir de zero sau mai multe caractere arbitrare incluse între
ghilimele; introducerea unei ghilimele într-un şir se face prin prefixarea sa cu un caracter \;
introducerea unui caracter \ într-un şir de caractere se face prin dublarea sa \\
 număr - reprezintă un număr întreg sau real; un astfel de câmp conţine trei părţi: semn,
valoare şi exponent.
Câteva exemple de cuvinte sunt:
cont
productivitatea muncii
foarte_mare
!?Î$^*
Câteva exemple de şiruri de caractere sunt:
"a crescut"
"\"acceptabil""
"un sir de caractere"
Câteva exemple de numere sunt:
2
3.4
.78
+5
-3
Amelia BĂDICĂ, Valentin LIŢOIU 2
2017 / 2018, FEAA, MASTER, MAE I, SISTEME INTELIGENTE ÎN AFACERI, LUCRAREA DE LABORATOR NR 1
Câteva exemple de fapte sunt:
(un-camp)
(doua campuri)
(viteza 80 kmph)
(cheltuielile au crescut)
(nume "Loredana Martinescu")
Pentru adăugarea de fapte la baza de fapte se foloseşte comanda assert. Sintaxa ei este
următoarea:
(assert fapt...)
Spre exemplu:
CLIPS> (assert (productia scade))
<Fact-1>
CLIPS> (assert (salariile cresc))
<Fact-2>
CLIPS> (assert (timpul_lucrat scade))
<Fact-2>
CLIPS>
Textul afişat automat de sistem, este indicat îngroşat.
Afişarea conţinutului curent al bazei de fapte se face cu comanda facts:
CLIPS> (facts)
f-0 (initial-fact)
f-1 (productia scade)
f-2 (salariile cresc)
f-3 (timpul_lucrat scade)
CLIPS>
Fiecare fapt are ataşat un număr secvențial unic, începând de la 0, numit indexul faptului.
Faptul cu indexul 0 este introdus automat de sistem și este atribuit faptului (initial-fact.
Indexul se poate folosi pentru a referi un anumit fapt. Spre exemplu, pentru a afişa faptele cu
indexul mai mare sau egal cu 1 se poate folosi comanda:
CLIPS> (facts 1)
şi pentru a afişa faptele cu indexul între 1 şi 4 se poate folosi comanda:
CLIPS> (facts 1 4)
Urmărirea conţinutului memoriei de lucru se poate face comod şi prin vizualizarea ferestrei
Facts, prin activarea opţiunii Facts Window a meniului Window.
Faptele pot fi şterse din baza de fapte cu ajutorul comenzii retract, prin referirea la indexul
lor. Sintaxa sa este:
(retract index fapt...)
Spre exemplu, ştergerea faptelor 1, 3 şi 5 se face cu comanda:
CLIPS> (retract 1 3 5)
Dacă se încearcă ştergerea unui fapt care nu se află în baza de fapte, sistemul CLIPS
semnalează acest lucru printr-un mesaj corespunzător.
Pentru ştergerea tuturor faptelor se foloseşte comanda:
CLIPS> (retract *)
sau comanda
CLIPS> (clear)
Diferența dintre cele două comenzi este aceea că șterge și faptul inițial.

Amelia BĂDICĂ, Valentin LIŢOIU 3


2017 / 2018, FEAA, MASTER, MAE I, SISTEME INTELIGENTE ÎN AFACERI, LUCRAREA DE LABORATOR NR 1
1.2.Reguli. Execuţia unui program CLIPS
Orice program CLIPS este o mulţime de reguli - numită şi bază de reguli sau bază de
cunoştinţe. Regulile unui program pot fi introduse direct de la prompterul sistemului CLIPS sau pot
fi încărcate dintr-un fişier text, creat cu editorul de texte încorporat, care creează fişiere ce au
implicit extensia .clp.
Spre exemplu, un sistem expert pentru analiză economico-financiară poate folosi o regulă care
se exprimă în limbaj natural astfel: dacă producţia scade şi dacă salariile
cresc, atunci productivitatea scade. O astfel de regulă se va codifica în CLIPS
astfel:
(defrule productivitatea_scade "Exemplu de regula in CLIPS"
(productia scade)
(salariile cresc)
=>
(assert (productivitatea scade)))
Formatul general al unei reguli este următorul:
(defrule nume-regula comentariu-optional
sablon...
=>
actiune...)
Se observă că o regulă se compune din trei părţi:
 antetul,
 partea stângă,
 partea dreaptă.
Antetul conţine cuvântul cheie defrule, numele regulii şi un comentariu opţional.
Partea stângă a unei reguli conţine o secvenţă de zero sau mai multe şabloane, numite şi
elemente condiţionale. Un şablon este un fapt, respectiv o secvenţă de unul sau mai multe câmpuri
inclusă între paranteze rotunde. Dacă toate şabloanele din partea stângă a unei reguli se identifică
cu faptele din baza de fapte, atunci regula este activată şi plasată într-o mulţime de reguli activate
numită şi agendă. Dacă o regulă nu conţine în partea stângă nici un şablon, ei i se va ataşa implicit
şablonul (initial-fact).
Partea dreaptă a unei reguli conţine o secvenţă de zero sau mai multe acţiuni care trebuie
executate atunci când regula este aprinsă. Un exemplu de astfel de acţiune este adăugarea unui fapt
la memoria de lucru, specificată prin comanda assert. Termenul de aprindere a unei reguli
semnifică execuţia efectivă a acţiunilor din partea stângă a regulii. O regulă va fi aprinsă numai
dacă este activată (se află în agendă). Dacă agenda conţine mai multe reguli activate, sistemul
CLIPS va selecta şi aprinde doar una dintre aceste reguli, pe baza unui mecanism de rezolvare a
conflictelor. Un astfel de mecanism se bazează pe ataşarea unor priorităţi explicite regulilor şi
selectarea pentru aprindere a regulii de prioritate maximă.

Pentru activarea regulii productivitatea_scade, faptele (productia scade)şi


(salariile cresc)trebuie adăugate la memoria de lucru cu comanda assert, Dacă acest fapt
se afla deja în memorie, comanda assert nu va avea nici un efect, deoarece duplicarea faptelor nu
este permisă de sistem, care va răspunde
FALSE
CLIPS>

Amelia BĂDICĂ, Valentin LIŢOIU 4


2017 / 2018, FEAA, MASTER, MAE I, SISTEME INTELIGENTE ÎN AFACERI, LUCRAREA DE LABORATOR NR 1
Singura modalitate de adăugare în acest caz constă în ştergerea faptului vechi cu retract şi
readăugarea sa cu assert. Această nouă versiune va avea un alt index decât vechea versiune.
Execuţia unui program CLIPS se face cu comanda run, cu sintaxa:
(run limită-opţională)
Parametrul opţional limită specifică limita maximă a numărului de reguli care vor fi
aprinse. Dacă acestă limită nu se specifică, execuţia continuă până când nu mai există reguli active
în agendă.
Pentru exemplul considerat, utilizarea comenzii run va produce o singură aprindere a regulii
productivitatea_scade, datorită prezenţei faptelor (productia scade)şi
(salariile cresc)în memoria de lucru. Rezultatul aprinderii regulii este adăugarea faptului
(productivitatea scade)la memoria de lucru.
În acest moment apare următoarea situaţie interesantă. Ce se întâmplă dacă se execută din nou
comanda run? Aparent regula productivitatea_scade ar trebui să se reactiveze, deoarece
memoria de lucru conţine un fapt care se identifică cu şablonul din partea stângă a regulii. Cu toate
acestea lucrurile nu stau aşa. Sistemul CLIPS a fost programat astfel încât aprinderea unei reguli să
se comporte similar cu comportamentul unei celule nervoase la primirea unui impuls. Odată
stimulată, o celulă nervoasă se va inactiva pentru o perioadă de timp. Acest fenomen este cunoscut
sub numele de refracţie. Similar, o regulă aprinsă nu va putea fi reaprinsă prin identificarea părţii
sale stângi cu aceleaşi fapte care au determinat aprinderea anterioară, deoarece astfel s-ar intra într-
o buclă infinită. Dacă se doreşte totuşi reaprinderea regulii, faptele care au determinat identificarea
(măcar unul dintre ele) vor trebui şterse şi readăugate memoriei de lucru.
Alte comenzi pentru lucrul cu reguli sunt rules şi ppdefrule.
Comanda: (rules) determină afişarea numelor regulilor din baza de cunoştinţe.
Comanda: (ppdefrule nume regulă) determină afişarea textului regulii specificate ca
argument. Această comandă se poate lansa automat prin activarea opţiunii Defrule Manager... a
meniului Browse şi selectarea apoi a regulii dorite şi a butonului Pprint din fereastra de dialog care
apare.
Pentru ştergerea unei reguli se poate folosi comanda undefrule cu sintaxa:
(undefrule nume regulă)

Deseori este convenabil să se poată adăuga la memoria de lucru o mulţime de fapte, în loc de
a adăuga câte un fapt la un moment dat. Acest lucru este în particular valabil pentru mulţimea
iniţială de fapte despre care se ştie că sunt adevărate. O astfel de mulţime de fapte se poate defini cu
ajutorul unui enunţ deffacts, cu următoarea sintaxă:
(deffacts nume comentariu-opţional
fapt...)
Utilizând un astfel de enunţ se poate defini o mulţime de zero sau mai multe fapte care pot fi
manevrate cu un singur nume - cel specificat în enunţul deffacts.
Faptele dintr-un enunţ deffacts sunt adăugate automat la memoria de lucru prin executarea
comenzii reset.
La pornire sistemul CLIPS creează automat un enunţ deffacts cu structura următoare:
(deffacts initial-fact
(initial-fact))
Astfel, după execuţia unei comenzi reset, pe lângă faptele furnizate de programator sub
forma enunţurilor deffacts, în memoria de lucru va apare în plus faptul (initial-fact) cu
indexul f-0. Orice regulă CLIPS care nu are şabloane în partea stângă, are implicit un şablon

Amelia BĂDICĂ, Valentin LIŢOIU 5


2017 / 2018, FEAA, MASTER, MAE I, SISTEME INTELIGENTE ÎN AFACERI, LUCRAREA DE LABORATOR NR 1
(initial-fact. Din acest motiv comanda reset activează toate regulile care au partea stângă
vidă.
Comenzile uzuale pentru manevrarea enunţurilor deffacts sunt list-deffacts şi ppdeffacts.
Comanda list-deffacts permite afişarea numelor tuturor enunţurilor deffacts definite. Sintaxa
acesteia este următoarea:
(list-deffacts)
Comanda ppdefacts permite afişarea conţinutului unui anumit enunţ deffacts specificat prin
numele său. Sintaxa sa este următoarea:
(ppdeffacts nume)
Efectele comenzilor list-deffacts şi ppdeffacts pot fi obţinute şi prin activarea opţiunii
Deffacts Manager... a meniului Browse.
Pentru ştergerea unui enunţ deffacts se poate folosi comanda undeffacts cu sintaxa:
(undeffacts nume)
Iniţializarea mediului de programare CLIPS se poate face cu comanda Clear CLIPS, care este
disponibilă şi ca opţiune a meniului Execution... . Efectul acestei comenzi este refacerea stării
sistemului ca şi cum ar fi fost repornit. Comanda Clear CLIPS şterge conţinutul memoriei de lucru,
al mulţimii de reguli şi al mulţimii de enunţuri deffacts.
Pentru a şterge ceea ce este în memoria de lucru se poate folosi opţiunea Clear Dialog
Window din meniul Window.
Pentru a vedea cum funcţionează enunţul deffacts şi care este mecanismul de execuţie a unui
program în Clips să testăm programul simplu de mai jos.
LP11.clp
(deffacts w1
(productia scade)
(personalul creste))
(defrule w1
(productia scade)
(personalul creste)
=>
(assert (productivitatea scade)))

Parcurgem următorii paşi:


1. Din programul CLIPS se apelează meniul File, New. Apare fereastra de editare Untitled1.
Se salvează fişierul (meniul File, Save as..) cu numele LP11.clp.
2. Se editează programul: se începe cu enunţul deffacts şi se continuă cu enunţul (enunţurile)
defrule.
3. Se încarcă programul în memorie: cel mai comod direct din editor prin activarea opţiunii
Load Buffer (sau Load Selection) a meniului Buffer). Dacă fişierul de tip .clp este
închis, se poate folosi, pentru încărcarea lui în memorie, meniul CLIPS File, Load....
4. Dacă în program este cel puţin un enunţ deffacts este obligatorie comanda (reset) sau
opţiunea Reset din meniul Execution, pentru a încărca faptele în baza de fapte. Nu uitaţi
acest pas!
5. Urmează execuţia programului cu ajutorul comenzii (run) sau activând opţiunea Run a
meniului Execution.
6. Se poate apoi vizualiza baza de fapte cu ajutorul comenzii facts sau deschizând fereastra
Facts Window.

Amelia BĂDICĂ, Valentin LIŢOIU 6


2017 / 2018, FEAA, MASTER, MAE I, SISTEME INTELIGENTE ÎN AFACERI, LUCRAREA DE LABORATOR NR 1
1.3. Un sistem expert în CLIPS pentru evaluarea unui proiect de investiţii
În acest paragraf se prezintă modul de implementare în CLIPS a unui sistem expert foarte
simplu pentru evaluarea unui proiect de investiţii. Baza de cunoştinţe a sistemului va trebui să
conţină următoarele cunoştinţe exprimate în limbaj natural:
 dacă mediul social este bun, cadrul juridic este stabil şi protecţia mediului este crescătoare,
atunci mediul general este acceptabil;
 dacă reţeaua comercială este mediocră, producţia este instabilă şi fezabilitatea tehnică este
medie, atunci riscul de fezabilitate este important;
 dacă riscul de fezabilitate este important şi mediul general este acceptabil, atunci riscul
global este important;
 dacă concurenţa este mare, creşterea pieţei este medie şi protecţia pieţei este slabă, atunci
încasările scontate sunt mediocre;
 dacă încasările scontate sunt mediocre, finanţarea externă este slabă şi nivelul investiţiilor
este important, atunci rentabilitatea fondurilor proprii este slabă;
 dacă termenul punerii în lucru a proiectului este incert şi încasările scontate sunt mediocre,
atunci timpul de revenire este important
 dacă rentabilitatea fondurilor proprii este slabă, riscul global este important, nivelul
investiţiilor este important, timpul de revenire este important şi coerenţa/strategia globală
este importantă, atunci evaluarea proiectului este mediocră.
Analizând aceste reguli, se observă că ele au următoarea structură generală:
dacă variabila v1 are valoarea a1
şi variabila v2 are valoarea a2
şi ...
şi variabila vn are valoarea an
atunci variabila vn+1 are valoarea an+1".
Având în vedere acest lucru, este util să folosim fapte cu următorul tipar: (variabilă
valoare).
În aceste condiţii, faptele:
 mediul social este bun;
 cadrul juridic este stabil;
 protecţia mediului este crescătoare;
 reţeaua comercială este mediocră;
 producţia este instabilă;
 fezabilitatea tehnică este medie,
se pot reprezenta cu următorul enunţ deffacts:
(deffacts fapte-initiale "Multimea initiala de fapte"
(mediu-social bun)
(cadru-juridic stabil)
(protectie-mediu crescatoare)
(retea-comerciala mediocra)
(productie instabila)
(fezabilitate-tehnica medie))
Primele trei reguli enunţate mai sus în limbaj natural se pot reprezenta în limbajul CLIPS
astfel:
(defrule mediu-general-acceptabil
(mediu-social bun)
(cadru-juridic stabil)
(protectie-mediu crescatoare)
=>

Amelia BĂDICĂ, Valentin LIŢOIU 7


2017 / 2018, FEAA, MASTER, MAE I, SISTEME INTELIGENTE ÎN AFACERI, LUCRAREA DE LABORATOR NR 1
(assert (mediu-general acceptabil)))
(defrule risc-fezabilitate-important
(retea-comerciala mediocra)
(productie instabila)
(fezabilitate-tehnica medie)
=>
(assert (risc-fezabilitate important)))
(defrule risc-global-important
(risc-fezabilitate important)
(mediu-general acceptabil)
=>
(assert (risc-global important)))

Amelia BĂDICĂ, Valentin LIŢOIU 8

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