Sunteți pe pagina 1din 20

SISTEME EXPERT DE GESTIUNE

OBIECTIVE

Obiectivele cursului sunt reflectate în cunoaşterea şi aprofundarea elementelor


fundamentale ale sistemelor expert de gestiune, precum şi în câştigarea deprinderilor practice
în utilizarea limbajului de programare Prolog pentru rezolvarea unor probleme (aplicaţiilor)
din domeniul economic. Prin întregul său conţinut, cursul urmăreşte formarea gândirii logice şi
informatice a studentului.

Cuvinte cheie: inteligenţă artificială, sistem expert, bază de cunoştinţe, proces de


inferenţiere, motor de inferenţă, achiziţia cunoaşterii, reprezentarea cunoştinţelor, sistem
cognitiv, sistem rezolutiv, bază de fapte, bază de reguli, calcul propoziţional, reguli de
producţie, calculul predicatelor, baze de date deductive, scop, Turbo Prolog.

1. DEFINIREA, LOCUL, OBIECTIVELE ŞI STRUCTURA SISTEMELOR EXPERT


1.1. Definirea, locul şi obiectivele sistemelor expert

Sistemele expert fac parte din ramura informaticii denumită inteligenţă artificială. Prin
inteligenţă artificială (Artificial Intelligence) se înţelege tehnologia informatică care priveşte
simularea pe calculatorul electronic a unor elemente ale inteligenţei umane (deducţia logică,
capacitatea de a învăţa din experienţă, obţinerea unor concluzii pe baza unor date incomplete,
recunoaşterea vorbirii etc.). Raţionamentul artificial imită raţionamentul natural, specific
creierului fiinţei umane. Abordarea cognitivă a inteligenţei artificiale (raţionamentul artificial
este o încercare de reproducere a raţionamentului natural care este o succesiune de stări şi
procese mentale ce convertesc stimulii priviţi ca date de intrare în rezultate sau date de ieşire) a
permis lui E.A. Feigenbaum să definească inteligenţa artificială ca un ansamblu de tehnici şi
metode prin care se asigură capturarea cunoştinţelor umane şi procesarea simbolică a acestora.
S-au obţinut, astfel, sisteme de gestiune a bazelor de cunoştinţe, prin cunoştinţă înţelegând
informaţie cu înţeles şi informaţie care acţionează (acad. Mihai Drăgănescu). Se reaminteşte aici
că informaţia este o dată care prezintă caracter de noutate, iar calculatorul electronic realizează
prelucrarea automată a datelor. Prin abordarea pragmatică (modul de obţinere a
raţionamentului artificial diferă de modul oferit de modelul biologic), inteligenţa artificială este
definită ca ramură a informaticii care asigură executarea cu ajutorul calculatorului a unor sarcini
(task-uri) pe care fiinţa umană le execută, în anumite situaţii, mai bine decât calculatorul. În
sfârşit, prin abordarea conexionistă (raţionamentul artificial este o încercare de reproducere a
raţionamentului natural care este o succesiune de stări şi procese neuronale), informatica
inteligentă este definită ca acea parte a informaticii care realizează prelucrarea automată a
cunoştinţelor. Se reaminteşte că informatica este ştiinţa care asigură prelucrarea automată a
datelor. În varianta clasică, prelucrarea este algoritmică (problema de rezolvat este descompusă
în paşi elementari, modul de rezolvare este descris prin dispunerea paşilor într-o anumită ordine
prin folosirea celor trei structuri fundamentale de control specifice programării structurate -
secvenţială, alternative şi repetitive şi obţinerea rezultatului prin prelucrarea serială a datelor).
În informatica inteligentă, sunt prelucrate date sub formă de cunoştinţe, adică acele corelaţii
logice şi semantice dintre fapte puse în evidenţă cu ajutorul regulilor de raţionament
(inferenţiere). Prelucrarea cunoştinţelor este o prelucrare simbolică (prelucrare nealgoritmică ce
nu face diferenţa dintre date şi programe) şi are caracter declarativ. Dintre domeniile principale
1
de aplicaţie ale inteligenţei artificiale se enumeră sistemele expert, învăţarea automată,
demonstrarea automată a teoremelor, robotica, jocurile dintre om şi calculator, traducerea
automată, recunoaşterea formelor, realitatea virtuală.
Domeniile activităţii umane conţin probleme dificile de rezolvat (complexe, incomplete,
inconsistente, incerte, bazate pe aprecieri vagi, confuze, slab structurate) de către experţii umani,
adică de acei specialişti cu experienţă acumulată în mulţi ani, cu eforturi de aprofundare a
problematicii domeniilor respective. Experţii umani convertesc problemele din sfera expertizei
în sfera cunoştinţelor comune de specialitate ce sunt bine structurate şi sunt caracterizate de
simplitate, claritate, certitudine, consistenţă, precizie şi completitudine.
Sistemul expert reprezintă un sistem de programe pe calculator, fundamentat pe metode
şi tehnologii ale inteligenţei artificiale, care stochează cunoştinţele mai multor experţi umani
dintr-un domeniu bine definit şi pe care apoi le utilizează pentru rezolvarea problemelor dificile
specifice domeniului. Un sistem expert prezintă următoarele caracteristici: relevanţa mare;
specializarea într-un domeniu bine definit; natura simbolică a cunoştinţelor prelucrate;
independenţa cunoştinţelor de mecanismul de raţionament (inferenţiere); abordarea declarativă
a cunoştinţelor; posibilitatea de a trata cunoştinţe incomplete şi inexacte; capacitatea de a
explica raţionamentele efectuate; exploatarea dinamică a cunoştinţelor prin intermediul
mecanismului de raţionament; folosirea unor metode empirice (bazate numai pe experienţă)
alături de metode ştiinţifice în rezolvarea problemelor. Sistemele expert asigură extinderea
prelucrărilor în domenii dificil de algoritmizat, ce sunt dominate de informaţii calitative
(macroeconomic, juridic, politic, educaţional etc.). Sistemele expert pot fi utilizate ca sisteme
informatice specializate sau pot fi integrate ca subsisteme în sisteme informatice hibride,
inclusiv în sisteme informatice de asistare a deciziei (SIAD) şi în sisteme informatice integrate
economice, în conformitate cu concepţia holonică asupra sistemelor (două sau mai multe
sisteme autonome se pot integra, pentru a îndeplini obiective bine definite, pe baza unor criterii
prestabilite, pentru a forma un nnou sistem de referinţă denumit sistem holonic). Principalele
tipuri de sisteme expert utilizate în domeniul economic sunt: sisteme expert destinate previziunii
şi planificării (de exemplu, previziunea structurii portofoliului de clienţi ai unei societăţi de
asigurări sau planificarea investiţiilor); sisteme expert de diagnosticare (de exemplu,
diagnosticarea situaţiei financiare a unei societăţi comerciale sau supravegherea procesului de
acordare a creditelor într-o bancă); sisteme expert de control şi monitorizare (de exemplu,
gestiunea trezoreriei). Alte tipuri de sisteme expert (folosite în alte domenii decât cel economic)
au funcţii de depanare şi reparare, proiectare, instruire, interpretare, simulare, clasificare.
Conform unor statistici, cele mai folosite tipuri de sisteme expert sunt cele de diagnosticare
(45%), de planificare şi previziune (25%), de control şi monitorizare (15%).
Sistemele expert au apărut în anii 70 ai secolului XX, la început pentru aplicaţii medicale
şi tehnice. Dintre primele sisteme expert realizate, se amintesc MYCIN – pentru diagnosticarea
bolilor datorate infecţiilor bacteriene şi DENDRAL – destinat spectrografiei de masă, ambele
aparţinând Universităţii Stanford din SUA; DART – pentru depanarea calculatoarelor
electronice, aparţinând firmei IBM. Ulterior, aplicaţiile economice ale sistemelor expert au
căpătat o amploare deosebită, în special în domeniile financiar-contabil, bancar şi de marketing
(exemple: LOAN PROBE al asociaţiei de companii de audit Big Eight – pentru auditarea
împrumuturilor de la bănci, SURVEILLANCE EXPERT al bursei din New York, destinat
supravegherii tranzacţiilor, PLAN POWER al firmei Applied Expert Systems, Inc. – planificare
financiară individuală, BUSINESSPLAN – planificare financiară pentru întreprinderi mici, ce
aparţine firmei Sterling Wentworth Corp, ANSPLAN al firmei Ansoft – planificarea firmei pe
baza cotei de piaţă şi diferenţierii produselor, FINANCIAL ADVISOR al firmei Paliadian
Software – gestionarea proiectelor de capitalizare intensivă, PPAM al firmei Lysia – planificare
de marketing pentru un singur produs).

1.2. Structura unui sistem expert

Arhitectura unui sistem expert cuprinde: baza de cunoştinţe, baza de fapte, motorul de
inferenţe, modulul de achiziţie a cunoştinţelor, modulul explicativ şi interfaţa cu utilizatorul.

