Professional Documents
Culture Documents
. Pe ecran va
L9
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 ghilime @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:
urgenta
urgenta-incendiu
foarte_mare
!?#$^*
Ca element de stil, se recomand[ ca o mul\ime de fapte corelate s[ fie specificate cu ajutorul unui
tipar. Un exemplu de tipar este:
(urgenta <tip>)
unde simbolul tip indic[ un c`mp care desemneaz[ o urgen\[ specific[, ca spre exemplu incendiu sau
inundatie.
Fie spre exemplu urm[toarea mul\ime de fapte:
(actiune
(actiune
(actiune
(actiune
activeaza sistem-hidrant)
activeaza alarma-incendiu)
anunta departament-pompieri)
inchide-alimentare-energie-electrica)
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 (urgenta incendiu))
<Fact-0>
CLIPS> (assert (urgenta inundatie))
<Fact-1>
L9
Fiecare fapt are ata]at un num[r unic, @ncep`nd de la 0, numit indexul faptului. Acest num[r 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)
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.
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 un editor de texte - un astfel de fi]ier are implicit extensia .clp.
Spre exemplu, un sistem expert pentru monitorizarea unei instala\ii industriale poate folosi o
regul[ care se exprim[ @n limbaj natural astfel: "dac[ urgen\a este incendiu atunci ac\iunea este activarea
sistemului hidrant". O astfel de regul[ se va codifica @n CLIPS astfel:
(defrule urgenta-incendiu "Un exemplu de regula in CLIPS"
(urgenta incendiu)
=>
(assert (actiune activeaza-sistemul-hidrant)))
ac\iune...)
Se observ[ c[ o regul[ se compune din trei p[r\i: antet, parte st`ng[ ]i parte 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 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) din motive care se
vor explica ulterior.
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[ adic[ 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[. #nc[rcarea unei mul\imi de reguli se face cu comanda load, cu sintaxa:
(load nume-fi]ier)
Spre exemplu, dac[ se editeaz[ un fi]ier care con\ine regula urgen\a-incendiu prezentat[ mai sus
]i acest fi]ier se nume]te unu.clp ]i el este amplasat @n directorul c:\__users\amelia\clips\, atunci el va
putea fi @nc[rcat cu comanda:
CLIPS> (load "c:\\__users\\amelia\clips\\unu.clp")
L9
Facem observa\ia c[ @n acest caz secven\a \\ se poate @nlocui cu / (specificatorul de cale din
UNIX). Editarea fi]ierului unu.clp se poate face cu editorul @ncorporat sistemului CLIPS 6.0, care se
poate activa prin op\iunea Editor... a meniului File, sau cu orice alt editor de fi]iere text - de exemplu
Notepad.
#nc[rcarea unui fi]ier se poate face ]i cu op\iunea Load Constructs a meniului File. Activarea
acestei op\iuni are ca efect generarea automat[ a unei comenzi load.
Este posibil[ salvarea mul\imii curente de reguli cunoscute de sistemul CLIPS @ntr-un fi]ier surs[
CLIPS cu comanda save, cu sintaxa:
(save nume-fi]ier)
Un exemplu este urm[torul:
CLIPS> (save "c:\\__users\\amelia\clips\\doi.clp")
Pentru activarea regulii urgenta-incendiu, faptul (urgenta incendiu) trebuie ad[ugat la memoria de
lucru cu comanda assert, dup[ ce regula a fost @nc[rcat[ cu load. Dac[ acest fapt se afla deja @n memorie,
comanda assert nu va avea nici un efect, deoarece duplicarea faptelor nu este permis[ de sistem. Singura
modalitate va fi @n acest caz ]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[ specifc[ 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
urgenta-incediu, datorit[ prezen\ei faptului (urgenta incendiu) @n memoria de lucru. Rezultatul aprinderii
regulii este ad[ugarea faptului (actiune activeaza-sistemul-hidrant) 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 urgenta-incendiu 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 par\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)
Astfel c[, 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 (initial-fact). Din acest motiv
comanda reset activeaz[ toate regulile care au partea st`ng[ vid[.
Comenzile uzuale penru manevrarea enun\urilor deffacts sunt list-deffacts ]i ppdeffacts. Comanda
list-deffacts permite afi]area numelor tuturor enun\urilor deffacts definite. Sintaxa ei 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 ]tergera unui enun\ deffacts se poate folosi comanda undeffacts cu sintaxa:
(undeffacts nume )
Ini\ializarea mediului de programare CLIPS se poate face cu comanda clear, care este disponibil[
]i ca op\iune a meniului Execution... . Efectul acestei comenzi este refacerea st[rii sistemului ca ]i cum el
ar fi fost repornit. Comanda clear ]terge con\inutul memoriei de lucru, al mul\imii de reguli ]i al mul\imii
de enun\uri deffacts.
3.MECANISMUL DE EXECU|IE AL UNUI PROGRAM CLIPS
Execu\ia unui program CLIPS presupune execu\ia unui ciclu numit ciclu de inferen\[. La fiecare
trecere prin ciclu exist[ trei faze: identificarea, rezolvarea conflictelor (selec\ia) ]i execu\ia. Faza de
identificare presupune identificarea tuturor regulilor pentru care toate ]abloanele din partea st`ng[ se
identific[ cu con\inutul curent al memoriei de lucru. Acest reguli se numesc active ]i sunt plasate @n
agend[. Rezolvarea conflictelor, numit[ ]i selec\ie, presupune selectarea din agend[, pe baza unei
strategii de rezolvare a conflictelor, a unei singuri reguli active, care va fi ulterior aprins[. Faza de
execu\ie presupune aprinderea regulii selectate @n faza de selec\ie. Aprinderea @nseamn[ execu\ia
ac\iunilor specificate @n partea dreapt[ a regulii. Acest ciclu se execut[ p`n[ c`nd s-au aprins un num[r
predefinit de reguli, sau nu mai exist[ reguli active @n agend[.
Sistemul pune la dispozi\ie o serie de facilit[\i pentru urm[rirea execu\iei unui program @n scopul
depan[rii sale. Aceste facilit[\i sunt oferite de comenzile agenda, matches, watch ]i comenzile de lucru
cu punctele de @ntrerupere.
Comanda agenda permite afi]area con\inutului curent al agendei. #n acest fel vor putea fi
vizualizate regulile active la un moment dat. Se recomand[ testarea comenzii agenda @n urm[torul
context: se @ncarc[ programul unu.clp ]i se adaug[ apoi faptul (urgenta incendiu) la memoria de lucru.
Agenda poate fi monitorizat[ foarte comod ]i prin deschiderea ferestrei Agenda, ac\ion`nd op\iunea
Agenda Window a meniului Window.
Comanda matches permite afi]area ]abloanelor unei reguli care se identific[ cu faptele curente,
pentru fiecare ]ablon indic`ndu-se faptele cu care el se identific[. Sintaxa comenzii este:
(matches nume regul[)
Comanda watch permite controlul informa\iilor afi]ate de CLIPS @n urma execut[rii anumitor
comenzi. Sintaxa sa este:
(watch op\iune)
unde op\iunea poate fi: facts, rules, actvations, all, etc. (pentru o list[ complet[ se recomand[ consultarea
help-ului prin activarea op\iunii CLIPS Help a meniului Help). Op\iunea all permite afi]area tuturor
informa\iilor disponible, adic[ este echivalent[ cu activarea tuturor op\iunilor posibile. Spre exemplu,
dac[ se utilizeaz[ comanda:
CLIPS> (watch facts)
L9
atunci la fiecare ad[ugare a unui fapt la memoria de lucru, sistemul va indica explicit acest lucru prin
afi]area unui mesaj:
CLIPS> (assert (urgenta inundatie))
==> f-0
(urgenta inundatie)
<Fact-0>
Comanda watch se poate lansa ]i prin activarea op\iunii Watch... a meniului Execution.
Comenzile de gestiune a punctelor de @ntrerupere sunt: set-break, show-breaks ]i remove-break.
Se nume]te punct de @ntrerupere, oprirea execu\iei unui program exact @naintea aprinderii unei
reguli. Setarea unui punct de @ntrerupere pe o anumit[ regul[ se face cu comanda set-break cu sintaxa:
(set-break nume regul[)
Comanda:
(show-breaks)
Se observ[ c[ dup[ lansarea comanzii run, execu\ia s-a oprit @nainte de aprinderea regulii a-doua.
Ea a fost apoi reluat[ cu comanda run, oprindu-se din nou @naintea aprinderii regulii a-treia, find apoi
reluat[ cu run. Datorit[ op\iunilor alese prin comanda watch, se observ[ c[ sistemul afi]eaz[ toate
modific[rile memoriei de lucru (op\iunea facts) ]i toate activ[rile (op\iunea activations) ]i aprinderile de
reguli (op\iunea rules). Ad[ugarea unui fapt la memoria de lucru este simbolizat[ prin ==> ]i ]tergerea
unui fapt (nu apare @n acest exemplu) se simbolizeaz[ prin <==.
#n finalul acestui paragraf vom indica alte c`teva manevre utile care pot fi efectuate direct din
editorul sistemului CLIPS:
selectarea automat[ a unei reguli, fapt sau comenzi din programul editat prin plasarea
cursorului pe entitatea dorit[ ]i activarea op\iunii Balance a meniului Edit;
L9
afi]area unui help contextual pentru anumite cuv`nte cheie (defrule, deffacts, assert, ...) care
desemneaz[ diverse comenzi sau enun\uri ce pot apare @ntr-un program CLIPS, prin plasarea
cursorului pe cuv`tul respectiv, activarea op\iunii Complete... a meniului Edit, selectarea
comenzii @n fereastra de dialog care apare ]i activarea butonului Help;
@nc[rcarea programului editat cu op\iunea Load Buffer a meniului Buffer;
@nc[rcarea por\iunii selectate din programul editat cu op\iunea Load Selection a meniului
Buffer; selec\ia se face cu mouse-ul ca @n orice editor sub Windows sau cu op\iunea Balance a
meniului Edit;
execu\ia @n mod batch (ca ]i cum ar fi fost tastat[ la promterul sistemului) a comenzii
selectate din editor; selec\ia se face cu mouse-ul ca @n orice editor sub Windows sau cu
op\iunea Balance a meniului Edit;
4.UN EXEMPLU DE PROGRAM CLIPS
#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 scotate 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:
L9
(defrule mediu-general-acceptabil
(mediu-social bun)
(cadru-juridic stabil)
(protectie-mediu crescatoare)
=>
(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)))
#n acest moment programul - s[-l numim invest.clp, poate fi tastat ]i executat prin parcurgerea
urm[torilor pa]i:
editarea cu editorul @ncorporat sistemului CLIPS;
@nc[rcarea programului (cel mai comod prin meniul sistemului CLIPS sau direct din editor
prin activarea op\iunii Load Buffer meniului Buffer);
execu\ia programului cu comanda run sau activ`nd op\iunea Run a meniului Execution;
vizualizarea bazei de fapte cu comanda facts sau deschiz`nd fereastra Facts Window.
Cititorul este invitat ca, dup[ modelul prezentat, s[ codifice @n CLIPS ]i restul regulilor sistemului
expert de evaluare a unui proiect de investi\ii, s[ defineasc[ noi fapte ini\iale necesare pentru testarea
acestor reguli ]i s[ execute apoi programul ob\inut.
L9