2
Baza de cunoştinţe şi baza de fapte formează baza de date a sistemului expert.
Baza de cunoştinţe cuprinde date sub formă de cunoştinţe (reprezentate prin reguli, reţele
semantice, reţele neuronale, modele hibride etc.) ale unui domeniu specializat. Aceste cunoştinţe
sunt expresia entităţilor şi a relaţiilor dintre ele din universul real. Crearea unei baze de
cunoştinţe este un proces complex, cu multe iteraţii şi teste, la care participă experţii umani şi
inginerii de cunoştinţe (cogniticienii) ce sunt similari cu analiştii de sisteme informatice.
Baza de fapte include date despre problema de rezolvat (formularea problemei) şi fapte
generate de procesul de raţionamente efectuat de motorul de inferenţe asupra bazei de
cunoştinţe.
Motorul de inferenţe reprezintă partea de prelucrare a sistemului expert şi constituie
subsistemul rezolutiv al acestuia. De exemplu, în cazul sistemelor expert cu reguli de producţie,
motorul de inferenţe preia propoziţii de la intrare (prin interfaţa cu utilizatorul), caută fapte (din
baza de fapte) şi reguli (din baza de cunoştinţe) prin construirea de raţionamente (inferenţe) şi,
în final, trage o concluzie în virtutea căreia acţionează sistemul expert.
Modulul de achiziţie a cunoştinţelor permite conversia cunoştinţelor din forma asigurată
de inginerul de cunoştinţe în forma internă de stocare pe suport magnetic specifică sistemului de
calcul (reprezentarea cunoştinţelor). În plus, modulul de achiziţie a cunoştinţelor reprezintă şi o
interfaţă de comunicare cu baza de date a sistemului expert (către interior) şi cu alte sisteme
informatice (către exteriorul sistemului expert).
Modului explicativ asigură prezentarea în limbaj natural a justificării raţionamentelor
executate de motorul de inferenţe şi a întrebărilor adresate utilizatorului.
Interfaţa cu utilizatorul permite dialogul utilizatorului cu sistemul expert, pentru
introducerea datelor de intrare şi afişarea rezultatelor pentru problema de rezolvat.
Baza de cunoştinţe, baza de fapte, modulul de achiziţie a cunoştinţelor şi modulul
explicativ formează subsistemul cognitiv al sistemului expert, ca sistem bazat pe cunoştinţe, KBS
(Knowledge-Based System).
Cunoştinţele realizează descrierea rezolvării unei clase de probleme. Faptele asigură
descrierea aserţiunilor de instanţiere a unei probleme de rezolvat ce aparţine unei anumite clase
de probleme.

2. METODE DE REPREZENTARE A CUNOŞTINŢELOR


2.1 Noţiuni de bază specifice reprezentării cunoaşterii

Reprezentarea cunoaşterii (knowledge reprezentation) include domeniul cunoaşterii,


limbajul de reprezentare a cunoaşterii şi strategiile (mecanismele) de inferenţiere
(raţionament). Domeniul cunoaşterii desemnează ceea ce este necesar a fi reprezentat din
domeniul problemei de rezolvat. De exemplu, domeniul economic cuprinde cunoaşterea despre
entităţile reale şi proprietăţile acestora (agenţi economici, procese, fenomene, evenimente,
indicatori, bunuri etc.), politici şi strategii, norme şi normative, decizii, tranzacţii economice,
contexte de activitate, opinii de audit, planuri şi programe (cu obiective, cu eşalonare în timp, pe
persoane şi activităţi), proceduri de lucru etc. Limbajul de reprezentare a cunoaşterii asigură
metodele, modelele şi modul cum trebuie realizată reprezentarea cunoaşterii. Strategiile
(mecanismele) de inferenţiere arată modul în care se pot utiliza regulile. Regulile permit
descrierea modului în care se pot folosi faptele. Faptele, prezentate sub formă de aserţiuni, sunt
constituite din informaţiile primare care realizează descrierea elementelor domeniului
cunoaşterii. Într-o manieră similară cu structurile de date, se definesc structurile de cunoştinţe
care servesc pentru memorarea şi prelucrarea cunoştinţelor printr-un proces de inferenţiere
(raţionament).
Metodele de reprezentare a cunoştinţelor sunt clasificate în funcţie de:
• natura şi tipul cunoştinţelor (valabile sau perimate, certe sau incerte, complete sau
incomplete, pot/nu pot să fie modificate etc.);
• domeniul cunoaşterii (există domenii pentru care unele metode de reprezentare a
cunoştinţelor nu se pot aplica);
3
• clasa de cunoştinţe (materiale sau conceptuale);
• modelul specific luat în considerare;
• existenţa excepţiilor ce pot apare la reprezentarea cunoştinţelor;
• tipul problemei de rezolvat.
Metodele de reprezentare a cunoştinţelor se divid, în funcţie de modelul specific, în
metode declarative şi metode procedurale. Metodele declarative cuprind logica predicatelor
(calculul predicatelor), cadrele (frames) sau obiectele structurate, reţelele semantice.
Reprezentările bazate pe logica (calculul) predicatelor fac parte, alături de calculul
propoziţional, din grupul metodelor bazate pe logică. Logica este o ştiinţă a demonstraţiei care
se ocupă cu stabilirea condiţiilor corectitudinii gândirii, precum şi a formelor şi a legilor
generale de realizare a raţionamentelor corecte. Cunoştinţele sunt reprezentate sub formă de
propoziţii, predicate şi expresii de calcul logic. Reprezentările bazate pe logica (calculul)
predicatelor asigură ca o propoziţie să fie divizată în obiecte (argumente) şi predicate (aserţiuni
despre atributele obiectelor) prin folosirea enunţurilor logicii simbolice (matematice).
Aserţiunea, considerată la modul general [DEX], este un enunţ care este dat ca adevărat (true).
Reprezentările bazate pe calculul propoziţional au la bază o logică simbolică pentru manipularea
propoziţiilor. Propoziţia este un enunţ care poate avea valoare logică (adevărat, true sau fals,
false). Propoziţia compusă este formată din propoziţii elementare legate prin intermediul
conectorilor logici ↔ (echivalenţă), → (implicaţie), ^(AND adică ŞI– conjuncţie), v(OR adică
SAU - disjuncţie), ~(NOT adică NU - negaţie). Reprezentarea cunoştinţelor prin cadre (frames)
este o metodă structurată de reprezentare (Minsky, 1975) care ia în considerare atât informaţia
declarativă cât şi procedurală prin captarea sub forma unor relaţii predefinte. Cadrele (frames)
sau obiectele structurate asigură reprezentarea structurilor fixe sub formă de structuri
arborescente, atât pentru stocarea cunoştinţelor, cât şi pentru organizarea acestora în ierarhii sau
reţele succesorale (cu moştenire). Reprezentarea cunoştinţelor prin reţele semantice are la bază
un model grafic cu structură în reţea. Reţeaua semantică este un graf orientat în care nodurile se
folosesc pentru reprezentarea conceptelor (entităţi sub formă de obiecte), iar arcele servesc
pentru reprezentarea legăturilor specifice conceptelor (relaţiilor dintre obiecte). Metodele
procedurale cuprind regulile de producţie.
De un real succes se bucură, în ultima vreme, şi metodele bazate pe reţele neuronale,
scenarii, arbori decizionali, liste, reţele Petri stochastice etc.

2.2. Calculul propoziţional

Calculul propoziţional denumit şi logică propoziţională sau logica propoziţiilor se


fundamentează pe logica formală sau simbolică ce lucrează cu declaraţii şi operatori. Logica
formală are la bază două principii fundamentale. Principiul 1 fundamental „al celor două valori
– adevărat sau fals” cuprinde principiul „terţiului exclus” (o propoziţie poate avea doar valorile
de adevărat şi fals, deoarece o a treia posibilitate nu există) şi principiul non-contradicţiei (o
propoziţie nu poate să fie în acelaşi timp şi adevărată şi falsă). Principiul 2 fundamental „al
extensionalităţii” se referă la propoziţia compusă (definită în paragraful 2,1) a cărei valoare de
adevăr nu depinde decât de valorile de adevăr ale componentelor propoziţiei compuse
(propoziţiile elementare) şi nu şi de sensul lor.
Evaluarea propoziţiei compuse se efectuează într-o anumită ordine având în vedere că
NOT are prioritate absolută şi că AND are prioritate faţă de OR. Ordinea de evaluare într-o
propoziţie compusă se poate modifica prin intermediul parantezelor.
Formula de calcul propoziţional reprezintă o expresie ce conţine o propoziţie elementară
sau compusă şi care respectă următoarele patru proprietăţi: 1. propoziţia elementară este o
formulă; 2. dacă F1 este o formulă, atunci şi NOT(F1) este o formulă; 3. dacă F1 şi F2 sunt
formule, atunci şi expresiile următoare sunt formule: (F1 AND F2); (F1 OR F2); (IF adică dacă
F1 THEN adică atunci F2); 4. toate formulele ce sunt admisibile în calculul propoziţional, pot fi
obţinute prin aplicarea regulilor 1.,2. şi 3. de mai sus.
Deducerea de noi propoziţii se realizează pe baza silogismelor adică a raţionamentelor
deductive ce cuprind, la modul general, trei judecăţi legate între ele astfel încât cea de-a treia
4
judecată care reprezintă o concluzie, se deduce din prima judecată cu ajutorul celei de-a doua
judecăţi. Deci, pentru deducerea concluziei, silogismul foloseşte → adică implicaţia. Dacă
propoziţia F1 este întotdeauna adevărată şi IF F1 THEN F2 este întotdeauna adevărată, atunci F2
este întotdeauna adevărată (modus ponens).
Inferenţa este o operaţie prin care, pornind de la un număr finit de premize, se acceptă o
concluzie. Premizele şi concluzia reprezintă enunţuri adică formule care nu cuprind variabile
libere. Axioma este o propoziţie care nu trebuie demonstrată. Dacă premizele reprezintă axiome,
atunci procesul de inferenţiere se numeşte demonstraţie. În realizarea procesului de inferenţiere
(adică a succesiunii de raţionamente deductive, inductive sau mixte) într-un sistem expert se
folosesc silogismele (în forma prezentată mai sus) şi relaţiile de echivalenţă (tautologiile). Cele
mai utilizate relaţii de echivalenţă sunt:
• simetria: F1 OR F2 ↔ F2 OR F1 (adică propoziţia compusă F1 SAU F2 este echivalentă
cu propoziţia compusă F2 SAU F1), respectiv F1 AND F2 ↔ F2 AND F1 (adică propoziţia
compusă F1 ŞI F2 este echivalentă cu propoziţia compusă F2 ŞI F1);
• asociativitatea: (F1 OR F2) OR F3 ↔ F1 OR (F2 OR F3) (adică propoziţia compusă (F1
SAU F2) SAU F3 este echivalentă cu propoziţia compusă F1 SAU (F2 SAU F3)), respectiv (F1
AND F2) AND F3 ↔ F1 AND (F2 AND F3) (adică propoziţia compusă (F1 ŞI F2) ŞI F3 este
echivalentă cu propoziţia compusă F1 ŞI (F2 ŞI F3));
• reversibilitatea: NOT(NOT(F1)) ↔ F1 (adică propoziţia compusă NU(NU(F1)) este
echivalentă cu propoziţia simplă F1);
• relaţiile lui de Morgan: relaţia 1. NOT(F1 OR F2) ↔ NOT(F1) AND NOT(F2) (adică
propoziţia compusă NU(F1 SAU F2) este echivalentă cu propoziţia compusă NU(F1) ŞI
NU(F2)); relaţia 2. NOT(F1 AND F2) ↔ NOT(F1) OR NOT(F2) (adică propoziţia compusă
NU(F1 ŞI F2) este echivalentă cu propoziţia compusă NU(F1) SAU NU(F2));
• modus tolens: IF F1 THEN F2 ↔ NOT(F1) OR F2 (adică propoziţia compusă dacă F1
atunci F2 este echivalentă cu propoziţia compusă NU(F1) SAU F2).

2.3. Regulile de producţie

Prin reguli de producţie (în teoria limbajelor formale, denumirea iniţială a fost de reguli
de scriere) se înţeleg regulile de forma IF premize THEN concluzie, unde premizele şi concluzia
reprezintă fapte. Pornind de la calculul propoziţional, reprezentarea cunoştinţelor prin reguli de
producţie utilizează două tipuri de structuri - faptele şi regulile - ce cuprind, uzual, numai entităţi
invariabile (în caz contrar, reprezentarea cunoştinţelor se efectuează cu reguli de producţie cu
variabile). Dacă premizele unei reguli sunt adevărate (faptele componente sunt verificate de
baza de fapte), atunci şi faptele din concluzie sunt adevărate şi pot fi incluse în baza de fapte. Se
foloseşte modus ponens din logica formală (paragraful 2.2). Regulile de producţie sunt stocate în
baza de reguli. Ordinea de înregistrare a regulilor de producţie nu este importantă. Faptele care
descriu cunoştinţele comune ale domeniului de cunoaştere sunt fapte permanente (de exemplu,
în contabilitate, tipul de cont – de activ, de pasiv sau bifuncţional). Faptele specifice problemei
de rezolvat sunt fapte temporare şi sunt şterse după obţinerea concluziei pentru problemă.
Obţinerea concluziei poate reprezenta un succes (în această situaţie se oferă o soluţie pentru
problema de rezolvat) sau poate eşua.
Prin folosirea conectorilor logici pentru legarea faptelor ce compun regula de producţie,
se obţine următorul exemplu de regulă de producţie ce poate fi utilizată pentru dimensionarea
activităţii de producţie a unei întreprinderi (analiza diagnostic a valorii adăugate):
IF gradul de folosire a capacităţilor de producţie creşte
AND productivitatea muncii creşte
AND NOT(cheltuielile cu materialele la 1 leu producţie cresc)
THEN valoarea adăugată creşte.

Se menţionează că producţie din noţiunea de regulă de producţie nu trebuie echivalat cu


cuvântul producţie din exemplul ce conţine activitatea de producţie a unei întreprinderi.

5
Regulile de producţie cu variabile se folosesc atunci când în formularea regulilor se
folosesc variabile ce generalizează anumite situaţii concrete. De exemplu, la înregistrarea în
contabilitate, pentru un cont de pasiv C1, în raport cu contul C2, se poate folosi următoarea
regulă:

IF C1 este un cont de pasiv AND C1 reflectă C2 AND C2 creşte


THEN C1 se creditează.

Când variabila ce reprezintă o premiză capătă o valoare concretă, se spune că este


instanţiată. În exemplul de mai sus, se pot instanţia C1=401 şi C2=421.

2.4 Calculul predicatelor

Calculul predicatelor de ordinul întâi este denumit şi logica predicatelor de ordinul întâi
şi are la bază funcţia propoziţională a predicatului. Calculul predicatelor foloseşte declaraţii
logice ca modalitate de reprezentare a relaţiilor dintre obiecte. Predicatul (proprietatea)
desemnează propoziţiile simple cu un singur termen liber. De exemplu, în propoziţia „…este
economist”, subiectul lipseşte şi locul lui se poate completa cu mai multe valori diferite,
obţinându-se astfel mai multe propoziţii adevărate sau false. În spaţiul liber se poate dispune o
variabilă ce este folosită numai pentru subiect (ordinul întâi). În exemplul,
cont_de_activ(c), c este variabila ce permite substituirea cu orice cont de activ, iar în exemplul
cont_de_pasiv(p), p este variabila ce permite substituirea cu orice cont de pasiv.
În logică, relaţiile Rel reprezintă expresii cu două sau mai multe elemente libere, în care
se folosesc conectorii logici (AND, OR, NOT, ↔,→), cuantificatorul universal (∀, „pentru
orice”) şi cuantificatorul existenţial (∃, „există cel puţin o valoare”).
Formatul predicatului este compus din nume_identificator şi listă de argumente.
Argumentele unui predicat sunt argumente de bază (obligatorii) şi argumente opţionale.
Argumentele se introduc într-o anumită ordine. De exemplu, predicatul creditează(401,
100.000.000) are nume_identificator creditează şi argumentele 401 şi 100.000.000.
Dacă subiectul şi predicatul sunt reprezentate prin variabile, un exemplu de regulă cu
propoziţiile P1 şi P2 adevărate este următorul:

IF Rel este simetrică AND F1 Rel F2 THEN F2 Rel F1

Se observă că folosirea calculului predicatelor conduce la deducerea de noi fapte. De


exemplu, contul 401 este cont de pasiv dacă 401 este cont şi toate conturile sunt conturi de
pasiv se poate scrie astfel:

∀(p), cont(p) →cont_de_pasiv(p) AND cont(401) ⇒ cont_de_pasiv(401)

2.4 Baze de date deductive

Bazele de date deductive fac parte din categoria bazelor de date active adică acele baze
ce sunt caracterizate de comportamentul lor dinamic în raport cu schimbările ce survin în
interiorul acestora sau cu evenimentele ce se produc în afara acestora. Acest comportament
dinamic al bazelor de date active este descris de regulile eveniment – condiţie – acţiune (ECA).
Aceasta înseamnă că atunci când (when) un eveniment se produce, se testează o condiţie şi dacă
(if) aceasta este adevărată la evaluare, atunci (then) se execută o acţiune.
Bazele de date deductive sunt denumite şi baze de date inteligente sau baze de date
bazate pe logică şi sunt caracterizate de posibilitatea gestionării adaptive a datelor în
conformitate cu cerinţele utilizatorilor în luarea deciziilor economice. Bazele de date deductive
sunt baze mari de date ce sunt supuse analizei şi interpretării. Sistemul de gestiune aferent
acestor baze de date deductive cuprinde instrumente de realizare automată a raţionamentelor ce
sunt realizate prin programare logică. Aşa cum s-a arătat mai sus, programarea logică reprezintă
6
un tip de programare bazată pe raţionamente, în care programul este compus din fapte şi reguli
şi are ca rezultat concluzii.
Fundamentarea matematică a bazelor de date deductive este bazată pe universul
Herbrand, adică setul de simboluri de tip constantă din limbajul L, limbaj care nu conţine
simboluri funcţie, dar conţine cel puţin simboluri predicative. Baza Herbrand cuprinde
ansamblul faptelor posibile despre baza de date şi se constituie într-un sistem închis.
Bazele de date deductive utilizează, în principal, logica propoziţiilor de ordinul I, adică
acel limbaj formal ce conţine un alfabet, reguli de sintaxă, axiome şi o regulă de deducţie de
tipul când (when)...dacă (if)... atunci (then) ... Este de menţionat diferenţa esenţială dintre
regulile de producţie specifice sistemelor expert (premisă sau condiţie→concluzie) şi regulile
specifice sistemelor de gestiune a bazelor de date active (eveniment→condiţie →acţiune).
Bazele de date deductive prezintă două componente: componenta asociată modulului
relaţional (SGBDR pentru baza de fapte) şi componenta asociată modulului programării logice
(pentru realizarea interogărilor). Cuplarea dintre SGBDR şi modulul programării logice
(sistemul de raţionamente) poate să fie cuplare slabă (realizată numai în anumite momente de
timp) sau cuplare strânsă (interacţiune continuă, permanentă). Prin integrarea completă a
instrumentelor de realizare automată a raţionamentelor în cadrul SGBDR se obţine un sistem de
gestiune a bazelor de date deductive cu limbaj de descriere a datelor, limbaj de manipulare a
datelor şi limbaj de reguli. Pe baza limbajului Prolog şi a unei interfeţe specializate în lucrul cu
baze de date, s-a realizat limbajul Datalog. Limbajul Datalog este un limbaj declarativ orientat
pe programarea logică acceptat la limbaj standard destinat bazelor de date deductive. Un
program realizat în limbajul Datalog este o secvenţă cu definiţii de proprietăţi. Sintaxa
limbajului nu conţine predicate speciale şi utilizează logica propoziţiilor de ordinul I, fără
simboluri de funcţie.

3. SISTEME EXPERT CU REGULI DE PRODUCŢIE


3.1 Ciclul de bază al unui motor de inferenţe

Un motor de inferenţe al unui sistem expert cu reguli de producţie îndeplineşte


următoarele funcţii: declanşarea (activarea) regulilor; interogarea utilizatorului (întrebare);
adăugarea răspunsului utilizatorului în baza de fapte; inferarea unei noi fapte dintr-o regulă (ce
aparţine bazei de reguli); adăugarea faptei obţinute în procesul de inferenţiere în baza de fapte;
compararea faptelor din baza de fapte cu componentele corespunzătoare din reguli; atunci când
se realizează potrivirea faptelor din baza de fapte cu faptele din reguli, se produce declanşarea
regulilor; controlarea atingerii scopului (goal) prestabilit; declanşarea celui mai mic număr de
reguli ce sunt necesare pentru soluţionarea problemei de rezolvat.
Fiecare motor de inferenţe este fundamentat pe derularea unui ciclu de bază (cu patru
faze) care nu depinde de modul de raţionament: selecţia, filtrarea, rezolvarea conflictelor şi
execuţia. Selecţia (restricţia) asigură extragerea din baza de reguli a unui submulţimi (partiţie)
de reguli şi din baza de fapte a unei submulţimi (partiţie) de fapte, partiţii ce vor constitui
elementele ce caracterizează subdomeniul de rezolvare a problemei. Filtarea (pattern matching)
permite compararea părţii de premisă din regulile selectate cu faptele specifice problemei de
rezolvat, cu scopul de a determina o submulţime de reguli declanşabile, denumită submulţime de
conflict. Operaţia de comparare se poate termina cu succes (au rezultat una sau mai multe reguli
declanşabile) sau cu eşec (nu a rezultat nici o regulă declanşabilă). Rezolvarea conflictelor are
loc în situaţia existenţei unui rezultat al filtrării cu mai multe reguli declanşabile şi este necesar
să fie aleasă numai o regulă declanşabilă pentru a fi executată. Se poate opta pentru unul dintre
următoarele criterii de alegere a regulii declanşabile: prima regulă din listă, cea mai puţin
complexă regulă (cu cel mai mic număr de fapte în premisă), cea mai specifică regulă, cea mai
utilizată regulă. Execuţia asigură activarea regulii desemnate în faza precedentă ce are ca efect
adăugarea uneia sau mai multor fapte în baza de fapte. Pentru rezolvarea problemei, motorul de
inferenţe poate executa mai multe iteraţii ale ciclului de bază prezentat, oprirea având loc în
funcţie de metoda de inferenţă (raţionament) folosită.

7
3.2 Metode de inferenţă

Metodele de inferenţă (raţionament) ce pot fi folosite de motorul de inferenţă sunt


metoda deductivă (strategie de control înainte), metoda inductivă (strategie de control înapoi) şi
metoda mixtă.
Metoda deductivă (strategia de control înainte) permite motorului de inferenţe ca,
pornind de la fapte, să realizeze un anumit scop (goal), după următoarea succesiune de operaţii:
stabilirea datelor de intrare prin extragerea din baza de cunoştinţe a acelor reguli care prezintă în
partea de premise numai fapte specifice problemei de rezolvat; o regulă este declanşabilă dacă
premisa sa este adevărată (true); după rezolvarea conflictelor, se alege o singură regulă
declanşabilă care se va supune execuţiei.
Metoda inductivă (strategia de control înapoi) pleacă de la scopul problemei de rezolvat
şi conţine procese inductive de raţionament prin care se găsesc faptele care satisfac scopul
stabilit, în următoarea succesiune: se stabileşte fapta particulară ce îndeplineşte calitatea de scop
(goal); se analizează dacă regulile supuse selecţiei prezintă în partea de concluzii scopul stabilit;
premisele acestor reguli reprezintă subscopuri care se supun demonstraţiei; procesul se repetă
până când toate subscopurile puse în evidenţă sunt demonstrate (se obţin reguli declanşabile); în
caz contrar, când nu se obţine nici o regulă declanşabilă, se înregistrează situaţia de eşec.
Metoda mixtă combină cele două strategii de control de mai sus, cu scopul de a folosi
avantajele fiecăreia dintre aceste metode de inferenţă.

3.3.Baza de cunoştinţe

În domeniul economic, problema de rezolvat cu ajutorul sistemului expert este adecvată


dacă îndeplineşte mai multe condiţii: problema este posibilă, potrivită şi justificabilă
(profitabilă); natura problemei presupune manipulări simbolice şi euristici; problema este
complexă şi dificilă; scopul problemei serveşte unei utilităţi imediate şi de perspectivă. Alegerea
unui instrument de dezvoltare a sistemului expert este funcţie de problemă, resursele alocate,
timpul la dispoziţie şi iscusinţa şi experienţa cogniticianului. Cogniticianul are responsabilitatea
fundamentală de a realiza achiziţia şi organizarea cunoaşterii, obţinând astfel baza de cunoştinţe.
Achiziţia cunoaşterii reprezintă procesul de colectare, structurare şi organizare a
cunoaşterii, folosind una sau mai multe surse (experţi umani, documente etc), cu scopul de a
obţine stocarea acesteia în baza de cunoştinţe a sistemului expert pentru folosirea ulterioară în
rezolvarea problemelor. Achiziţia cunoaşterii se realizează în cinci faze: identificarea
caracteristicilor problemei de rezolvat (rezultă cerinţele problemei de rezolvat),
conceptualizarea (formularea conceptelor care fac obiectul reprezentării cunoaşterii),
formalizarea (proiectarea structurii şi organizarea cunoaşterii), implementarea (formularea
regulilor în cazul sistemelor expert cu reguli de producţie) şi testarea (validarea şi testarea bazei
de cunoştinţe). De la o fază la alta se pot realiza, când este cazul, prin reluare, reidentificarea,
reconceptualizarea (reformularea), reproiectarea, rafinarea regulilor şi retestarea bazei de
cunoştinţe.
Colectarea cunoaşterii (elicitation of knowledge) se obţine prin metode manuale
(interviul, analiza de caz, brainstorming-ul, prototipizarea, comentariile etc.), metode
semiautomate (asistate de calculator) şi metode automate.
Dintre metodele uzuale conduse de cognitician pentru achiziţia cunoaşterii se
menţionează analiza protocoalelor. Protocolul, în această metodă, reprezintă o înregistrare sau o
documentare executată secvenţial în timpul rezolvării problemei, care se referă la expertul
uman. Analiza protocoalelor conţine următoarele operaţii: evidenţierea detaliată de către
expertul uman a cunoaşterii implicată de fiecare acţiune; comentarea de către expertul uman a
fiecărei operaţii în scopul înregistrării audio-video; elaborarea frazelor şi enunţurilor de către
expertul uman şi scrierea acestora în protocol; construirea regulilor de producţie pe baza frazelor
şi enunţurilor selectate ca relevante şi rescrise de către cognitician; elaborarea de către
cognitician a modelelor bazei de cunoştinţe cu folosirea regulilor de producţie.

8
Dintre metodele conduse de expertul uman (manuale şi semiautomate) se menţionează
metoda manuală autoraportul expertului ce prezintă toate conceptele şi relaţiile de nivel înalt cu
privire la problema de rezolvat şi metodele asistate de calculator care au, mai întâi, ca rezultat,
un model iniţial al bazei de cunoştinţe. Modelul iniţial al bazei de cunoştinţe se obţine prin
intermediul unor tehnici de modelare vizuală după care, prin rafinare, se realizează baza de
cunoştinţe finală.
Cea mai mare parte a instrumentelor inteligente de achiziţie a cunoaşterii (ETS,
KRITON, AUTOINTELLIGENCE, AQUINAS etc.) au la bază metoda RGA (Repertory Grid
Analysis) fundamentată pe premisa că, de cele mai multe ori, experienţa are la bază percepţia şi
mai puţin intuiţia. Ca urmare, cunoaşterea şi percepţiile asupra domeniului specific expertului
uman sunt clarificate şi organizate într-un model conceptual personal, în următoarea succesiune:
identificarea de către expertul uman a obiectelor relevante din domeniul de expertiză;
identificarea de către expertul uman a atributelor importante în procesul de luare a deciziei;
însoţirea fiecărui atribut cu o schemă binară (caracteristici – opusul acestor caracteristici);
completarea (şi apoi rafinarea) unei scale de la 1 la 3 sau de la 1 la 5 cu răspunsurile la
întrebarea: „Ce caracteristici şi atribute diferenţiază două obiecte de un al treilea?”.
Organizarea cunoaşterii se referă la metoda de reprezentare a cunoştinţelor (reguli de
producţie, de exemplu), verificarea cunoaşterii (asigurarea corectitudinii bazei de cunoştinţe) şi
validarea procesului de inferenţiere (se execută, periodic, pe timpul testării sistemului expert).
Baza de cunoştinţe este actualizată şi întreţinută permanent, prin adăugare de noi
cunoştinţe, cu o atentă monitorizare a nivelului de performanţă a sistemului expert.

3.4 Interfaţa cu utilizatorul

Interfaţa cu utilizatorul asigură dialogul utilizatorului cu sistemul expert, pentru


introducerea datelor de intrare şi afişarea rezultatelor pentru problema de rezolvat. Dialogul
utilizatorului cu sistemul expert reprezintă un proces ciclic compus din următoarele elemente:
acţiunile utilizatorului pe durata unei sesiuni de lucru (alegere opţiuni de lucru, lansare comenzi,
răspunsuri la întrebările pe care i le adresează sistemul expert etc.).; documentarea şi instruirea
utilizatorului cu privire la utilizarea sistemul expert (help); elementele de prezentare a
sistemului expert (meniuri, ferestre, text, icon-uri, grafică etc.).; interacţiunea utilizatorului cu
sistemul expert; inferfaţa cu utilizatorul (componentele hard şi soft care asigură dialogul
utilizator – sistem expert).
De regulă, interfaţa cu utilizatorul este realizată cu ajutorul ecranului, tastaturii şi mouse-
ului şi este bazată pe meniu şi ferestre multiple. Ferestrele se pot suprapune una peste alta şi
includ informaţii diverse. Controlul meniului şi ferestrelor se asigură prin combinaţii de taste sau
cu mouse-ul. Sunt realizate şi interfeţe de tipul întrebare-răspuns, orientate pe icon-uri sau
bazate pe limbaje de comandă ce folosesc tehnologii informatice ca GUI (Graphical User
Interface), multimedia, VIM (Visual Interactive Modeling) sau hipertext.
Modelele utilizate pentru proiectarea interfeţelor cu utilizatorul sunt modelul
proiectantului, modelul sistemului şi modelul utilizatorului.

4. LIMBAJUL DE PROGRAMARE TURBO PROLOG


4.1. Mediul Turbo Prolog

Limbajul Prolog este un limbaj de nivel înalt. Numele limbajului PROLOG (limbaj din
generaţia a cincea) provine din PROgramarea LOGică (în engleză, PROgramming in LOGic).
Prin programare logică (programare de raţionamente) se înţelege realizarea unui program care
este format din fapte şi relaţii (relaţii logice între mulţimi de date) din care se obţin concluzii.
Un program Prolog reprezintă o colecţie de fapte şi reguli.
Mediul Turbo Prolog asigură o interfaţă de lucru pentru realizarea sistemelor expert cu
ajutorul limbajului de programare Prolog.

9
Turbo Prolog reprezintă un mediu de dezvoltare ce aparţine companiei Borland. Pagina
de primire conţine patru ferestre: de editare a programelor (Edit), de dialog pentru realizarea
intrărilor şi ieşirilor din program (Dialog), de afişare a mesajelor sistemului de calcul (Message)
şi de depanare a programelor (Trace).
Accesul la meniul principal se efectuează cu tasta F10 sau Alt şi litera de început a unei
opţiuni. Meniurile mediului Prolog sunt următoarele:
Meniul Files are următoarea compunere: Load – încarcă un fişier (F3); Pick – Selectează
un fişier; New File – Fişier nou (fişier nou implicit WORK.PRO); Save – salvează fişierul
curent; Write to – salvează fişierul curent, eventual cu un alt nume; Directory – afişează un
director (folder); Change dir- modifică un director; OS Shell – trecere în sistemul de operare
DOS (Alt-D); Quit – ieşirea din mediul Prolog (Alt-X).
Meniul Compile prezintă următoarele opţiuni: Memory – compilare în memorie care nu
are ca rezultat obţinerea de fişiere .OBJ; OBJ File – compilare pe un suport magnetic care are ca
rezultat obţinerea de fişiere .OBJ; EXE file (auto link) – editarea de legături (link-editarea) cu
obţinerea formei executabile a programului; Project (all modules) – realizarea unui proiect care
are în compunere toate modulele necesare şi modului standard de iniţializare INIT; Link only –
realizează link-editarea unui .OBJ sau a unui proiect .PRJ.
Meniul Options dispune de opţiunile: Link options – opţiuni pentru link-editare prin
specificarea unor biblioteci utilizator; Edit PRJ file – asigură editarea unui fişier .PRJ; Compiler
directives – realizează directivele compilator din program sau din meniu, astfel:
Memory allocation – alocarea memoriei prin care se stabileşte mărimea codului, stack-ului,
trail-ului şi heap-ului;
Run-time check – precizează elementele ce trebuie verificate în timpul execuţiei
programului (break check; stack check; integer overflow check);
Error level – nivelul de eroare, cu valoarea implicită 1;
Non-determ warning- avertizarea pentru nedeterminări (On/Off);
Variable used once warning – variabilă folosită pe timpul avertizării (On/Off);
Printer menu in EXE-file – meniul imprimantei pentru fişierele de tip .EXE (On/Off);
Trace – urmărire (On/Off);
Diagnostics – diagnosticări (On/Off).
Meniul Setup asigură posibilitatea reconfigurării sistemului de calcul, astfel: Colors –
culori; Window size – dimensiunea ferestrei; Directories – directoare; Miscellaneous – setări
diverse ce se referă la specificarea driver-ului, încărcarea automată a mesajelor, rezoluţia
ecranului, redefinirea cheilor funcţionale, definirea help-ului; Load SYS file – încărcarea
fişierului SYS; Save SYS file – salvarea fişierului SYS. Cheile funcţionale, singure sau în
combinaţie (hot keys), au semnificaţia prezentată în tabelul 4.1.

4.2. Secţiunile programelor în limbajul Prolog

Un program realizat în limbajul Prolog conţine următoarele secţiuni de bază: domains


(domenii), predicates (predicate), goal, (scopuri), clauses (clauze), constants (constante) şi
database (bază de date), aşa cum se prezintă în fig.4.1.
Secţiunea domains (domenii) serveşte pentru definirea tipurilor de date definite de
utilizator şi specifice argumentelor. Tipurile de date standard sunt char (caracter scris între
apostroafe), integer (numere întregi), real (numere reale), string (şir de caractere scris între
apostroafe duble) şi symbol (şir de litere, cifre şi caractere underscore, în care primul caracter
este o literă mică). Tipurile de date standard nu se declară în secţiunea domains. Domeniile de
valori pentru tipurile de date standard sunt prezentate în tabelul 4.1. Secţiunea domains se poate
declara globală (global domanins). Un domeniu compus defineşte o structură de date, reunind
mai multe elemente sub un nume unic. Un domeniu compus are sintaxa generală:
nume_domeniu = functor (e1, e2, …, en); functor 2(e1, e2, …, en); …, unde functor reprezintă
numele atribuit structurii respective de către utilizator. Elementele ei ale unui domeniu compus
pot fi, la rândul lor, domenii compuse.

10
Nr. Categoria Semnificaţia Semnificaţia Combinaţie Combinaţie
crt. în engleză în română 1 2
1. Deplasarea Line up Linie în sus ^X Ctrl - E
2. cursorului Line down Linie în jos ^Y Ctrl - X
3. Left Stânga ^[ Ctrl - S
4. Right Dreapta - Ctrl - D
5. Word left Cuvânt stânga Ctrl-^[ Ctrl - A
6. Word right Cuvânt dreapta Ctrl-^Z Ctrl - F
7. Start of line Început linie Home Ctrl – Q,Ctrl-S
8. End of line Sfârşit linie End Ctrl – Q,Ctrl-D
9. Start of page Început pagină Ctrl-Home -
10. End of pag Sfârşit pagină Ctrl-End -
11. Scroll up Defilare în sus Ctrl-W -
12. Scroll down Defilare în jos Ctrl-Z -
13. Page up Pagină în sus PgUp Ctrl-R
14. Page down Pagină în jos PgDn Ctrl-C
15. Start of text Început text Ctrl-PgUp Ctrl – Q,Ctrl-R
16. End of text Sfârşit text Ctrl-PgDn Ctrl – Q,Ctrl-C
17. Previous position Poziţia anterioară Ctrl – Q,Ctrl-P
18. Goto line Salt la linia Ctrl-F2 Ctrl – Q,Ctrl-L
19. Goto position Salt la poziţia Shift-F2 -
20. Insert& Insert new line Inserare linie nouă - Ctrl - N
21. Delete Backspace Şterge un caracter Ctrl - H -
înapoi
22. Delete character Şterge un caracter Del Ctrl - G
înainte
23. Delete word Şterge cuvânt - Ctrl - T
24. Delete to start of Şterge de la - Ctrl – Q,Ctrl -
line începutul liniei până T
în poziţia curentă
25. Delete to end of Şterge din poziţia - Ctrl – Q,Ctrl -
line curentă până la Y
sfârşitul liniei
26. Delete line Şterge linia curentă Ctrl-BackSpace Ctrl - Y
27. Compile & Compile to Compilare în F9
Run memory memorie
28. Compile to OBJ Compilare în OBJ Shift – F9
29. Compile to EXE Compilare în EXE Ctrl – F
30. Compile Project Compilare proiect Alt – F9
31. Run program Rulare program Alt - R

Tabelul 4.1 Semnificaţia cheilor funcţionale

11
Nr. Categoria Semnificaţia Semnificaţia Combinaţie 1 Combinaţie
crt. în engleză în română 2
32. Funcţii Copy block Copiere bloc Ctrl – F5
33. pentru Copy block again Repetare copiere bloc Shift – F5
34. blocuri de Copy block to prn Imprimare bloc Alt – F8
35. caractere Copy block to file Scriere bloc în fişier Alt – F5
36. Copy block from file Scriere bloc din fişier F7
37. Move block (bl) Deplasare bloc Alt – F6
38. Delete block Ştergere bloc Alt – F7
39. Undo delete block Anulare ştergere bloc Ctrl – F7 Ctrl-K,Ctrl-U
40. Change case for a bl Modificare bloc Ctrl-F6
41. Search Căutare Ctrl – F3
42. Search again Repetare căutare Shift – F3
43. Replace Înlocuire F4
44. Replace again Repetare înlocuire Shift – F4
45. Funcţii Resize window Redim. fereastră Shift – F10
46. globale Zoom window Lupă fereastră F5
47. View windows Vizualizare fereastră F6
48. Previous line Linia precedentă F8
49. File mask Mască fişier F4
50. Call editor in GOAL Apel editor în GOAL Ctrl - E
51. Terminate input Terminare intrare F10
52. Hot Keys Load file Încărcare fişier F3
53. Save file Salvare fişier F2
54. Pick file Alt – F3
55. Activate Files Activare fişiere Alt - F
56. Activate OS Activare S.O. Alt - D
57. Activate Options Activare opţiuni Alt - O
58. Activate Compile Activare compilare Alt - C
59. Activate Setup Activare Setup Alt - S
60. Display Hot keys Afişare taste „calde” Alt - H
61. Quit Prolog Părăsire Prolog Alt - X
62. Diverse Help menu Meniu de ajutor F1
63. Show help file Afişare fişier ajutor Shift – F1
64. Auto indentation Auto-indentare Alt - I Ctrl-Q,Ctrl-I
65. Insert mode Modul inserare Ins Ctrl - V
66. Text mode Modul text Ctrl-Q,Ctrl-W
67. Lower case word Litere minuscule Ctrl-B,Ctrl-L
68. Upper case word Litere majuscule Ctrl-B,Ctrl-U
69. Reverse case word Inversare litere Ctrl-B,Ctrl-R
70. Exit editor Ieşire editor F10 Ctrl-K,Ctrl-D

Tabelul 4.1 Semnificaţia cheilor funcţionale (continuare)

12
definirea tipurilor de date

şabloane pentru predicatele din clauze

definirea scopurilor interne

ansamblul regulilor şi faptelor

declararea constantelor simbolice

bază de date internă ce poate fi supusă


operaţiilor de adăugare, modificare sau ştergere

Fig.4.1 Structura programelor în limbajul Prolog


Nr.crt Tipul de date Domeniul de valori
1. char caracter
2. integer între -32768 şi +32768
3. real între 10-307 şi 10+308
4. string maximum 255 de caractere
5. symbol şir de litere, cifre şi caractere underscore

Tabelul 4.2 Tipurile de date din limbajul Prolog

În continuare se prezintă un exemplu de secţiune domains:

domains
denumire_material, denumire_furnizor=string
cod_material=integer
cantitate, pret_unitar=real
materiale=material(cod_material, denumire_material, cantitate,
pret_unitar)

Secţiunea predicates (predicate) este destinată pentru crearea şabloanelor predicatelor


definite de către utilizator şi folosite în secţiunea clauze. În şablon este precizat numele
predicatului (şir de litere, cifre şi underscore ce începe obligatoriu cu o literă mică şi are
lungimea maximă de 250 de caractere) şi tipul fiecăruia dintre argumente (tip standard sau tip
definit de utilizator), al căror număr şi ordine contează. Forma sintactică generală a unui predicat
este următoarea:

13
nume_predicat(tip_argument_1, tip_argument_2, …,tip_argument_m).

Predicatele pot fi predefinite (instrucţiuni Prolog ca read(), write(), assert()) sau definite
de către utilizator (exemple: client, autoturism, extrage_maxim). Predicatele predefinite nu se
declară în secţiunea predicates.
Argumentele predicatului pot fi constante, variabile sau structuri.
Un predicat poate avea aritate (numărul de argumente) multiplă. Pot exista predicate cu
acelaşi nume şi cu arităţi diferite. În acest caz, aceste predicate se declară sub formă grupată,
atât în secţiunea predicates cât şi în secţiunea clauses.
Secţiunea predicates se poate declara globală (global predicates).
Exemplul de secţiune predicates scoate în evidenţă diverse şabloane în care tipurile de
predicate sunt definite de utilizator, iar tipurile de argumente sunt standard (integer, real) sau
definite de utilizator (lista, nume_client, localitate etc.):

predicates
sort(lista, lista)
extrage_maxim(lista, real, lista)
autoturism(marca, tip, culoare, cap_cilindrica, viteza_max)
client(nume_client, localitate, strada, integer, cod_fiscal)

Secţiunea goal (scopuri) poate apare în program – scopuri interne, după secţiunea
predicates (problemă şi soluţie unice) sau sub formă interactivă de prompter (varianta
interpretor) ce aşteaptă introducerea unei clauze (grup de clauze) – scopuri externe. Secţiunea
goal prezintă scopurile interne sub forma unei succesiuni de clauze ce cuprind predicate
standard şi predicate definite de către utilizator şi se încheie cu punct:

goal
apreciere_licitatie.

Evaluarea fiecărei clauze conduce la un rezultat de tip booleean (logic), cu confirmare


(clauza este adevărată, Yes) sau negare (clauza este falsă, No).
Secţiunea clauses (clauze) cuprinde regulile şi faptele ce formează programul.
Argumentele fiecărei clauze sunt de un anumit tip şi sunt dispuse într-o ordine prestabilită. O
clauză care este apelată în corpul propriei sale definiţii este denumită clauză recursivă.
Problematica regulilor şi faptelor a fost prezentată în capitolul 2. Exemplul următor este legat
de cel prezentat la secţiunea predicates:

clauses
sort(l1, l1)
extrage_maxim(l1, 4.2, l1)
autoturism(Dacia, Logan, albastru, 1500, 240)
client(Ionescu Ion, Bucuresti, Unirii, 142, R12300211)

Secţiunea constants (constante) este folosită pentru declararea constantelor simbolice, cu


sintaxa generală:
nume_constanta=valoare. /*unde nume_constanta este unică în program şi poate fi scris
cu litere mici sau mari, iar valoare poate fi orice tip de dată, inclusiv valoarea unei expresii*/.
În sintaxa generală de mai sus, textul cuprins între caracterele /* şi */ reprezintă un
comentariu (se foloseşte oriunde în program pentru îmbunătăţirea lizibilităţii acestuia). Dacă o
constantă este declarată, ea poate fi utilizată după aceasta în program.
În exemplele următoare, se observă varietatea tipurilor de date (standard şi definite de
utilizator) ce se pot folosi în secţiunea constants.

14
constants
nume_patron=”Ionescu Ion” /*sir de caractere*/
numar_salariati=150 /* numar intreg */
cost_unitar=3200/200 /*expresie reprezentand */
/*total_cheltuieli / cant_produse_obtinute */
cota_TVA=0.18 /* numar real */
culoare=galben_48 /* simbol*/
r=’y’ /* tip caracter */

Secţiunea database (bază de date) este folosită pentru declararea şi utilizarea faptelor
(sub formă de bază de date internă) ce trebuie prelucrate (adăugate, modificate sau şterse) în
timpul execuţiei unui program. Fiecare bază de date internă utilizată se declară într-o altă
secţiune database, prin specificarea predicatelor:
database
nume_predicat_1(argument_1,argument_2,…,argument_m)
nume_predicat_2(argument_1,argument_2,…,argument_m)

nume_predicat_n (argument_1,argument_2,…,argument_m)

În afara secţiunii goal, secţiunile programului în limbajului Prolog pot fi utilizate de mai
multe ori în cadrul aceluiaşi program. Ca urmare, un program în limbajul Prolog poate fi alcătuit
din mai multe module (astfel încât fiecare modul conţine secţiunile domains, predicates,
clauses, constants).

4.3. Prelucrări

Un program Prolog poate fi structurat pe module, fiecare modul având propriile secţiuni.
Evaluarea unei clauze Prolog are ca urmare obţinerea unui rezultat de tipul Yes sau No. Prin
negaţie (Not), rezultatul obţinut la evaluarea unei clauze este inversat. Întreruperea unui
program poate fi realizată cu break. Ieşirea forţată din program se face cu exit.
Când un program Prolog asigură o singură soluţie, acest program este determinist (altfel,
programul este nedeterminist). Un program Prolog este forrţat să fie determinist cu ajutorul
predicatului fail (false la returnare, cu eşuarea regulii în care apare).
Predicatul fail porneşte backtracking-ul (revenirea pe o altă ramură a arborelui de
căutare atunci când la capătul ramurii curente nu se găseşte ceea ce se caută) care reprezintă
capacitatea sistemului expert de a încerca soluţii alternative în încercarea de a găsi răspunsul la
întrebare. Predicatul cut împiedică realizarea backtracking-ului.
Ciclurile pot fi simulate prin folosirea predicatului fail sau prin recursivitate (capacitatea
unei rutine de a se autoapela).
Expresiile de calcul şi comparaţiile pot fi introduse în premisele unei reguli Prolog.
Introducerea datelor se realizează cu predicatele readln, readchar, readint, readreal,
readterm, file_str, keypressed, unreadchar.
Prelucrarea şirurilor de caractere se obţine cu predicatele concat, str_len, format,
isname, frontchar, fronttoken, frontstr. Conversiile de tip se fac cu predicatele str_int,
str_real, char_int, str_char, upper_lower.
Afişarea datelor se obţine cu predicatele write, writef şi nl.

15
4.4 Aplicaţii economice în limbajul Prolog

1. Se cere să se realizeze un program în limbajul Prolog care să asigure introducerea


datelor de la tastatură referitoare la un client bancar.

/* CLIENT BANCAR */
domains
adresa,nume,firma=string
telefon=symbol
client=cl(nume,adresa,telefon,firma)
predicates
introdu_client(client)
ruleaza
clauses
introdu_client(Cl(Nume,Adresa,Telefon,Firma)):-
write("Care este numele clientului?"),readln(Nume),
write("Care este adresa clientului?"),readln(Adresa),
write("Care este telefonul clientului?"),readln(Telefon),
write("Care este firma clientului?"),readln(Firma).
ruleaza:-introdu_client(Cl(Nume,Adresa,Telefon,Firma)),nl,
write(“----------------------“),nl,write(Cl),nl,nl,nl.

Structura client reprezintă o structură a utilizatorului. Fiecare element al structurii client


este introdus interactiv, de la tastatură, prin intermediul predicatului readln care asigură citirea
unei linii de text. Tipul de dată astfel introdus este string (Telefon) sau symbol (Adresa, Nume,
Firma). Se face menţiunea că limbajul Prolog face deosebirea între literele majuscule şi literele
miniscule (de exemplu, nume şi Nume sunt diferite). Numerele de variabilă trebuie să înceapă cu
o literă majusculă sau cu simbolul “_”. Predicatul predefinit write asigură afişarea datelor pe
ecran, iar predicatul predefinit nl (new line) permite trecerea la linia următoare pe ecran.
Predicatul definit de utilizator introdu_client asigură introducerea datelor referitoare la clientul
bancar, iar predicatul definit de utilizator ruleaza se constituie în comanda de rulare a
programului şi se introduce la scop (Goal).

2. Se cere să se scrie un program în limbajul Prolog care să definească patronatul unei


firme date, cunoscând datele despre firmă (denumire şi tip de firmă) şi despre cei doi asociaţi
(nume şi denumire firmă).

/* PATRONAT FIRME */
domains
nume,den,tip=symbol
predicates
firma(den,tip)
asociat1(nume,den)
asociat2(nume,den)
patronat(nume,nume,den)
clauses
firma(astra,sa).
firma(aspera,srl).
firma(confort,srl).
firma(aerobic,srl).
firma(contact,sa).
asociat1(ionescu,astra).
asociat1(ionescu,confort).
asociat1(popescu,aspera).

16
asociat1(popescu,aerobic).
asociat1(georgescu,contact).
asociat2(cristescu, confort).
asociat2(matei,aerobic).
asociat2(gheorghe,astra).
asociat2(bundea,astra).
patronat(X,Y,Z):-asociat1(X,Z) and asociat2(Y,Z).

În mod interactiv, utilizatorul introduce întrebări în fereastra de dialog, la apariţia


prompterului Goal. Întrebarea este adresată sub forma unei clauze sau a unui grup de clauze
legate cu ajutorul conectorilor logici and sau or. La găsirea uneia sau mai multor soluţii, acestea
sunt afişate, ca răspuns la întrebare, în fereastra de dialog. Atunci când nu se găseşte nici o
soluţie, în fereastra de dialog se afişează mesajul No Solutions. Deoarece scopurile (Goal) sunt
specificate de la tastatură în timpul execuţiei programului, ele sunt scopuri externe.
Întrebarea „Care este patronatul firmei aerobic?” se introduce astfel: Goal:
patronat(A,B,aerobic), iar răspunsul la aceasă întrebare arată astfel: A=popescu, B=matei, 1
Solution. La întrebarea „Care este patronatul firmei astra?”, Goal: patronat(A,B,astra),
răspunsul este: A=ionescu, B=gheorghe, A=ionescu, B=bundea, 2 Solutions. La întrebarea
„Care este patronatul firmei contact?”, Goal: patronat(A,B,contact), răspunsul este: No
Solutions. La întrebarea „Care sunt firmele de tip srl?”, Goal: firma(A,srl), răspunsul este:
A=aspera, A=confort, A=aerobic, 3 Solutions. La întrebarea „La ce firme este asociat
ionescu?”, Goal: asociat1(ionescu,A) or associat2(ionescu,B) răspunsul este: A=astra,
B=confort, 2 Solutions.

5. PROIECTAREA ŞI REALIZAREA SISTEMELOR EXPERT


5.1. Ciclul de viaţă a sistemelor expert

Ciclul de viaţă a unui sistem expert (ca a oricărui produs-program sau aplicaţie
informatică) reprezintă perioada cuprinsă între momentul apariţei conceptului şi momentul
scoaterii sistemului din exploatare. Ciclul de viaţă al unui sistem expert este compus din
următoarele etape: analiza preliminară (definirea activităţii care va face obiectul sistemului
expert şi selectarea instrumentelor informatice), modelarea conceptuală (definirea structurii
conceptuale a cunoştinţelor folosite de către expertul uman în domeniul specific care constituie
obiectul sistemului expert), colectarea cunoştinţelor (cunoştinţele se vor utiliza pentru
construirea modelelor conceptuale şi pentru realizarea bazei de cunoştinţe), reprezentarea
cunoştinţelor (formalizarea şi reprezentarea cunoştinţelor în structura necesară pentru stocarea în
baza de cunoştinţe a sistemului expert), validarea sistemului (verificarea şi confirmarea
utilizabilităţii sistemului expert în domeniul specific) şi introducerea în exploatare şi menţinerea
în funcţiune (realizarea etapei operaţionale).

5.2. Metode de modelare a sistemelor expert

S-au pus la punct mai multe metode de modelare a sistemelor cu baze de cunoştinţe din
care fac parte şi sistemele expert: metoda KADS, metoda COGNITECH, metoda KOD. Aceste
metode preiau o parte din metodologia Merise şi cea orientată pe obiecte.
Metoda KADS (Knowledge Acquisition and Design System) a Comunităţii Europene
diferenţiază descrierea domeniului de descrierea raţionamentelor, foloseşte modele (task-uri)
generice (atelierul SHELLEY) şi conţine următoarele opt etape: studiul iniţial de definire a
problemei de rezolvat (analiza preliminară), analiza de sistem (restricţii, sarcini de expertiză şi
scenarii de folosire), modelarea (realizarea unui model conceptual al expertizei, după care sunt
descrise modelul funcţional, modelul logic şi modelul fizic; se foloseşte un set de primitive de
modelare ce sunt structurate pe patru nivele: nivelul domeniu – descrierea obiectelor, atributelor
şi a relaţiilor dintre acestea; nivelul inferenţă – descrierea primitivelor de inferenţă ce sunt

17
utilizate pentru rezolvarea problemei; nivelul activitate – descrierea scopurilor şi a structurii de
inferenţă; nivelul strategie – descrierea planului general de rezolvare a problemei şi a
cunoştinţelor necesare), implementarea (programarea), testarea (validarea), încărcarea bazelor
de cunoştinţe, interogarea bazelor de cunoştinţe şi întreţinerea sistemului expert. Este utilizată o
ierarhie de modele care se rafinează până la obţinerea formei finale a sistemului expert.
Metoda COGNITECH asigură dezvoltarea sistemelor expert prin intermediul
prototipurilor şi conţine următoarele trei etape: construirea unei machete iniţiale (demonstrator)
cu scopul de evaluare a fezabilităţii sistemului expert; construirea unui prototip de test;
introducerea în exploatare a prototipului testat.
Metoda KOD (Knowledge Oriented Design), metodă structurată dezvoltată în Franţa,
acoperă faza de analiză a domeniului specific sistemului expert, faza de construire a modelului
expertizei şi faza de elaborare a specificaţiei de realizare a sistemului expert. Modelul de
specificare a metodei KOD conţine trei nivele: nivelul static (descrierea obiectelor, percepute şi
gestionate de expert), nivelul dinamic (nivelul acţiunilor ce sunt aplicate asupra obiectelor) şi
nivelul tematic (asigură prin declaraţii succesiunea de transformări de stare asupra domeniului).

5.3 Medii şi instrumente de dezvoltare a sistemelor expert

Mediile şi instrumentele de dezvoltare a sistemelor expert poartă diferite denumiri


comerciale: medii integrate (integrated environments), generatoarede sisteme expert (shells) sau
instrumente de dezvoltare (tools). Clasificarea mediilor şi instrumentelor de dezvoltare a
sistemelor expert este următoarea: limbaje de programare (Prolog, LISP); instrumente de suport
în dezvoltare (AGE, TEIRESIAS, ROGET etc.); generatoare de sisteme expert (VP-Expert, H-
Expert, EXSYS Professional, Level 5, CLIPS, GURU, KES, AES, SYNTEL, ESE-IBM,
Nexpert, ADS, IMPACT, TIMM etc.); medii hibride (KBMS, ART, Personal Consultant Plus,
KEE etc.); medii specifice (software package).

Întrebări de autocontrol

1. Care sunt abordările inteligenţei artificiale?


2. Cum se defineşte o problemă dificil de rezolvat?
3. Ce este un sistem expert?
4. Care sunt caracteristicile unui sistem expert?
5. Care sunt principalele tipuri de sisteme expert folosite în domeniul economic?
6. Care este structura unui sistem expert?
7. Care sunt criteriile de clasificare a metodelor de reprezentare a cunoştinţelor?
8. Prezentaţi principiile calculului propoziţional.
9. Ce este formula de calcul propoziţional?
10. Ce este un silogism?
11. Ce este inferenţa?
12. Care sunt relaţiile de echivalenţă?
13. Ce sunt regulile de producţie?
14. Prezentaţi elementele de bază ale calculului predicatelor?
15. Ce sunt bazele de date deductive?
16. Care sunt funcţiile unui motor de inferenţă?
17. În ce constă ciclul de bază al unui motor de inferenţă?
18. Descrieţi pe scurt metodele de inferenţă.
19. Care sunt fazele procesului de achiziţie a cunoaşterii?
20. Cum se realizează colectarea cunoaşterii?
21. Ce conţine o bază de cunoştinţe?
22. Care sunt caracteristicile mediului Turbo Prolog?
23. Descrieţi secţiunile unui program în mediul Prolog.
24. Care sunt tipurile de date utilizate în limbajul Prolog?

18
25. Care sunt predicatele pentru introducerea datelor în limbajul Prolog?
26. Care sunt predicatele pentru prelucrarea şirurilor de caractere în limbajul Prolog?
27. Care sunt predicatele pentru afişarea datelor în limbajul Prolog?
28. Care sunt etapele ciclului de viaţă a sistemelor expert?
29. Descrieţi pe scurt principalele metode de modelare a sistemelor expert.
30. Daţi exemple de medii şi instrumente de dezvoltare a sistemelor expert.

Teste grilă (exemple)


Notă: La examen se vor da teste grilă asemănătoare.

1. Precizaţi destinaţia secţiunilor de bază ale unui program în limbajul Prolog, prin indicarea
corespondenţei între denumirea secţiunii (A…F) şi enunţul destinaţiei (1…6):

A. domains 1. bază de date internă ce poate fi supusă operaţiilor


de adăugare, modificare sau ştergere
B. predicates 2. definirea scopurilor interne
C. goal 3. definirea tipurilor de date
D clauses 4. şabloane pentru predicatele din clauze
E. constants 5. declararea constantelor simbolice
F. database 6. ansamblul regulilor şi faptelor

2. Care dintre următoarele tipuri de date nu este specifică limbajului Prolog?

a) char d) string
b) symbol e) integer
c) text f) real

3. Achiziţia cunoaşterii se realizează în mai multe faze. Care dintre fazele de mai jos nu este
caracteristică procesului de achiziţie a cunoaşterii?

a) regularizarea d) identificarea
b) conceptualizarea e) formalizarea
c) implementarea f) testarea

4. Răspundeţi cu ADEVĂRAT (True) sau FALS (False):


Inferenţa este o operaţie prin care, pornind de la un număr finit de premize, se
acceptă o concluzie.

5. Răspundeţi cu DA(Yes) sau NU (No):


Achiziţia cunoaşterii reprezintă procesul de colectare, structurare şi organizare a
cunoaşterii, folosind una sau mai multe surse (experţi umani, documente etc), cu scopul de
a obţine stocarea acesteia în baza de cunoştinţe a sistemului expert pentru folosirea
ulterioară în rezolvarea problemelor.

6. Completaţi cuvântul lipsă din afirmaţia următoare:


Motorul de inferenţe reprezintă partea de prelucrare a sistemului expert şi
constituie subsistemul _____________al acestuia.

7. Care este lungimea maximă (număr de caractere) acceptată pentru numele predicatului în
limbajul Prolog?

8. Care este fragmentul de program Prolog corect?

19
a) domains c) domain
nume,den,tip=text nume,den,tip=symbol
predicates predicates
firma(den,tip) firma(den,tip)
asociat1(nume,den) asociat1(nume,den)
asociat2(nume,den) asociat2(nume,den)
patronat(nume,nume,den) patronat(nume,nume,den)

b) domains d) domains
nume,den,tip=symbol nume,den,tip=symbol
predicate predicates
firma(den,tip) firma(den,tip)
asociat1(nume,den) asociat1(nume,den)
asociat2(nume,den) asociat2(nume,den)
patronat(nume,nume,den) patronat(nume,nume,den)

Răspunsuri la testele grilă (modele)


1. 1=F,2=C,3=A,4=B,5=E,6=D; 2. c; 3. a; 4. ADEVĂRAT (True); 5. DA (Yes); 6. rezolutiv;
7. 250; 8. d.

BIBLIOGRAFIE

Bibliografie minimală
1. Gherasim, Z.; Cocianu, Cătălina-Lucia – Sisteme expert în economie, Editura Fundaţiei
România de Mâine, Bucureşti, 2005.
2. Zaharie, D.; Năstase, P.; Albescu, Felicia; Bojan, Irina; Mihai, F.; Anica-Popa, Liana –
Sisteme expert, Teorie şi aplicaţii, Editura DUAL TECH, Bucureşti, 2002.
3. Andone, I. – Sisteme inteligente hibride. Teorie. Studii de caz pentru aplicaţii
economice. Ghidul dezvoltatorului, Editura Economică, 2002.
4. Zaharia, M.; Cârstea, Claudia; Sălăgean, Liana – Inteligenţa artificială şi sistemele
expert în asistarea deciziilor economice, Editura Economică, 2003.

Bibliografie suplimentară
5. Tacu, P.Al.; Vancea, R,; Holban, Şt.; Burciu, A. – Inteligenţa artificială. Teorie şi
aplicaţii în economie, Editura Economică, Bucureşti, 1998.
6. Bodea, C. – Inteligenţă artificială şi sisteme expert, Editura INFOREC, Bucureşti, 1998.
7. Davidescu, D.N. – Utilizarea sistemelor expert în domeniul financiar-contabil, Editura
Didactică şi Pedagogică, Bucureşti, 1997.
8. Andone, I.; Ţugui, Al. – Sisteme inteligente în management, contabilitate, finanţe, bănci
şi marketing, Editura Economică, Bucureşti, 1999.

20

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