151
UNIVERSITATEA DIN BACĂU FACULTATEA DE INGINERIE DAN ROTAR INTELIGENŢĂ ARTIFICIALĂ Note de curs Caiet de seminar Indrumar de laborator EDITURA ALMA MATER BACĂU 2007

INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

  • Upload
    vongoc

  • View
    338

  • Download
    23

Embed Size (px)

Citation preview

Page 1: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

UNIVERSITATEA DIN BACĂU FACULTATEA DE INGINERIE

DAN ROTAR

INTELIGENŢĂ ARTIFICIALĂ

Note de curs Caiet de seminar

Indrumar de laborator

EDITURA ALMA MATER BACĂU 2007

Page 2: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme
Page 3: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

3

CUPRINS Pag. Capitolul 1 DOMENIILE INTELIGENŢEI ARTIFICIALE 5 Capitolul 2 BAZELE INTELIGENŢEI ARTIFICIALE 7 2.1. Logica clasică a propoziţiilor 7 2.1.1. Simboluri, formule 7 2.1.2. Evaluare, funcţie de adevăr 9 2.1.3. Tautologie, validitate, consistenţă 10 2.1.4. Metoda lui Quine 13 2.1.5. Metoda reducerii 14 2.1.6. Echivalenţe 16 2.1.7. Reguli de manipulare şi substituţie 16 2.1.8. Dualitate 17 2.1.9. Conectori adecvaţi 18 2.1.10. Consecinţe logice 19 2.1.11. Forme normale 19 2.2. Sistemul deductiv al calculului propoziţiilor 20 2.2.1. Demonstraţie şi deducţie 20 2.3. Limbajul calculului cu predicate de ordinul întâi 22 Capitolul 3 SISTEME EXPERT 24 3.1. Sisteme expert – generalităţi 24 3.2. Structura generală a unui sistem expert 25 3.3. Funcţionarea unui sistem expert 25 Capitolul 4 REALIZAREA UNUI PROGRAM ÎN MEDIUL DE

PROGRAMARE CLIPS

28 4.1. Introducere 28 4.2. Execuţia unui program în mediul de programare CLIPS 28 4.3. Structura programului CLIPS 32 4.3.1. Constructorii 32 4.3.2. Faptele 32 4.3.3. Constructorul deftemplate 33 4.3.4. Constructorul deffacts 34 4.3.5. Fapte ordonate 35 4.3.6. Adăugarea şi ştergerea faptelor 36 4.3.7. Modificarea şi duplicarea faptelor 39 4.3.8. Comanda watch 40 4.3.9. Definirea regulilor 41

Page 4: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

4

4.3.10. Afişarea agendei 43 4.3.11. Urmărirea activărilor, regulilor şi a statisticilor 44 4.3.12. Afişarea listei membrilor unei construcţii specificate 45 4.3.13. Afişarea textului membrilor unei construcţii specificate 45 4.3.14. Ştergerea membrilor unei construcţii specificate 46 4.3.15. Ştergerea tuturor construcţiilor din mediul CLIPS 47 4.3.16. Comanda printout 48 4.3.17. Tipuri de date 48 4.3.18. Funcţiile 50 4.3.19. Constructorii 51 4.3.20. Faptele 51 Capitolul 5 REŢELE NEURALE 53 5.1. Modelul general al unei reţele neuronale 53 5.2. Ecuaţia de evoluţie a reţelei 55 5.3. Paradigme ale instruirii 56 5.4. Topologia multistrat a reţelelor neurale 57 Capitolul 6 MULŢIMI NUANŢATE 58 6.1. Noţiunea de mulţime nuanţată 58 6.2. Sisteme expert bazate pe mulţimi nuanţate 60 Capitolul 7 ALGORITMI GENETICI 62 7.1. Generalităţi 62 7.2. Algoritmul genetic canonic 62 SEMINAR 66 Seminar 1 66 Seminar 2 68 Seminar 3 70 Seminar 4 71 Seminar 5 72 Seminar 6 72 Seminar 7 74 Laborator Laborator 1,2,3 77 Laborator 4,5,6 90 Laborator 7,8,9 123 Laborator 10,11,12,13,14 134 BIBLIOGRAFIE 151

Page 5: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

5

CAPITOLUL 1 DOMENIILE INTELIGENŢEI ARTIFICIALE Inteligenţa artificială este o ramură a ştinţei calculatoarelor care se ocupă cu studiul posibilităţii calculatoarelor de a avea o comportare asemănătoare cu cea omenească. Termenul a fost introdus în 1956 de către John McCarthy de la Massachusetts Institute of Technology. Inteligenţa artificială cuprinde:

• Jocuri: programarea calculatoarelor să joace jocuri cum ar fi şahul sau jocul de dame;

• Sisteme expert: programarea calculatoarelor să ia decizii în situaţii reale (din viaţa reală) – de exemplu anumite sisteme expert ajută doctorii să stabilească diagnosticul bolii pe baza simptomelor.

• Limbaje naturale: programarea calculatoarelor să înţeleagă limbajul uman natural.

• Reţele neurale: sisteme care simulează inteligenţa prin încercarea reproducerii tipurilor de conexiuni fizice întâlnite în creierul animalelor.

• Sisteme fuzzy: numite şi sisteme cu mulţimi vagi bazate pe o logică în care între cele două valori de adevăr: adevărat şi fals există o infinitate de valori ce pot modela mai bine lumea reală;

• Algoritmi genetici: algoritmi bazaţi pe modul de dezvoltare evoluţionist copiind multe din principiile geneticii;

• Robotică: programarea calculatoarelor să vadă, să audă şi să reacţioneze alţi stimuli senzoriali;

• Noi tehnici ale domeniului inteligenţei artificiale care apar şi se dezvoltă continuu indicând marele interes de care se bucura această ştiinţă.

În mod obişnuit calculatoarele nu sunt dotate cu inteligenţă artificială completă

(adică cu posibilitatea să simuleze comportamentul uman). Cele mai mari progrese s-au realizat în domeniul programării jocurilor. Cel mai bun program de şah pentru calculator este acum capabil să învingă omul. În mai 1997 un supercalculator al firmei IBM numit “Deep Blue” a învins campionul mondial Gary Kasparov într-un meci de şah.

În domeniul roboticii calculatoarele sunt larg utilizate în maşini de asamblare dar acestea sunt capabile să îndeplinească numai sarcini extrem de limitate. Roboţii au mari dificultăţi în identificarea obiectelor pe baza imaginii sau prin palpare şi de asemenea mutarea sau apucarea obiectelor este încă stângace.

Page 6: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

6

Înţelegerea limbajelor naturale oferă cel mai mare potenţial de utilizare din cauză că acestea vor permite oamenilor să interacţioneze cu calculatoarelor fără a fi necesare cunoştinţe de specialitate. Din păcate sarcina de a programa calculatorul să înţeleagă limbajele naturale s-a dovedit mult mai dificilă decât s-a crezut la început. Există câteva sisteme care reuşesc să facă traducerea automată dintr-un limbaj în altul dar ele sunt departe de a fi la fel de bune ca traducătorii umani. Sunt de asemenea sisteme de recunoaştere a vocii care pot converti sunetele pronunţate în cuvinte scrise dar acestea nu înţeleg ceea ce scriu; aceste sisteme sunt destinate numai dictării. Chiar şi aceste sisteme sunt destul de limitate – trebuie vorbit încet şi clar.

La începutul anilor 1980 s-a crezut că sistemele expert vor constitui viitorul inteligenţei artificiale şi ale calculatoarelor în general. Până acum însă aceste sisteme n-au răspuns aşteptărilor. Multe sisteme expert ajută experţii umani în diferite domenii cum ar fi medicina sau ingineria dar aceste sisteme sunt foarte scumpe şi sunt de folos doar în situaţii speciale.

Astăzi cel mai fierbinte domeniu al inteligenţei artificiale este cel al reţelelor neurale care sunt folosite cu succes în anumite domenii cum ar fi recunoaşterea vocii şi procesarea limbajelor naturale.

Există limbaje de programare care sunt cunoscute drept limbajele inteligenţei artificiale deoarece acestea sunt folosite aproape exclusiv pentru aplicaţii ale inteligenţei artificiale. Limbajele de programare mai cunoscute utilizate în acest scop sunt LISP şi Prolog. Inteligenţa artificială se împarte în două clase: inteligenţă artificială tare (strong artificial intelligence) şi inteligenţă artificială slabă (weak artificial intelligence). Inteligenţa artificială tare se referă la domeniul în care calculatoarele pot gândi (cel puţin) la fel ca oamenii. Inteligenţa artificială slabă se referă doar la elemente de gândire (raţionamente) adăugate calculatoarelor în scopul de a le face cât mai folositoare şi acest lucru este deja realizat prin sisteme expert martor, comanda şi conducerea automobilelor şi programele de recunoaştere a vorbirii. Ce înseamnă a “gândi” şi a “gândi ca” este (încă) un domeniu pentru dezbateri aprinse de acum încolo.

Page 7: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

7

CAPITOLUL 2 BAZELE INTELIGENŢEI ARTIFICIALE 2.1. Logica clasică a propoziţiilor 2.1.1. Simboluri, formule

Obiectul logicii este identificarea şi folosirea legilor raţionamentului uman. Logica simbolică utilizează simboluri pentru unităţile de gândire şi pentru operaţiile asupra lor.

Considerăm propoziţiile: p Δ Ion citeşte. q Δ Ion scrie.

Notaţia de mai sus arată că propoziţia “Ion citeşte” va fi reprezentată prin simbolul p. Propoziţia trebuie să fie adevărată sau falsă fără a putea fi adevărată şi falsă în acelaşi timp. Pentru propoziţia neadevărată se foloseşte negaţia: ~ p Δ Nu este adevărat că Ion citeşte (Ion nu citeşte).

Cât timp nu admitem decât cele două valori de adevăr (fals, adevărat) suntem în cadrul logicii clasice sau a logicii bivalente.

În logica de tip propoziţional, propoziţiile sunt unităţi nedecompozabile. Orice consideraţie asupra structurii lor interne este irelevantă.

Propoziţiile simple sau atomi p, q, r, ... sunt compozabile. Ele se pot combina dând naştere la noi propoziţii, la rândul lor adevărate sau false. Simbolurile numite conectori indică operaţiile de asociere sau combinare, care sunt cele mai frecvente în vorbire sau raţionament: ^ pentru “şi” : p ^ q Δ “Ion citeşte” şi “Ion scrie” v pentru “sau” : p v q Δ “Ion citeşte” sau “Ion scrie” → pentru “dacă p atunci q” : p → q Δ Dacă “Ion citeşte” atunci “Ion scrie” ↔ pentru “p dacă şi numai dacă q”: p ↔ q

Page 8: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

8

Propoziţiile p ^ q, p v q, p → q sunt formule propoziţionale. Formulele vor fi notate cu majuscule: P, Q, R, ... . De exemplu: P : (p ^ q) → r, unde:

r Δ Ion este mulţumit. Interpretarea formulei P este: dacă “Ion citeşte” şi “Ion scrie”, atunci “Ion este

mulţumit”. Formula P este formată din trei atomi. Ea poate fi privită drept o funcţie de atomii p, q, r, care, din acest motiv, se numesc variabile propoziţionale.

În logica propoziţională unitatea principală de lucru este formula. Totalitatea simbolurilor logicii propoziţiilor constituie un alfabet. În cele ce urmează simbolurile logice vor fi următoarele:

p, q, r, ..., ~, ^, v, →, ↔, (, ) cu alte cuvinte, simbolurile pentru mulţimea finită sau infinită de atomi: p, q, r, ... sau p1, p2, p3, ..., pn, ...; simbolurile pentru conectorii logici, ce vor fi definiţi mai jos; parantezele, stângă, (, şi dreaptă, ).

Simbolurile ce nu sunt cuprinse în alfabet sunt simboluri metalogice. Această restricţie surprinde de la început: simbolurile P, Q, R, ... sau P1, P2, P3, ... utilizate în formule care nu figurează în alfabet.

Alfabetul împreună cu formulele formează limbajul. Proprietăţile, legile, regulile pot fi enunţate pentru atomi şi atunci avem nevoie de o regulă suplimentară de trecere de la atomi la formule (regula substituţiei) sau pot fi enunţate direct pentru formule, caz în care poartă denumirea de scheme. Exemplu:

p^(p→q)→q este o formulă întotdeauna adevărată (tautologie), oricare ar fi atomii p, q. Iar:

P^(P→Q)→Q unde P, Q sunt formule, este şi ea totdeauna adevărată, oricare ar fi P, Q, de exemplu:

P=(p ↔ q) şi:

Q=(pvq) ^ (p v ~ q)

Legea tautologică enunţată pentru atomi poate fi generalizată prin regula substituţiei. Este convenabil să o enunţăm ca o schemă în forma generală pentru formule, fără a mai menţiona substituţia.

Page 9: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

9

O formulă P se obţine din atomii p, q, r, ... prin operaţiile efectuate de conectori. Definiţia recursivă a formulei este:

1) un atom este o formulă; 2) dacă P este o formulă, (~P) este o formulă; 3) dacă P şi Q sunt formule, atunci (P^Q), (PvQ), (P→Q), (P↔Q) sunt

formule; 4) toate formulele se obţin prin aplicarea regulilor 1) – 3).

2.1.2. Evaluare, funcţie de adevăr

Introducem pe mulţimea atomilor o funcţie, numită de evaluare, care aplică fiecare atom pe mulţimea (adevărat, fals):

v(p)=1 (adevărat) sau v(p)=0 (fals)

Prima problemă a calculului propoziţiilor constă în determinarea valorii de adevăr a unei formule în funcţie de valoarea de adevăr a atomilor. Notăm valoarea de adevăr a unei formule P cu Pv ∈ [0,1], sau cu notaţia echivalentă v(P).

Stabilim prin recurenţă următoarele reguli pentru evaluarea formulelor:

1) dacă P este un atom, Pv = v(P); 2) dacă P= ~ Q, atunci Pv = 1 dacă Q = 0 sau Pv = 0 dacă Q = 1; 3) (P ^ Q)v = 1 dacă Pv = Qv = 1 sau (P ^ Q)v = 0 în celelalte cazuri; 4) (P v Q)v = 0 dacă Pv = Qv = 0 sau (P ^ Q)v = 1 în celelalte cazuri; 5) (P → Q)v = 0 dacă Pv =1 şi Qv = 0 sau (P → Q)v = 1 în celelalte

cazuri (implicaţie, se citeşte: P implică Q); 6) (P ↔ Q)v = 1 dacă Pv = Qv sau (P ↔ Q)v = 0 în celelalte cazuri

(dubla implicaţie, se citeşte: dacă P, atunci şi numai atunci Q);

Un tablou care arată valoarea de adevăr a unei formule pentru toate valorile posibile ale atomilor din formulă se numeşte tabelă de adevăr. Un exemplu de tabel de adevăr este:

PP

v Qv ~Pv (P^V)v (PvV)v (P → Q)v (P ↔ Q)v

1 1 0 1 1 1 1 1 0 0 0 1 0 0 0 1 1 0 1 1 0 0 0 1 0 0 1 1

Funcţia de adevăr face să corespundă în mod unic fiecărei evaluări a atomilor

unei formule una din valorile de adevăr “0” sau “1”. Reprezentarea grafică a unei funcţii de adevăr este tabela de adevăr.

De exemplu funcţia de adevăr a conjuncţiei (a formulei P^Q ) se va nota: f^(P,Q).

Unei formule cu n atomi, concepuţi ca variabile propoziţionale, îi va corespunde o funcţie de adevăr cu n variabile. Tabela de adevăr va avea 2n linii pentru cele 2n evaluări posibile.

Page 10: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

Există funcţii de adevăr distincte pentru o formulă cu n variabile, deoarece există moduri de aranjare a lui “0” şi “1” în ultima coloană a unei tabele de adevăr cu 2

n22n22

n linii. În cazul n=2 al formulelor cu 2 atomi există 16 formule de adevăr. Se pot astfel defini 16 conectori binari, din care în această prezentare au fost selectaţi doar patru.

Numărul formulelor care pot fi construite cu n variabile propoziţionale este infinit. Rezultă că diferite formule corespund uneia şi aceleiaşi funcţii de adevăr (tabele de adevăr).

Fie o formulă P având atomii p1, ... , pn. O interpretare a lui P este o evaluare (o atribuire de valori) a atomilor, fiecare primind valoarea de adevăr “0” sau “1”. Formula P este adevărată într-o interpretare, dacă este evaluată ca “1”; altfel este falsă ca interpretare. O formulă cu n atomi va avea 2n interpretări diferite. Liniile unei tabele de adevăr reprezintă astfel de interpretări.

O interpretare I se reprezintă prin mulţimea a1, ..., an, unde ai este pi sau ~pi. Astfel {p, ~q, ~r, s} este o interpretare, în care p, q, r, s au respectiv valorile “1”, “0”, “0”, “1”. Dacă P este adevărată în interpretarea I, se spune că I satisface pe P sau P este satisfăcut de I. Dacă P este falsă în interpretarea I, atunci I falsifică pe P sau P este falsificat de I. O interpretare I care satisface pe P se numeşte model a lui P. Exemplu: Fie formula P:

~(p v q) v ~ (q v p), cu tabela de adevăr:

p q p v q ~(p v q) ~(p v q) ~(p v q) v ~ (q v p)

1 1 1 0 0 0 1 0 1 0 0 0 0 1 1 0 0 0 0 0 0 1 1 1

Formula P este satisfăcută de interpretarea {~p, ~q} care constituie un model a

lui P. Interpretarea {p, q} falsifică pe P. 2.1.3. Tautologie, validitate, consistenţă

O formulă este validă, dacă şi numai dacă este adevărată în toate interpretările. Altfel (dacă şi numai dacă nu este validă) este nevalidă.

O formulă este inconsistentă dacă şi numai dacă este falsă în toate interpretările. O formulă este consistentă dacă şi numai dacă nu este inconsistentă.

Denumirea clasică a formulei valide din punct de vedere semantic este tautologie, iar a celei inconsistente este contradicţie.

10

Page 11: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

Exemple:

1) Formula P: p v ~ p este o tautologie (formulă validă), întrucât funcţia sa de adevăr ia în toate interpretările valoarea “1”.

2) Formula P: p ^ ~ p este o contradicţie (formulă nevalidă) pentru că funcţia sa de adevăr ia în toate interpretările valoarea “0”.

Propoziţii.

1) O formulă este validă dacă şi numai dacă negaţia ei este validă. 2) O formulă este inconsistentă dacă şi numai dacă negaţia ei este validă. 3) O formulă este nevalidă dacă şi numai dacă există o interpretare în care este

falsă. 4) O formulă este consistentă dacă şi numai dacă există o interpretare în care este

adevărată. 5) O formulă validă este consistentă. 6) O formulă consistentă nu este neapărat validă. 7) O formulă inconsistentă este nevalidă. 8) O formulă nevalidă nu este neapărat inconsistentă.

Întrucât folosirea terminologiei de mai înainte depăşeşte necesităţile ce se ivesc

în demonstrarea automată a teoremelor, sunt folosite cu precădere următoarele expresii:

O formulă consistentă se numeşte realizabilă. O formulă este nerealizabilă (inconsistentă) dacă şi numai dacă nu este realizabilă. Definiţiile proprietăţilor de validitate (tautologii), consistenţă (realizabile),

inconsistenţă (contradicţii, nerealizabile) şi nevaliditate a formulelor sunt reprezentate în schema următoare:

CONSISTENŢĂ=REALIZABILĂPv = 1 uneori

VALIDĂ=TAUTOLOGIE Pv = 1 întotdeauna

NEVALIDĂ Pv = 0 uneori

CONTRADICŢIE=NEREALIZABILĂ Pv = 0 întotdeauna

Proprietatea de formulă nerealizabilă devine centrală, dată fiind abordarea

caracteristică demonstrării automate a teoremelor care foloseşte cu precădere principiul contradicţiei.

O formulă este nerealizabilă când este falsă în toate interpretările, deci când nu admite model. Dacă reuşim să demonstrăm că există cel puţin o interpretare pentru care este adevărată (admite cel puţin un model), ipoteza nu este adevărată şi formula se dovedeşte a fi realizabilă.

Proprietatea poate fi enunţată pentru o mulţime S de formule: o astfel de mulţime este realizabilă (ca funcţie de adevăr), dacă există o evaluare v pe mulţimea formulelor astfel ca Pv= 1 pentru toţi P∈S ; altfel S este nerealizabilă. Dacă S constă

11

Page 12: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

12

dintr-o singură formulă, se spune că aceasta este realizabilă, dacă S este realizabilă, şi nerealizabilă, dacă S este nerealizabilă.

În limbajul evaluărilor o tautologie este o formulă T pentru care Tv=1, oricare ar fi valoarea v. Tautologii fundamentale.

Următoarele formule valide sunt folosite cu precădere, ceea ce le-a făcut să se distingă uneori prin nume proprii. Ele sunt tautologii: T0 P→P T1 (P→Q) →((Q→R) →(P→R)) legea silogismului T2 P→(P v Q) T3 Q→(P v Q) T4 (P→Q) →((Q→R) →((P v Q)→R)) T5 P ^ Q →P T6 P ^ Q →Q T7 (R→P) →((R→Q) →(R →(P ^ Q))) T8 (P→(Q→R)) →((P ^ Q) →R) legea importării T9 ((P ^ Q) → R) → (P →(Q→R)) legea exportării T10 (P ^ ~P) → Q T11 (P→(P ^ ~P)) → ~P T12 P ^ ~P legea terţului exclus sau tertium non datur Sunt frecvente şi următoarele legi: T13 (P ^ (P → Q)) → Q modus ponendo ponens sau modus ponens sau regula detaşării T14 (~Q ^ (P → Q)) → ~ P modus tollendo tollens T15 (~P ^ (P v Q)) → Q modus tollendo ponens T16 ((P → Q) ^ ~ Q) → ~ P absurditate T17 ~ (P ^ ~ P) negare (contradicţie) T18 P → (Q → P) simplificare T19 (P → (Q → R)) → (Q → (P → R)) schimbarea premiselor T20 (P → (Q → R)) → ((P → Q) → (P → R)) legea lui Frege T21 P → ~ ~ P T22 ~ ~ P → P T23 (P → Q) → (~P v Q) T24 (~P v Q) → (P → Q) T25 ~ (P v Q) → (~P ^ ~Q) T25 – T28: legile lui De

Morgan T26 (~P ^ ~Q) → ~ (P v Q) T27 ~(P ^ Q) → (~ P v ~ Q) T28 (~ P v ~ Q) → ~(P ^ Q)

Page 13: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

13

T29 (P → Q) → (~Q → ~P) T29 – T32: legile transpunerii

T30 (P → ~Q) → (Q → ~P) T31 (~P → Q) → (~Q → P) T32 (~P → ~Q) → (Q → P) T33 ((P → Q) → P) → P legea lui Pierce Demonstraţia caracterului tautologic al formulelor T0 – T33 se face prin scrierea tabelei de adevăr a fiecărei formule, a cărei ultimă coloană va fi compusă din “1”. 2.1.4. Metoda lui Quine

Un procedeu de a decide asupra realizabilităţii unei formule (sau a caracterului de tautologie sau de contradicţie) care nu recurge la tabela de adevăr a fost dat de Quine.

Procedeul constă din următorii paşi:

1) Atomul care intervine cel mai frecvent este înlocuit o dată cu “V” (adevăr) şi a doua oară cu “F” (fals), obţinându-se două formule.

2) În fiecare din ele se aplică următoarele reguli:

a) se suprimă “V” ca element al conjuncţiei; b) se suprimă “F” ca element al disjuncţiei; c) o conjuncţie cu “F” se înlocuieşte cu “F”; d) o disjuncţie cu “V” se înlocuieşte cu “V”; e) o implicaţie conţinând pe “V” se înlocuieşte cu consecventul; f) o implicaţie conţinând pe “F” se înlocuieşte cu negaţia

antecedentului g) se suprimă “V” ca membru al unei duble negaţii; h) se înlocuieşte dubla negaţie, care conţine “F” ca membru, cu

celălalt membru al ei.

3) Se aplică regula 1) la următorul atom cu frecvenţa cea mai mare şi se trece la regula 2), apoi la regula 3), până la epuizarea atomilor.

Toate regulile se bazează pe tabele de adevăr ce definesc conectorii. Astfel regula b), F v q =q, exprimă faptul că dacă p este fals, p v q ia valoarea de

adevăr a lui q. Regula d), V v q = V, se reduce la faptul că o disjuncţie este adevărată dacă un

element este adevărat. Regula f), cu privire la F → q, sau p → F, se deduce din:

p q p → q 1 1 1 1 0 0 0 1 1 0 0 1

Page 14: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

În primul caz F → q înseamnă că p → q este adevărată, deci putem s-o înlocuim cu negaţia antecedentului (V). În al doilea caz, p → F, evaluările (1,0) şi (0,0), rezultă din tablou că are întotdeauna valoarea lui ~p. Exemplu:

Fie formula (p ^ q) v (~p ^ ~r) → (q ↔ r). Este o tautologie sau o contradicţie? Aplicăm metoda lui Quine:

((p ^ q) v (~p ^ ~r)) → (q ↔ r) ((V ^ q) v (F ^ ~r)) → (q ↔ r), ((F ^ q) v (V ^ ~r)) → (q ↔ r)

(q v (F ^ ~r) → (q ↔ r) (F v (V ^ ~r) → (q ↔ r) (q v F) → (q ↔ r) (V ^ ~r) → (q ↔ r) q → (q ↔ r) ~r) → (q ↔ r)

V → (V↔r) F → (F↔r) F → (q↔V) V → (q↔F)

V↔r V V q↔F r q V F F V

Formula nu este tautologie sau contradicţie, ea este realizabilă.

2.1.5. Metoda reducerii

Metoda reducerii se bazează pe încercarea de a falsifica formula dată, al cărei caracter vrem să-l demonstrăm. Presupunem că există o evaluare v pentru care Fv = 0. Înscriem această valoare (0) sub conectorul principal, iar deasupra lui numărul pasului efectuat (1). Dacă formula este de forma P →Q, pasul 1 va consta în: 1

P → Q 0

Dar implicaţia P → Q este falsă numai când P este fals şi Q este adevărat. Vom scrie deci sub conectorul principal din P valoarea “1”, sub conectorul principal din Q valoarea “0” şi deasupra ambilor conectori numărul pasului (2). Continuăm în acelaşi fel până când:

(a) obţinem o evaluare consistentă (necontradictorie) pentru toate

variabilele propoziţionale sau

14

Page 15: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

(b) nu găsim o asemenea evaluare. În primul caz, ipoteza iniţială este corectă şi formula este falsă; în al doilea caz falsificarea nu a reuşit şi deci formula este validă.

Când formula este de forma: 1

P ∧ Q 0

din atribuirea valorii “0” nu rezultă în mod unic că P este adevărat sau fals, de aceea trebuie să considerăm toate cazurile:

2 1 2 2 1 2 2 1 2 p ^ Q P ^ Q P ^ Q 1 0 0 0 0 1 0 0 0

unde valorile şi indicii se pun şi deasupra conectorilor principali din formulele P şi Q.

Dacă fiecare din cele trei cazuri conduc la contradicţii, formula iniţială este validă. În caz că cel puţin unul din ele permite găsirea unei evaluări necontradictorii, formula a putut fi falsificată şi este inconsistentă. Evaluările pentru care se obţine o contradicţie sunt subliniate. Exemple: 1) Fie formula ((p → q) ^ r) → ((~r v p) → q). Aplicând metoda reducerii, se obţine o

contradicţie prin faptul că la pasul 3: v(r)=1, iar la pasul 9: v(r)=0

6 3 5 2 3 1 8 9 4 7 2 4 ((p → q) ^ r) → ((~ r v p) → q) 0 1 0 1 1 0 1 0 1 0 0 0

Observăm că la pasul 3 din faptul că valoarea conjuncţiei din membrul întâi este “1”, rezultă că v(p → q) =1 şi v(r)=1. Întrucât v(q)=0 (rezultă din membrul 2 la pasul 4), v(p)=0 (altfel v(p→q)=0). Dar dacă introducem v(p)=0 (din membrul întâi, pasul 6) în membrul doi (pasul 7), obţinem v(~r)=1 şi v(r)=0, ceea ce contrazice valoarea care i s-a atribuit lui r la pasul 3. Formula este o tautologie. 2) Fie formula ((~r v p) → q) → ((p → q) ^ r). Întrucât la pasul 3 valoarea lui ~r v p nu

rezultă în mod unic, trebuie să considerăm următoarele trei cazuri: 3 2 3 1 2 a) ((~r v p) → q) → ((p → q) ^ r) 1 1 1 0 0

15

Page 16: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

16

3 2 3 1 2 b) ((~r v p) → q) → ((p → q) ^ r) 0 1 1 0 0

3 2 3 1 2 c) ((~r v p) → q) → ((p → q) ^ r) 0 1 0 0 0

Cazul b) şi cazul c) duc la contradicţii, dar cazul a) permite o evaluare consistentă:

((~ r v p) → q) → ((p → q) ^ r) 1 0 1 1 1 1 0 1 0 0 0 0

v(p)=1, v(q)=1, v(r)=0. Formula nu este o tautologie. Ea este falsificată de interpretarea {p, q, ~r}. Formula este realizabilă, pentru că alte interpretări, ca de exemplu {p, q, r}, contrazic ipoteza nerealizabilităţii ei. 2.1.6. Echivalenţe

Definiţie. Două formule sunt (logic) echivalente (P echivalent cu Q) dacă iau aceleaşi valori de adevăr pentru orice interpretare (au aceeaşi tabelă de adevăr); P ⇔ Q dacă pentru orice evaluare Pv ⇔ Qv.

Definiţie echivalentă: două formule P şi Q sunt echivalente dacă P ↔ Q este o tautologie. Echivalenţe fundamentale.

1. Absorbţia P ^ (P v Q) ⇔ P şi P v (P ^ Q) ⇔ P 2. Idempotenţa P ^ P ⇔ P şi P v P ⇔ P 3. Comutativitatea P ^ Q ⇔ Q ^ P şi P v Q ⇔ Q v P 4. Asociativitatea P ^ (Q ^ R) ⇔ (P ^ Q) ^ R

P v (Q v R) ⇔ (P v Q) v R 5. Distributivitatea P ^ (Q v R) ⇔ (P ^ Q) v (P ^ R) P v (Q ^ R) ⇔ (P v Q) ^ (P v R) 6. Dubla negaţie ~ (~ P) ⇔ P 7. Legile lui De Morgan ~ (P ^ Q) ⇔ ~ P v ~ Q, ~ (P v Q) ⇔ ~ P ^ ~ Q 8. Transpunerea P → Q ⇔ ~ Q → ~ P 9. Negaţia implicaţiei ~ (P → Q) ⇔ P ^ ~ Q 10. Formula bicondiţională P ↔ Q ⇔ (P ^ Q) v (~P ^ ~Q)

2.1.7. Reguli de manipulare şi substituţie

Regulă. Dacă P şi P → Q sunt tautologii, atunci Q este o tautologie. Vom nota această regulă MP de la modus ponens.

Page 17: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

17

Fie F o formulă în care apar atomii p1, p2, ..., pn. Fie P1, ... , Pn formule oarecare. Dacă F este o tautologie, atunci obţinută prin substituirea peste tot în F a fiecărei apariţii a lui pi prin Pi (1 ≤ i ≤ n) este de asemenea o tautologie. Exemple: 1. Prin tabela de adevăr se demonstrează că formula următoare este o tautologie:

~ (p ^ q) ↔ ~ p v ~ q (De Morgan) Înlocuind atomii p, q cu formulele P, Q, avem tautologia:

~ (P ^ Q) ↔ ~ P v ~ Q unde P şi Q sunt formule oarecare. 2. Întrucât p1 ^ (p2 ^ p3) ↔ (p1 ^ p2) ^ p3 este o tautologie (asociativitatea), oricare ar fi

formulele P, Q, R,

P ^ (Q ^ R) ↔ (P ^ Q) ^ R va fi o tautologie.

Într-o formulă în care intervine subformula P, înlocuim pe P în unul sau mai multe locuri cu formula echivalentă Q. Rezultatul Q este logic echivalent cu . Să arătăm că ↔ Q este o tautologie. Fie o evaluare a atomilor. Formula are aceeaşi valoare ca şi Q, deoarece diferă de aceasta numai prin faptul că P este înlocuit cu Q având aceeaşi valoare de adevăr. Deci P ↔ Q ia întotdeauna valoarea “1”. Exemplu:

Formula (p^p) → q este echivalentă cu formula p → q, deoarece am făcut substituţia p^p ⇔ p, care reprezintă o echivalenţă logică.

Prin folosirea semnului egalităţii toate tautologiile sunt echivalente şi toate formulele nerealizabile sunt echivalente. Întrucât Pv =1 pentru toţi v şi Qv = 0 pentru toţi v determină pe P ca o tautologie şi pe Q ca o formulă nerealizabilă, putem scrie “1” şi “0” pentru orice formulă care este tautologie, respectiv nerealizabilă. De aceea P=1 înseamnă că P este tautologie şi Q=0 că Q este o formulă nerealizabilă. 2.1.8. Dualitate

O formulă restrânsă este o formulă care nu are decât conectorii ~, ^, v. Dacă într-o formulă restrânsă schimbăm între ele simbolurile ^ şi v şi înlocuim

fiecare atom prin negaţia lui, obţinem formula PP

*. Atunci P*P este logic echivalent cu ~P:

PP

* ⇔ ~ P (principiul dualităţii). Principiul general al dualităţii afirmă că un enunţ corect implicând ^, v, “0”, “1”

poate fi tradus într-un alt enunţ corect prin schimbările între ele ale simbolurilor “0” şi

Page 18: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

18

“1”, ^ şi v. Noţiunile definite în termenii acestor simboluri trebuie traduse prin dualele lor. Astfel dualul termenului “tautologie” este “nerealizabil” pentru că cele două enunţuri duale sunt:

PP

v =1 pentru toţi v şi Pv=0 pentru toţi v.

Astfel dualul enunţului “dacă P este o tautologie, P v Q este o tautologie” este “dacă P este nerealizabil, P ^ Q este nerealizabil”. 2.1.9. Conectori adecvaţi

O mulţime de conectori se numeşte mulţime adecvată, dacă fiecare formulă poate fi exprimată cu ajutorul conectorilor acestei mulţimi.

{~, ^, v}, {~, ^}, {~, v} şi {~, →} sunt mulţimi adecvate de conectori.

Mulţimi adecvate formate dintr-un singur conector:

1) ↓ - rejecţie sau conectorul lui Nicod – se citeşte “nici ..., nici ...” = NOR (tehnic)

tabelul de adevăr:

p q p ↓ q ------------------------- 1 1 0 1 0 0 0 1 0 0 0 1

Relaţiile care leagă acest conector de negaţie şi conjuncţie sunt:

~p = p ↓ p şi p ^ q = (p ↓ p) ↓ (q ↓ q)

2) | - incompatibilitate sau conectorul lui Sheffer – NAND

p|q = ~p v ~q

tabelul de adevăr: p q p|q ----------------------- 1 1 0 1 0 1 0 1 1 0 0 1

Relaţiile care leagă acest conector de negaţie şi conjuncţie sunt:

Page 19: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

~ p = p|p şi p ^ q = (p|p) | (q|q).

Avantajul de a micşora numărul de conectori este plătit prin lungimea scrierii

formulelor. 2.1.10. Consecinţe logice

Fie n formule P1, P2, ..., Pn. Formula P este o consecinţă logică (tautologică) a premiselor P1, P2, ..., Pn dacă pentru fiecare evaluare v pentru care P1

v = P2v = ... = Pn

v = 1 avem Pv = 1.

Pentru consecinţa logică folosim notaţia P1, P2, ..., Pn |= P. Simbolul |= în faţa unei formule denotă că este o tautologie: |= P (citim P este o tautologie).

Cu alte cuvinte, orice model al conjuncţiei premiselor P1, P2, ..., Pn este şi model al concluziei.

Fie formulele P1, P2, ..., Pn. Formula P este o consecinţă logică a premiselor Pi, dacă şi numai dacă P1^ P2^ ...^ Pn^ ~P este nerealizabilă.

Problema stabilirii dacă o formulă este consecinţă logică (numită şi interferenţă tautologică) revine astfel la stabilirea faptului dacă o altă formulă este tautologie sau nerealizabilă (pentru un număr redus de variabile propoziţionale se poate recurge la tabela de adevăr a acestei formule). 2.1.11. Forme normale

1. Orice formulă care nu este o contradicţie este logic echivalentă cu o formulă restrânsă normal disjunctivă:

19

ijnjmil∧∨

≤≤

unde lij sunt literale. 2. Orice formulă care nu este o tautologie este logic echivalentă cu o formulă

de formă normal conjunctivă:

ijmjnil∨∧

≤≤

unde lij sunt literale.

Conjuncţiile şi disjuncţiile care au proprietatea de a lua valoarea formulei în câte o interpretare a ei se numesc minitermeni sau clauze conjunctive, respectiv maxitermeni sau clauze disjunctive.

Page 20: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

20

2.2. Sistemul deductiv al calculului propoziţiilor 2.2.1. Demonstraţie şi deducţie

Abordarea sintactică este susceptibilă de un grad înalt de formalizare. Simbolurile sunt iniţial neinterpretate şi servesc la construirea unui sistem deductiv abstract. Prin interpretarea ca propoziţii se obţin consecinţe noi despre logica acestora.

Un sistem formal este definit de: 1) un alfabet de simboluri, 2) o mulţime de formule bine formale, 3) o mulţime de axiome, 4) reguli de deducţie.

Sistemul formal L este definit astfel: 1) alfabetul simbolurilor este infinit, ~, →, (, ), p1, p2, ...; 2) o formulă bine formată (pe scurt fbf) este definită recursiv:

a) pi este o formulă fbf; b) dacă A şi B sunt formule fbf, (~A) şi (~B) sunt formule fbf; c) mulţimea formulelor fbf este generată numai prin regulile a) şi b);

3) oricare ar fi formulele fbf A, B, C, următoarele formule fbf sunt axiomele lui L:

L1 (A→ (B → A)), L2 ((A → (B → C)) → (( A → B) → (A → C))), L3 ((( ~ A) → (~ B)) → (B → A)).

4) regula de inferenţă este MP (modus ponens): oricare ar fi formulele fbf A, B, din A şi (A → B) rezultă B.

Din categoria simbolurilor primitive fac parte: a) variabilele individuale; b) conectivele logice: conjuncţie, negaţie;

Întrucât reducerea numărului conectivelor logice duce la pierderea semnificaţiei naturale a proceselor inferenţiale, pentru raţiuni practice se acceptă drept primitive toate conectivele logice uzuale ale calculului propoziţional:

c) cuantificatorul existenţial ∃. Cuantificatorul universal ∀ poate fi exprimat

cu ajutorul cuantificatorului existenţial prin transcrierea:

∀ xF ⇔ ~(∃)~F

d) simbolurile relaţionale; e) simbolurile funcţionale; f) câte o constantă individuală.

Page 21: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

21

Prima noţiune care este introdusă în cadrul unui sistem formal este aceea de demonstraţie. Definiţie. Se numeşte demonstraţie secvenţa de formule A1, A2, ..., An astfel că: 1) Ai (1 ≤ i ≤ n) este axiomă sau 2) Ai urmează din Aj, Ak (j <i, k<i) două formule anterioare ale secvenţei prin aplicarea

lui MP.

Ultima formulă An este o teoremă în L, iar secvenţa este demonstraţia lui An în L. Exemplu: Fie: A1=p1→(p2→p3), A2=(p1→(p2→p3)) →((p1→p2) →(p1→p1)), A3=(p1→p2) →(p1→p1) Deci, A3 este o teoremă în L iar A1, A2, A3 demonstraţia lui A3 în L.

Într-adevăr, întrucât axiomele sunt scrise pentru A, B, C din L, este suficient să punem A = p1, B = p2, C = p1, şi se obţin: L1 p1 → (p2 → p1), L2 (p1 → (p2 → p1)) → ((p1 → p2) → (p1 → p1)). Aplicăm acum regula MP formulelor A=p1 → (p2 → p1) şi B=(p1 → p2) → (p1 → p1). Din A afirmat de L1 şi A → B afirmat de L2, deducem B adică:

(p1 → p2) → (p1 → p1), MP (L1, L2) Noţiunea de demonstraţie este lărgită de cea de deducţie. Definiţie. Fie o mulţime de formule Γ∈L. Se numeşte deducţie din Γ o secvenţă A1, A2, ..., An, astfel că:

1) Ai este o axiomă (1 ≤ i ≤ n) sau 2) Ai este un membru a lui Γ sau 3) Ai urmează din MP din doi membri antecedenţi ai şirului Aj, Ak (j <i, k<i).

Spunem că ultimul termen An este deductibil din Γ sau consecinţă a lui Γ şi

scriem:

Γ |- An.

L

Page 22: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

Structura unei inferenţe.

Premise Concluzie inferenţă

Un lanţ inferenţial exprimat în limbaj obiect, ale cărui premise sunt axiome se

numeşte demonstraţie iar concluzia se numeşte teoremă. Se consideră că limbajele obiect cel mai larg utilizate în inteligenţă artificială

sunt limbajul calculului propoziţional şi limbajul calculului cu predicate de ordinul întâi. 2.3. Limbajul calculului cu predicate de ordinul întâi

Limbajul calculului cu predicate de ordinul întâi reprezintă o extensie a calculului propoziţional prin luarea în considerare a componentelor propoziţiilor, pentru a interpreta modul în care acestea participă la determinarea valorilor de adevăr ale formulelor. Extensia se referă la simbolurile primitive ale limbajului. Propoziţia este considerată a avea o structură cu două componente:

• predicatul – ce specifică semnificaţia funcţională a propoziţiei; • argumentul predicatului – specifică semnificaţia suportului funcţional al

propoziţiei.

Orice predicat este P(x) joacă rolul de funcţie propoziţională deoarece pentru orice valoare a argumentului independent x, acesta ia ca valoare o propoziţie, cu valoarea de adevărat sau fals. Numărul de obiecte individuale ce compun argumentul reprezintă aritatea predicatului. Astfel pentru:

n=0 – predicatul este o propoziţie; n=1 – predicatul specifică o proprietate a argumentului; n=2 – predicatul specifică o proprietate binară; n=3 – relaţie n-ară.

Orice predicat este de ordinul întâi dacă variabilele sale nu sunt predicate (se

poate spune despre astfel de variabile că pot fi considerate predicate de ordinul zero). Un predicat care are cel puţin una din variabilele sale individuale predicate de ordinul întâi se spune că este un predicat de ordinul doi. Se poate spune în general că un predicat este de ordin n dacă cel puţin una din variabilele sale este un predicat de ordinul n-1. Pentru calculul cu predicate de ordinul întâi formulele se formează după regulile limbajului calculului propoziţional, în care variabilele propoziţionale sunt înlocuite cu predicate. În relaţia folosită pentru predicate, variabilele au semnificaţie nu prin simbolurile folosite, ci prin poziţia şi rolul pe care îl joacă în definirea predicatului respectiv. Variabilele folosite în aceste notaţii sunt denumite variabile formale, iar notaţia definitorie pentru predicate este denumită expresie predicativă sau ion.

22

Se spune că P(x,y) şi P(u,v) sunt diferite ataşări de variabile formale pentru aceeaşi expresie predicativă primară P(_1, _2) iar P(a, b) este o instanţă a acestei expresii predicative în care a şi b au fost asignate primului şi respectiv celui de-al doilea

Page 23: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

23

argument al predicatului. Pentru aprecierea valorii de adevăr în raport cu domeniul în care iau valori variabilele individuale ale predicatelor componente, se introduc o serie de operatori unari denumiţi şi cuantificatori ce acţionează asupra variabilelor.

cuantificatorul universal indică faptul că formula prefixată este validă pentru toate valorile posibile în domeniul variabilei x; cuantificatorul existenţial indică faptul că formula prefixată este validă

pentru cel puţin o valoare din domeniul variabilei x.

Teoria demonstraţiei la calculul cu predicate de ordinul întâi foloseşte pe lângă axiomele şi regulile de inferenţă ale limbajului calculului propoziţional şi următoarele axiome:

|= ∀ xA(x) → A(r) |= A(r) → ∃ xA(x)

în care:

x este orice variabilă A(x) este o formulă r reprezintă orice variabilă nu neapărat distinctă de x A(r) este rezultatul substituţiei libere cu r a oricărei apariţii libere a variabilei x în A(x).

Page 24: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

24

CAPITOLUL 3 SISTEME EXPERT 3.1. Sisteme expert – generalităţi Sistemele expert bazate pe cunoştinţe sau pe scurt sistemele expert utilizează cunoştinţele omeneşti pentru a rezolva probleme care necesită în mod normal inteligenţa omenească. Aceste sisteme expert reprezintă cunoştinţe de expert ca date sau reguli într-un calculator. Aceste reguli şi date pot fi apelate atunci când este necesară rezolvarea unei probleme. Cărţile şi manualele conţin o cantitate impresionantă de informaţii dar este necesar un om care să le citească şi să le interpreteze pentru ca aceste cunoştinţe să poată fi utilizate. Programele de calculator convenţionale realizează sarcini utilizând logică de decizie convenţională -- conţinând puţine cunoştinţe în afara algoritmului de bază pentru rezolvarea unei probleme specifice şi condiţiile de graniţă necesare. Cunoştinţele programului sunt adesea parte integrată a codului programului şi deci dacă cunoştinţele se schimbă atunci se va schimba şi programul şi va trebui să fie rescris. Sistemele bazate pe cunoştinţe colectează fragmente mici de cunoştinţe omeneşti esenţiale (know-how) într-o bază de cunoştinţe, cunoştinţe care au fost utilizate pentru raţionamente în cazul rezolvării unor probleme utilizând informaţia cea mai adecvată. O problemă diferită care se încadrează în domeniul bazei de cunoştinţe poate fi rezolvată utilizând acelaşi program fără reprogramare. Abilitatea acestor sisteme de a simula raţionamentele prin intermediul reacţiilor inverse (feedback) şi de a permite un anumit grad de siguranţă şi incertitudine furnizează o facilitate suplimentară pe care nu o întâlnim în cazul programării convenţionale.

Multe sisteme expert sunt dezvoltate prin intermediul unor unelte software specializate numite “shells”. Aceste “shells” sunt echipate cu un mecanism de interfaţă (înlănţuire înapoi – backward chaining, înlănţuire înainte - forward chaining sau amândouă) şi solicită ca introducerea cunoştinţelor în concordanţă cu un anumit format (de exemplu toate care au aceeaşi importanţă). De asemenea “shells” au un anumit număr de facilităţi cum ar fi unelte pentru scrierea hipertextului, pentru construirea interfeţelor prietenoase, pentru manipularea listelor, şirurilor şi obiectelor şi interfaţarea cu programe şi baze de date externe. Aceste “shells” sunt calificate ca limbaje cu toate că au un domeniu de aplicare mult mai îngust decât cele mai multe limbaje de programare. Pentru mai multe detalii cu privire la “shells” pentru sisteme expert vezi “Expert System Shells at Work” serie de Schmuller, PC AI (1991-1992).

Page 25: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

3.2. Structura generală a unui sistem expert

O ramură a inteligenţei artificiale este reprezentată şi de către sistemele expert. Un sistem expert este un program care urmăreşte cunoştinţele, raţionează pentru obţinerea rezultatelor într-o activitate dificilă întreprinsă de regulă de experţii umani. Dacă un expert uman are cunoştinţe într-un domeniu specific, un sistem expert utilizează cunoştinţele ce sunt stocate într-o bază de cunoştinţe, bază formată din cunoştinţele asociate domeniului respectiv. Experţii umani raţionează şi ajung la concluzii pe baza cunoştinţelor pe care le posedă, sistemele expert raţionează utilizând cunoştinţele stocate în baza de cunoştinţe. Din punct de vedere funcţional, un sistem expert poate fi definit astfel: un sistem expert este un program care urmăreşte un grup de cunoştinţe pentru a obţine în acelaşi mod ca şi experţii umani a rezultatelor despre activităţi dificil de examinat. Principala caracteristică a sistemelor expert este derivată din baza de cunoştinţe împreună cu un algoritm de căutare specific metodei de raţionare. Un sistem expert tratează cu succes probleme pentru care nu există o soluţie algoritmică clară. Structura generală a unui sistem expert este prezentată în figura următoare:

Expert uman

Inginer de cunoştinţe

Mod

ul d

e ac

hiziţie

a

cunoşt

inţe

lor Baza de

cunoştinţe

Baza de fapte

Mecanism de inferenţă

Modul de explicare

Inte

rfaţ

a ut

iliza

tor

Utilizator

Achiziţia de cunoştinţe

Reprezentarea cunoştinţelor

Tratarea cunoştinţelor

Utilizarea cunoştinţelor

3.3. Funcţionarea unui sistem expert

Un sistem expert presupune existenţa unor reguli de forma:

Dacă situaţie Atunci acţiune.

Un loc aparte îl ocupă regulile deductive (sau inferenţe) care sunt de tipul:

Dacă premisa este adevărată atunci concluzia este adevărată.

Reprezentarea cunoştinţelor. Cunoştinţele care sunt reprezentate în baza de fapte sunt cunoştinţe afirmative.

25

Page 26: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

Cunoştinţele conţinute în reguli se numesc cunoştinţe operatorii. Ele indică modul cum sunt folosite faptele. Din acestea se obţin raţionamente sau moduri de acţiune.

Mulţimea de reguli şi de fapte formează baza de cunoştinţe. Cunoştinţele sistemului de control se numesc strategii de control.

Motorul inferenţial.

La un sistem expert este necesar să fie dată o stare a bazei de fapte în care să poată fi recunoscute regulile aplicabile. Această operaţie se numeşte filtrare. Preselecţia regulilor înaintea filtrării se numeşte restricţionare.

După ce s-a făcut preselecţia şi filtrarea trebuie aleasă o strategie de control (operaţie de selectare). Strategiile de control la sistemele expert. Fie o mulţime de reguli conţinute în baza de cunoştinţe sau o submulţime din aceste reguli. Filtrarea constă în a găsi printre aceste reguli pe acelea a căror precondiţie este satisfăcută. Trebuie deci, comparată precondiţia cu informaţiile care există în baza de fapte. De regulă se aplică o regulă deductivă de tipul celei arătate mai sus. În cazul în care asupra acestei operaţii nu se aplică restricţii atunci activitatea decurge conform schemei logice prezentate în continuare.

Restricţia nulă

La nivelul filtrării propriu-zise se poate ameliora procesul prin introducerea uneia sau mai multor restricţii. În acest caz între informaţiile conţinute în baza de fapte şi precondiţiile existente se aplică anumite restricţii care vor selecta numai acele fapte sau reguli care respectă restricţia respectivă obţinându-se mulţimea faptelor şi a regulilor ca în figura de mai jos.

26

Page 27: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

Funcţionarea unui sistem cu restricţie

27

Page 28: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

28

CAPITOLUL 4 REALIZAREA UNUI PROGRAM ÎN MEDIUL DE PROGRAMARE CLIPS 4.1. Introducere

CLIPS este un limbaj destinat dezvoltării sistemelor expert, realizat de Software Technology Branch (STB), în cadrul laboratoarelor NASA Johnson Space Center. Denumirea de CLIPS este o prescurtare pentru C Language Integrated Production System. Este un limbaj bazat pe reguli, orientat-obiect şi procedural, asemănător cu alte limbaje de acest gen OPS5, ART, ART_IM, Eclipse, Cognate, dar mult mai puternic. Faţă de sistemul expert LISP care prezintă o slabă compatibilitate între diferitele tipuri de calculatoare, un cost înalt pentru componentele software şi hardware, precum şi o slabă integrare cu alte limbaje, realizarea CLIPS-ului sub mediul de dezvoltare C a permis înlăturarea acestor lipsuri. Partea orientată obiect numită şi COOL (CLIPS Object-Oriented Language) este o combinaţie între trăsăturile găsite şi la alte limbaje orientate obiect ,cum ar fi CLOS (Common Lisp Object System) şi SmallTalk, la care s-au adus şi idei noi. Partea procedurală a CLIPS-ului este asemănătoare cu limbajele C, Ada, Pascal şi foarte apropiate sintactic de LISP. Versiunea 5.0 a CLIPS-ului este cea care introduce suportul de programare procedurală şi orientată obiect; versiunea 5.1 aduce cu ea suportul software pentru programarea sub Windows, MS-DOS şi interfeţele Macintosh. Datorită integrării totale cu alte limbaje asemănătoare cu C şi Ada, CLIPS-ul poate fi apelat de un alt limbaj procedural şi după execuţia funcţiilor acesta returnează controlul înapoi programului ce a realizat apelul. De asemenea codul procedural poate defini şi funcţii externe, care după ce vor fi apelate de CLIPS şi îşi vor termina execuţia vor returna controlul înapoi CLIPS-ului. 4.2. Execuţia unui program în mediul de programare CLIPS

Pentru început vom încărca în mediul de programare CLIPS un exemplu realizat, pe care îl vom studia. Acest exemplu se găseşte în fişierul d1.clp.

Pentru execuţia unui program în mediul CLIPS, mai întâi se lansează în execuţie acest mediu de programare cu ajutorul comenzii: clipswin.exe pentru sistemul de operare Windows sau clips386.exe pentru sistemul de operare DOS. Dacă CLIPS-ul a fost instalat corect va apare pe ecran prompter-ul:

Page 29: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

29

CLIPS> Din acest moment utilizatorul poate introduce comenzi, acestea fiind executate direct de CLIPS. Acest mod de a lansa direct comenzi mai este denumit şi top level. Modul normal de ieşire din CLIPS este comanda: (exit) dar mai există uneori şi alte posibilităţi (de exemplu sub Windows se poate închide fereastra sau se poate folosi scurtătura CTRL-Q, corespunzătoare comenzii Quit CLIPS din meniul File).

Diferenţa între (exit) cu paranteze şi exit fără paranteze este ca nucleul CLIPS-ului îl va identifica pe primul ca fiind o comandă şi îl va asocia pe al doilea cu un simbol. Încărcarea în mediul CLIPS-ului a construcţiilor aflate într-un fişier se realizează cu ajutorul comenzii load. Sintaxa comenzii load este următoarea : ( load <file-name> ) Fişierul al cărui nume este specificat cu <file-name>, poate fi realizat cu ajutorul editorului de text al CLIPS-ului sau cu un alt editor. Marile avantaje pe care le prezintă folosirea unui fişier pentru stocarea construcţiilor se observă în momentul în care CLIPS-ul verifică sintaxa construcţiilor sau când se lansează în execuţie programul. Dacă s-ar realiza introducerea construcţiilor direct de la prompter în momentul în care ar fi fost semnalată o eroare, ar fi trebuit să reintroducem construcţia respectivă. Presupunând că avem într-un fişier exemplu.clp aflat pe discul C: construcţii de tipul deffacts, deftemplate, defrule, atunci încărcarea acestora se va face cu: (load “C:exemplu.clp” ) Dacă fişierul respectiv se află într-un director şi trebuie să specificăm calea, atunci pentru a rezolva problema backslash-ului care este interpretat de CLIPS ca fiind un caracter special, vor trebui folosite două backslash-uri pentru a crea un singur backslash. Specificarea căii se face astfel: ( load “C : \ \ temp \ \ programe \ \ exemplu.clp” ) Comanda load returnează simbolul TRUE atunci când nu sunt erori în fişierul încărcat, respectiv simbolul FALSE în caz contrar. Dacă este activată watch compilations atunci va fi afişat un mesaj informaţional (incluzând numele şi tipul construcţiei) pentru fiecare construcţie încărcată. Dacă nu este activată atunci pentru fiecare construcţie va fi afişat un caracter (“*” pentru defrule; “$” pentru deffacts; “%” pentru deftemplate; “:” pentru defglobal; “!” pentru deffunctions; “^” pentru defgeneric; “&” pentru defmethod; “#” pentru defclass; “@” pentru definstances; “~” pentru defmessage-handler ; “+” pentru defmodule). Nu este obligatorie punerea tuturor construcţiilor într-un singur fişier, dar în cazul folosirii mai multor fişiere trebuiesc încărcate toate fişierele pentru o bună execuţie a programului. Dacă se folosesc construcţii deffacts se dă comanda reset pentru a introduce faptele în baza de fapte, iar apoi comanda run. LIPS> (watch compilations)

CLIPS> (load “exemplu.clp”) Defining deftemplate: template_1

Defining deffacts: initial_facts Defining defrule: regula_1 +j TRUE

Page 30: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

30

In acest exemplu fictiv se observă mesajele afişate pentru fiecare construcţie încărcată. Şirul “+j” afişat la sfârşitul lui “Defining defrule” este un mesaj intern al CLIPS-ului despre structura internă a regulii compilate. Pentru acelaşi exemplu fictiv dacă nu ar fi activată watch compilations, efectul încărcării fişierului ar fi următorul: LIPS> (clear)

CLIPS> (unwatch compilations) CLIPS> (load “exemplu.clp”) %$* TRUE CLIPS>

Pentru a salva toate construcţiile existente în CLIPS la un moment dat, se foloseşte comanda save a cărei sintaxa este următoarea: ( save <file-name> ) In general folosirea unui editor de către utilizator implică şi realizarea modificărilor şi salvarea construcţiilor cu acelaşi editor, din acest motiv folosirea comenzii save este mai rară (dezavantaj: nu se pot salva în fişier doar anumite construcţii).

La fel ca şi la comanda open se poate realiza salvarea construcţiilor într-un fişier aflat într-un anumit director prin specificarea căii acestuia. ( save “C : \ \ temp \ \ programe \ \ exemplu.clp” ) Conţinutul fişierului d1.clp este: (deftemplate persoana (multislot nume) (slot grupa) (slot an) (slot ochi) ) (deffacts date_initiale (persoana (nume Ion)(grupa 1202)(an 2)(ochi verzi)) (persoana (nume Mihai)(grupa 1202)(an 2)(ochi albastri)) (persoana (nume Lucian)(grupa 1204)(an 2)(ochi caprui)) (persoana (nume Razvan)(grupa 1203)(an 2)(ochi verzi)) (persoana (nume Petrica)(grupa 1202)(an 2)(ochi negri)) (persoana (nume Marcel Tanase Radu)(grupa 1203)(an 3)(ochi rosii)) (persoana (nume Vasile Piulita)(grupa 1203)(an 3)(ochi albastri)) ) (defrule ochi_deschisi (and (persoana (nume $?n1) (ochi ?c1&albastri|verzi) ) (persoana (nume $?n2 &~ $?n1) (ochi ?c2&albastri|verzi) )) => (printout t "Persoanele " $?n1 " si " $?n2 " sunt frati " crlf ) )

Shell-ul unui limbaj bazat pe reguli cum este CLIPS-ul sau oricare alt sistem expert are practic trei componente de bază:

o Lista de fapte – conţine datele ce vor interacţiona cu programul; o Baza de cunoaştere – conţine toate regulile; o Motorul de inferenţă – controlează execuţia generală a regulilor

programului.

Page 31: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

CLIPS-ul este destinat dezvoltării de software ca să ajute la o apropiere de modelul de cunoaştere şi expertiză umană. Avem trei modalităţi de reprezentare a cunoaşterii în CLIPS:

o Regula – care reprezintă cunoaşterea euristică bazată pe experienţă; o Funcţiile – care reprezintă cunoaşterea procedurală; o Programarea Orientată Obiect – cerută tot de cunoaşterea procedurală.

Se poate realiza în CLIPS software care să folosească fie doar reguli, fie doar obiecte, fie o combinaţie între acestea. Motorul de inferenţă este cel care va decide care dintre reguli va fi executată şi când, deşi se va vedea ca utilizatorul are posibilitatea să stabilească pentru fiecare regulă o prioritate şi chiar un moment de timp la care să înceapă execuţia regulii. Datele reprezentate în CLIPS de fapt sunt cele care vor stimula execuţia unei reguli, funcţii sau obiect. În figura 1 se prezintă comenzile scrise pentru încărcarea construcţiilor din fişierul d1.clp în mediul CLIPS.

Figura 1 Selectând din meniul principal Windows, opţiunea Facts Window se afişează fereastra din figura 2.

Figura 2.

31

Page 32: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

32

Putem înţelege rezultatul execuţiei programului. La începutul programului se află constructorul deftemplate. 4.3. Structura programului CLIPS 4.3.1. Constructorii Mai mulţi constructori de definiţie apar în CLIPS: defmodule, defrule, deffacts, deftemplate, defglobal, deffunction, defclass, definstances, defmessagehandler, defgeneric şi defmethod. Toate construcţiile în CLIPS sunt cuprinse între paranteze, începând cu o paranteză deschisă ‘ ( ‘ şi terminându-se cu o paranteză închisă ‘ ) ‘. Aceşti constructori se folosesc pentru a adăuga o informaţie la baza de cunoaştere a CLIPS-ului. Faţă de funcţiile apelate aceştia nu returnează niciodată o valoare. Se oferă posibilitatea adăugării unui comentariu la numele construcţiei (excepţie face doar defglobal). Comentariile pot fi amplasate în CLIPS utilizând punctul şi virgula ‘ ; ’ (semicolon), iar CLIPS-ul va ignora tot ce va găsi după punct şi virgulă. Dacă avem la început de linie punct şi virgulă întreaga linie va fi tratată ca fiind un comentariu. În momentul în care se va dori lansarea în execuţie a unui program CLIPS-ul va încerca toate construcţiile ignorând comentariile. 4.3.2. Faptele

În CLIPS sunt trei forme principale de reprezentare a informaţiei : fapte (facts), obiecte şi variabilele globale. Faptele sunt forma principală de reprezentare a informaţiei în sistemul CLIPS. Fiecare fapt reprezintă un element de informaţie care va fi plasat în lista de fapte numită factlist. Faptul este forma fundamentală de date folosită de reguli şi constă într-un nume de relaţie urmat de zero sau mai multe sloturi (câmpuri simbolice cărora li se pot asocia valori). Forma generală a unui fapt va fi următoarea :

fact => ( nume_relaţie [ (slot)* ] [ (multislot)* ] ) Parantezele pătrate indica faptul ca existenţa sloturilor este opţională, iar semnul * arată faptul că putem avea zero sau mai multe sloturi. Se observă faptul că în CLIPS trebuie să cuprindem între paranteze atât numele de relaţie cât şi sloturile. Un slot este la rândul său format dintr-un nume de slot, căruia i se poate asocia o valoare. Există însă şi posibilitatea asocierii de mai multe valori şi în acest caz spunem ca avem un multislot. Acest lucru este posibil datorită existenţei în CLIPS a multicâmpului (multifield) care este de fapt o secvenţă de zero sau mai multe câmpuri. Afişarea în CLIPS a unei valori multicâmp se va realiza prin închiderea acestuia între paranteze. Trebuie reţinut faptul că o valoare multifield (a) nu este unul şi acelaşi lucru cu o valoare câmp (single field) (a) .

slot => ( nume_slot valoare ) ultislot => ( nume_slot [ valoare ]* )

Un slot trebuie să aibă obligatoriu asociată o valoare, pe când la un multislot asocierea unei valori nu e obligatorie. Valoarea pe care o asociem unui slot poate lua forma unui tip de dată primitivă (integer, float, symbol, string) . Exemple de fapte ar putea fi : (start) (adresa (nume-strada “Alexandru cel Bun”) (numar-strada 47)

Page 33: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

33

(bloc E1) (scara D) (apartament 31)) (persoana (nume Ion Vasile) (culoare-par) În primul caz faptul (start) nu are nici un slot. În al doilea caz faptul cu numele de relaţie adresa are mai multe sloturi şi anume : nume-strada, numar-strada, bloc, scara, apartament. Se observă faptul că putem asocia unui slot valori de diferite tipuri. Astfel valoarea slotului nume-strada este un şir de caractere, valorile sloturilor numar-strada şi apartament sunt întregi, iar valorile sloturilor bloc şi scara sunt simboluri. În ultimul caz, pentru faptul persoana, atât slotul nume, cât şi slotul culoare-par sunt multisloturi (au asociate două şi respectiv zero valori).

Trebuie reţinut faptul că în CLIPS nu are nici o importanţă ordinea apariţiei sloturilor şi de aceea următoarele două fapte sunt văzute ca fiind identice deşi au schimbată ordinea a două sloturi : (student (nume Pascal B. Mihaita) (nr_grupa 1407)

(an IV)) (student (nr_grupa 1407)

(nume Pascal B. Mihaita) (an IV)) . 4.3.3. Constructorul deftemplate

Pentru crearea unor fapte care sunt formate din sloturi, trebuie mai întâi ca acestea să fie declarate, astfel încât CLIPS-ul să poată să interpreteze acele sloturi ca fiind valide şi nu ca fiind nişte funcţii. Special pentru acest lucru avem construcţia deftemplate care va face ca o grupare de fapte cu acelaşi nume de relaţie să conţină un anumit tip de informaţie. Un constructor deftemplate are rolul de a crea un şablon ce va fi folosit pentru a accesa câmpurile faptului după nume. Acesta este identic cu o înregistrare sau structură definită într-un limbaj de programare cum ar fi Pascal sau C. Sintaxa unui constructor deftemplate este:

(deftemplate <deftemplate-name> [<comment>] <slot-definition>*)

<slot-definition> ::= (slot <slot-name> ) | (multislot <slot-name> ) Folosind această sintaxă faptul student de mai sus ar putea fi descris astfel: (deftemplate student “Comentariu optional”

(multislot nume) (slot nr_grupa) (slot an)) Redefinirea unui deftemplate duce la ignorarea definiţiei anterioare. Nu putem redefini un deftemplate cât timp acesta este folosit (de ex. dacă o regulă foloseşte un fapt definit de acel deftemplate). O construcţie deftemplate poate avea orice combinaţie de sloturi single-field şi sloturi multi-field. CLIPS-ul va aplica întotdeauna definiţiile pentru sloturi şi de aceea vor apărea întotdeauna erori la asocierea unei valori multiple pentru un câmp single-field. De asemenea în program se foloseşte constructorul deffacts.

Page 34: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

34

4.3.4. Constructorul deffacts

Într-un program este foarte avantajos ca după ce au fost declarate construcţiile deftemplate (dacă este necesară prezenţa lor) să poată fi asertate toate faptele ce reprezintă baza iniţială de cunoaştere într-o singură aserţiune. Aceste fapte sunt cunoscute a fi adevărate încă înainte de rularea programului. Se poate defini un grup de fapte care reprezintă baza iniţială de cunoaştere cu ajutorul construcţiei deffacts. Sintaxa comenzii este următoarea: (deffacts <deffacts name> [<optional comment>] <facts>* ) În cadrul construcţiei deffacts poate fi folosit ca nume orice simbol valid. După numele construcţiei urmează comentariile, acestea sunt opţionale şi trebuiesc puse între paranteze. După acestea urmează faptele ce vor fi asertate în lista de fapte. Pentru a realiza asertarea faptelor dintr-o declaraţie deffacts trebuie obligatoriu utilizată comanda reset. Efectul acestei comenzi este acela că şterge toate faptele din baza de fapte (ca şi comanda clear ) şi introduce faptele din declaraţiile deffacts. Sintaxa comenzii este: (reset)

Se va putea observa de asemenea că o dată cu comanda reset este introdus în lista de fapte un nou fapt generat de aceasta, numit şi iniţial fact. CLIPS-ul foloseşte acest fapt pentru a aprinde o regulă care nu are nici un element condiţional în LHS (se va vedea în continuare). Introducerea acestui fapt se face automat de către CLIPS cu ajutorul a doua construcţii : (deftemplate initial-fact) (deffacts initial-fact (initial-fact)) Identificatorul de fapt al lui initial-fact este întotdeauna f-0 , deoarece acesta este primul fapt ce va fi introdus de CLIPS în lista de fapte după ce a fost dată comanda reset. Dacă se doreşte o vizualizare a tuturor construcţiilor deffacts de poate utiliza comanda get-deffacts-list.

CLIPS> (clear) CLIPS> (assert (a)) <Fact-0> CLIPS> (facts)

f-0 (a) For a total of 1 facts.

CLIPS> (get-deffacts-list) (initial-fact)

CLIPS> (watch facts) CLIPS> (deftemplate data (slot zi) (slot luna) (slot an) )

CLIPS> (deftemplate angajat (multislot nume) (slot salariu) ) CLIPS> (deffacts date-initiale “Baza de salarizare”

(angajat (nume Cozma George) (salariu 1500000) ) (angajat (nume Miron Liliana) (salariu 1650000) ) (angajat (nume Mazilu Razvan) (salariu 1580000) )

(data (zi 31) (luna 9 ) (an 1991) ) ) CLIPS> (deffacts salariu_maxim)

CLIPS>(get-deffacts-list)

Page 35: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

35

(initial-fact date-initiale salariu_maxim) CLIPS> (reset)

<== f-0 (a) ==> f-0 (initial-fact)

==> f-1 (angajat (nume Cozma George) (salariu 1500000) ) ==> f-2 (angajat (nume Miron Liliana) (salariu 1650000) )

==> f-3 (angajat (nume Mazilu Razvan) (salariu 1580000) ) ==> f-4 (data (zi 31) (luna 9) (an 1991) )

CLIPS> Se observă existenţa încă de la startarea CLIPS-ului a construcţiei deffacts

initial-fact. Funcţia get-deffacts-list ne informează de existenţa celor trei construcţii deffacts, dar abia după ce se dă comanda reset în lista de fapte vor fi introduse faptele acestora. Ultima construcţie deffacts salariu_minim nu are nici un fapt, existenţa ei fiind oarecum inutilă. 4.3.5. Fapte ordonate

Un fapt ordonat (ordered fact) constă într-un nume de relaţie urmat de zero sau mai multe câmpuri separate de spaţii. Ar putea fi comparat cu un slot de tip multifeld în care se pun toate valorile ce urmează după numele de relaţie. Lipsa sloturilor nu face necesară existenţa unei construcţii deftemplate care să le expliciteze. Din acest motiv faptele care corespund unei construcţii deftemplate se mai numesc şi deftemplate facts sau non-ordered facts. Faptele ordonate sunt create automat de un deftemplate implicit al CLIPS-ului (faţă de celelalte fapte care necesită existenţa unui deftemplate explicit). În acest mod se poate implementa foarte uşor o stivă sau o coadă, sau se pot reprezenta şiruri de elemente. De exemplu:

(numere_pare 2 4 6 8 10) (numere_prime 2 3 5 7 11) Aceste fapte se pot realiza în mod echivalent, folosind o construcţie deftemplate:

(deftemplate numere_pare (multislot valori))

În acest caz faptul echivalent va arăta astfel: (numere_pare (valori 2 4 6 8 10)) Câmpurile într-un fapt ordonat pot fi, orice tip de dată primitivă (cu excepţia

primului câmp care reprezintă numele de relaţie şi trebuie să fie de tip simbol), şi nu există restricţii privitoare la ordinea acestora. Totuşi următoarele simboluri sunt rezervate şi nu pot fi primul câmp dintr-un fapt (numele de relaţie) : test, and, or, not, declare, logical, object, exists, şi forall. Aceste simboluri rezervate pot fi folosite la numele unui slot, dar oricum acest lucru nu este recomandat. În următoarele exemple de fapte :

(test de inteligenta artificiala) (Test de inteligenta artificiala) în primul caz CLIPS-ul ne va informa că nu putem folosi ca nume de relaţie simbolul test, dar în al doilea caz acesta va accepta ca nume de relaţie simbolul Test, deoarece după cum s-a mai spus CLIPS-ul este case-sensitive şi vede cele două câmpuri ca fiind total diferite. În al doilea fapt lista de elemente este formată din trei câmpuri: de , inteligenta, artificială. CLIPS-ul face deosebirea între un ordered fact şi un deftemplate fact extrăgând primul câmp din fapt (numele de relaţie) şi comparând-ul apoi cu numele fiecărui deftemplate. Dacă la un deftemplate fact schimbând ordinea sloturilor se

Page 36: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

36

obţinea acelaşi fapt, în schimb la ordered fact schimbând ordinea câmpurilor se obţine un alt fapt. Din acest motiv următoarele fapte sunt văzute de CLIPS ca nefiind identice: (tatal_lui Toma Costache) | (lista 2 3 4)

(tatal_lui Costache Toma) | (lista 4 3 2) În cazul unui fapt ordonat de forma :

(adresa “Alexandru cel Bun” 47 E1 D 31) este în mod evident mai avantajoasă folosirea unui fapt de tip deftempate unde să se specifice clar prin numele sloturilor semnificaţia fiecărui câmp. De aceea de cele mai multe ori este recomandată folosirea unui deftemplate, deoarece numele sloturilor fac un fapt mai uşor de înţeles şi folosit. (adresa (nume_strada “Alexandru cel Bun”) (numar_srada 47) (bloc E1) (scara D) (apartament 31))

Există două cazuri în care folosirea unui fapt ordonat este mai avantajoasă şi anume unul în care faptul conţine un singur slot (numele de slot ar putea fi sinonim cu numele de fapt), şi al doilea caz în care faptul este folosit ca un flag sau ca un indicator. De exemplu:

(conditie_satisfacuta_prematur) (timp 7:00)

4.3.6. Adăugarea şi ştergerea faptelor Toate faptele cunoscute de CLIPS sunt păstrate în lista de fapte ( fact list ). Pentru a realiza adăugarea sau ştergerea unui fapt se folosesc comenzi, cum ar fi assert pentru adăugarea la listă şi retract pentru ştergerea din listă. Sintaxa comenzii assert este următoarea : (assert <fact>+) Prin <fact>+ se înţelege faptul că putem aserta un nou fapt sau chiar mai multe fapte noi deodată. Astfel pentru a adauga un fapt cu mai multe sloturi procedăm astfel:

CLIPS> (deftemplate adresa (multislot nume-strada) (slot bloc) (slot scara)

(slot apartament)) CLIPS>(assert (adresa (nume-strada Alexandru cel Bun 47) (bloc E1)

(scara D) (apartament 31))

<Fact-0> CLIPS>

Trebuie reţinut faptul că funcţia assert returnează o valoare şi anume adresa de fapt. În cazul în care se asertează mai multe fapte deodată valoarea returnată va fi indexul ultimului fapt introdus. În cazul nostru s-a realizat introducerea unui singur fapt adresa care după ce a fost introdus în lista de fapte, i-a fost asociat identificatorul 0. Parantezele unghi < > sunt folosite ca delimitatori pentru a încadra numele unui articol. La fiecare nouă adăugare se va realiza automat o incrementare a numărului de fapte, această valoare fiind returnată de funcţia assert. Comanda facts este utilizată pentru afişarea faptelor aflate în lista de fapte. În cazul în care se utilizează comanda (facts) fără nici un parametru se va realiza afişarea tuturor faptelor din listă, dar dacă se doreşte o afişare a anumitor fapte, dorite de

Page 37: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

37

utilizator se pot folosi şi parametrii adiţionali ai acestei comenzi. Această facilitate se dovedeşte a fi foarte utilă atunci când avem un număr mare de fapte în listă. Sintaxa pentru comanda facts este: (facts [<start> [<end> [<maximum>] ] ] ) , unde <start>, <end>, <maximum> sunt numere întregi pozitive. După cum se vede toţi parametrii sunt opţionali (în paranteze pătrate) şi deci comanda poate funcţiona cu zero până la trei parametri. Dacă apare primul parametru <start> toate faptele cu indexul mai mare sau egal decât valoare lui <start> vor fi afişate. Dacă apare şi al doilea parametru <end> atunci toate faptele cu indexul mai mici sau egale decât valoarea lui <end> vor fi afişate. Dacă apare şi al treilea parametru <maximum>, atunci vor fi afişate evident un număr maxim de <maximum> fapte. Dacă se va da comanda (facts) rezultatul va fi următorul. CLIPS> (facts)

f-0 (adresa (nume-strada Alexandru cel Bun 47) (bloc E1) (scara D) (apartament 31))

For a total of 1 facts. CLIPS>

După cum se observa comanda (facts) ne spune la sfârşit şi numărul de fapte pe care le-a afişat pe display. De asemenea pentru fiecare fapt în parte va fi afişat şi identificatorul de fapt, în cazul nostru acesta fiind ‘f-0’. Orice fapt inserat în listă are asociat de către CLIPS un identificator unic care începe cu litera f şi este urmat de un întreg numit şi index de fapt.

În mod normal, CLIPS-ul nu acceptă introducerea unui duplicat în lista de fapte şi de aceea încercarea de asertare a unui fapt identic cu un altul anterior , va duce la returnarea unui mesaj de eroare.

CLIPS>(assert (adresa (nume-strada Alexandru cel Bun 47) (bloc E1) (scara D) (apartament 31))

FALSE CLIPS>(assert (adresa (nume-strada Alexandru cel Bun 47) (bloc E1)

(scara D) (apartament 30)) <Fact-1> CLIPS>

Tot aşa cum un fapt poate fi asertat în lista de fapte, tot aşa poate fi şi şters. Operaţia de ştergere a unui fapt se mai numeşte şi retractare şi se realizează cu comanda (retract) a cărei sintaxa este următoarea:

(retract <fact-index>+) După cum se vede avem posibilitatea de a şterge unul sau mai multe fapte din

listă. Încercarea de a şterge un fapt care nu există sau care a fost şters anterior duce de asemenea la afişarea unui mesaj de eroare. Comanda (retract) nu returnează nici o valoare.

CLIPS> (retract 0) LIPS> (retract 1)

CLIPS> (retract 1) [PRNTUTIL1] Unable to find fact f-1 CLIPS> Pentru a şterge faptele f-0 şi f-1 din listă amândouă o dată se putea folosi

comanda retact şi astfel: (retract 0 1)

Page 38: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

38

În CLIPS mai există şi comanda (clear) al cărei efect este acela de ştergere a tuturor faptelor din listă, indexul de fapt începând după aceasta din nou cu valoarea 0.

CLIPS> (clear) LIPS> (assert (a) (b) (c) (d))

<Fact-3> CLIPS>(facts 1 3 2) f-1 (b) f-2 (c) For a total of 3 facts. CLIPS>(assert (d)) FALSE

LIPS>(retract 0 2 3) CLIPS> (assert (d))

Fact-4> ;indexul de fapt este incrementat de unde a rămas LIPS> (facts 0) -1 (b) -4 (d) or a total of 2 facts. LIPS> (retract 5 1) PRNTUTIL1] Unable to find fact f-5 LIPS>(assert ( e )) Fact-5> LIPS>(facts) ;se observă că f-1 a fost şters mai sus !!! -4 (d) -5 (e) or a total of 2 facts. LIPS> (retract *) LIPS> (facts) LIPS> (assert ( numar (+ 3 5))) Fact-6> LIPS> (facts) -6 (numar 8) or a total of 1 facts. Putem observa din exemplul de mai sus că deşi faptul (d) a fost şters şi apoi reintrodus, indexul de fapt a fost incrementat în continuare. CLIPS-ul nu se ocupă de o reactualizare a indexului faptelor din listă, ceea ce face ca un fapt să aibă întotdeauna acelaşi index din momentul asertării sale în listă, până în momentul ştergerii sale. Se mai observă de asemenea că la asertarea faptului (e) spaţiile sunt ignorate şi că efectul comenzii (retract 5 1) este acela de a ne atenţiona că faptul cu indexul 5 nu există, fără însă a se opri de la ştergerea faptului cu indexul 1. Efectul comenzii (retract *) este asemănător cu cel al comenzii (clear) , singura excepţie fiind indexul de fapte care nu este resetat pe valoarea 0, ci îşi continuă incrementarea de la valoarea rămasă. La asertarea faptului numar CLIPS-ul va realiza automat operaţia de adunare astfel încât atunci când se va da comanda (facts) vom avea în listă faptul (numar 7). Se va vedea că ştergerea faptelor, duce şi la ştergerea regulilor aprinse de acele fapte din agendă.

Page 39: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

39

4.3.7. Modificarea şi duplicarea faptelor Pentru modificarea sloturilor unui fapt avem la dispoziţie comanda modify a cărei sintaxa este următoarea:

(modify <fact-index> <slolt-modifier>+) unde <slot-modifier> este:

(<slot-name> <slot-value>) După cum se observă avem posibilitatea modificării mai multor sloturi deodată.

Această comandă practic şterge faptul pe care dorim să-l modificăm şi introduce un nou fapt care are valorile sloturilor modificate de utilizator. Odată asertat noul fapt modificat are în mod evident şi un alt index de fapt. Trebuie reţinut faptul că nu se poate modifica decât un singur fapt, iar acesta trebuie să fie de tip template, adică să conţină sloturi (un fapt ordonat nu conţine sloturi şi deci nu poate fi modificat). Valoarea returnată de această funcţie în caz de succes este adresa faptului nou, iar în caz de eroare (de exemplu exista deja un fapt identic cu cel modificat, sau faptul cu numărul de index specificat nu există în lista de fapte) se returnează simbolul FALSE.

CLIPS> (deftemplate student (multislot nume) (slot nr_grupa) (slot an) ) CLIPS> (assert (student (nume Husleag Dumitru) (nr_grupa 1406) (an IV) ) (student (nume Colotin Florin) (nr_grupa 1305) (an III) ) ) <Fact-1> CLIPS> (modify 1 (nr_grupa 1406) (an IV) ) <Facts-2> CLIPS> (facts) f-0 (student (nume Husleag Dumitru) (nr_grupa 1406) (an IV)) f-2 (student (nume Colotin Florin) (nr_grupa 1406) (an IV)) For a total of 2 facts. CLIPS> (modify 1 (nume Violeta Diaconu)) [PRNTUTIL 1] Unable to find fact f-1 CLIPS> (modify 2 (nume Husleag Dumitru)) FALSE CLIPS> (facts) f-0 (student (nume Husleag Dumitru) (nr_grupa 1406) (an IV)) For a total of 1 facts.

Se observă faptul că se obţin două erori, prima deoarece nu exista în listă un fapt cu numărul de index f-1, a doua deoarece faptul modificat nu este acceptat de CLIPS fiind identic cu un alt fapt f-0 deja existent. Funcţia modify a returnat simbolul FALSE, dar faptul f-2 ce se dorea a fi modificat a fost deja retractat. La a doua eroare practic s-a pierdut o înregistrare din lista de fapte şi de aceea se recomandă a se verifica mai întâi dacă nu exista deja faptul ce se doreşte a fi introdus.

Comanda duplicate oferă posibilitatea utilizatorului de a realiza o copie modificată a unui fapt din lista de fapte (nu se poate realiza o copie identică, deoarece CLIPS-ul nu acceptă acest lucru). Acţiunea acestei comenzi este aproape similară cu cea a comenzii modify, cu excepţia faptului că de această dată nu este retractat faptul ce se modifică, în lista de fapte existând atât vechiul fapt cât şi faptul nou modificat. Sintaxa comenzii duplicate este: (duplicate <fact-index> <slolt-modifier>+) unde <slot-modifier> este:

(<slot-name> <slot-value>)

Page 40: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

40

De asemenea nu putem duplica decât un singur fapt, iar în cadrul acestuia putem modifica valorile câmpurilor unui slot sau a mai multor sloturi. Funcţia returnează ca şi funcţia modify în caz de succes adresa de fapt, a noului fapt duplicat, iar în caz de eroare simbolul FALSE. CLIPS> (duplicate 0 (an II) (nr_grupa 1207)) <Fact-3> CLIPS> (facts)

f-0 (student (nume Husleag Dumitru) (nr_grupa 1406) (an IV)) f-3 (student (nume Husleag Dumitru) (nr_grupa 1207) (an II)) For a total of 2 facts. CLIPS> (duplicate 0 (an II) (nr_grupa 1207) FALSE CLIPS> (duplicate 1 (an I)) [PRNTUTIL 1] Unable to find fact f-1 CLIPS> (facts) f-0 (student (nume Husleag Dumitru) (nr_grupa 1406) (an IV)) f-3 (student (nume Husleag Dumitru) (nr_grupa 1207) (an II)) For a total of 2 facts.

Şi de această dată s-a urmărit realizarea unor greşeli similare cu cele făcute la funcţia modify , dar după cum era de aşteptat nu s-a mai pierdut informaţie, deoarece funcţia duplicate nu retractează faptul ce se doreşte a fi duplicat. 4.3.8. Comanda watch CLIPS oferă o serie de comenzi pentru depanarea unui program. Cu ajutorul comenzii watch se pot urmări mai uşor faptele care sunt asertate sau retractate, fiind mai uşor de observat, ce schimbări se produc în lista de fapte. Sintaxa generală a comenzii este: (watch <watch-item>) unde <watch-item> poate fi unul din simbolurile: facts, rules, activations, statistics, complilations, focus sau all . Dacă se foloseşte cuvântul all atunci se validează toate watch-urile. Se pot realiza orice combinaţii de watch-uri. La startarea CLIPS-ului este activat doar watch compilations, toate celelalte nefiind active. Se poate observa acest lucru la încărcarea şi compilarea unui program. În momentul de faţa prezintă interes doar watch facts. Cu ajutorul acestei comenzi putem urmări faptele după cum urmează : CLIPS> (clear) CLIPS> (watch facts) CLIPS> (assert (a) (b)) ==> f-0 (a) ==> f-1 (b) <Fact-1> CLIPS> (deftemplate copil (slot nume) (slot tata) (slot mama)) CLIPS> (assert (copil (nume Ion) (tata Vasile) (mama Ana))) ==> f-2 (copil (nume Ion) (tata Vasile) (mama Ana)) <Fact-2> CLIPS> (modify 2 (nume Oana)) <== f-2 (copil (nume Ion) (tata Vasile) (mama Ana)) ==> f-3 (copil (nume Oana) (tata Vasile) (mama Ana))

Page 41: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

41

<Fact-3> CLIPS> (retract 3 1) <== f-3 (copil (nume Oana) (tata Vasile) (mama Ana)) <== f-1 (b) Secvenţa de caractere ==> ne arată că faptul a fost asertat, intrând în lista de fapte; pe când secvenţa de caractere <== ne arată că faptul a fost retractat. Comanda (watch facts) ne arată lista de fapte într-un mod dinamic, utilizatorul poate observa ce fapte intră şi ce fapte ies din listă. Comanda (facts) însă ne prezintă într-un mod static lista de fapte. Pentru a opri efectul unui watch se foloseşte comanda unwatch. Sintaxa comenzii unwatch este următoarea:

(unwatch <watch-item>) Evident că pentru a dezactiva urmărirea faptelor trebuie să dăm comanda (unwatch facts).

După constructorii deftemplate şi deffacts în programul prezentat ca exemplu (d1.clp) urmează definirea regulilor. 4.3.9. Definirea regulilor Una din metodele primare de reprezentare a cunoaşterii în CLIPS este regula. O regulă este o colecţie de condiţii şi de acţiuni ce urmează a fi executate dacă condiţiile sunt îndeplinite. Un sistem expert trebuie să aibă atât reguli, cât şi fapte. Regulile executate sau ‘aprinse’ se bazează pe existenţa sau non-existenţa unor fapte sau instanţe ale unei clase definite de utilizator. Mecanismul (motorul de inferenţă) al CLIPS-ului aşteaptă potrivirea regulilor cu starea curentă a sistemului (reprezentată de lista de fapte şi lista de instanţe) şi apoi aplică acţiunile. Regulile pot fi scrise direct în CLIPS sau pot fi încărcate dintr-un fişier cu reguli, creat cu un editor. Se poate folosi în acest scop editorul încorporat al CLIPS-ului sau oricare alt editor. Faţă de introducerea direct în top level a regulilor sau comenzilor, folosirea unui editor aduce posibilitatea corectării eventualelor erori, fără a mai fi necesară rescrierea din nou a regulii. Ne putem imagina cazul în care un calculator ce are introduse deja faptele şi regulile, avertizează operatorul că în acea zi se dau salariile. Pseudocodul ar fi:

IF ziua curenta este 31 HEN răspunsul este “caseria trebuie să distribuie salariile” Presupunem din exemplul anterior ca fiind deja asertat faptul data. În acest caz regula noastră ar putea arăta astfel: (defrule actiunea_zilei “Comentariu” (data (zi 31)) => (assert (actiune “caseria da banii…”) ) ) Dacă s-a introdus corect regula şi nu s-a omis nici o paranteză, atunci prompter-ul “CLIPS>” va reapare. În caz contrar va apare un mesaj de eroare în care se indică cuvântul cheie greşit sau amplasarea greşită a parantezelor. Sintaxa comenzii defrule este:

(defrule <rule-name> [<comment>] [<declaration>] ; Rule Properties <conditional-element>* ; Left-Hand Side (LHS)

Page 42: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

42

=> <action>* ) ; Right-Hand Side (RHS)

Redefinirea unei reguli deja existente, face ca regula anterioară cu acelaşi nume să fie ştearsă, chiar dacă regula actuală nou introdusă are erori. După cum se observă după numele regulii care poate fi orice simbol valid, după comentariu opţional care trebuie cuprins între ghilimele (comentariile pot fi introduse şi după punct şi virgula ’;‘) urmează zero sau mai multe condiţii (pattern-uri) şi apoi zero sau mai multe acţiuni. Practic o regulă este formată din două părţi LHS şi RHS separate de secvenţa de caractere ( => ) pe care o putem numi şi săgeată, formată dintr-un semn ‘egal’ şi un semn ‘mai mare decât’ . În comparaţia regulii cu un IF-THEN săgeata marchează începutul părţii THEN. Partea stângă LHS este formată din zero sau mai multe elemente condiţionale ( CE ) , care sunt legate între ele de un and implicit. RHS-ul este format dintr-o listă de acţiuni care sunt executate dacă şi numai dacă toate elementele condiţionale (pattern-urile) sunt satisfăcute. Nu există nici o limită pentru numărul de condiţii sau de reguli dintr-o regulă, singura limitare o constituie memoria actuală valabilă. CLIPS-ul aşteaptă îndeplinirea pattern-urilor unei reguli verificând faptele din lista de fapte. Atunci când toate pattern-urile se potrivesc cu faptele, regula este activată şi este pusă în agenda. Agenda reprezintă în CLIPS o colecţie de reguli activate. În agendă pot fi zero sau mai multe fapte, retractarea unui fapt din lista de fapte putând duce la stingerea unor reguli şi scoaterea lor automat din agendă. Dacă avem mai multe reguli care se pot aprinde CLIPS-ul este cel care hotărăşte care din reguli este cea mai apropiată şi le ordonează pe toate în agendă (CLIPS-ul ţine cont şi de prioritatea pe care a oferit-o eventual utilizatorul regulii, numită şi salience). Dacă o regulă nu are nici o condiţie în LHS, atunci CLIPS-ul va adăuga automat pattern-ul special initial-fact. Orice regulă care nu are condiţii se va aprinde automat şi va fi plasată în agendă, după ce va fi dată comanda reset şi faptul initial-fact va fi introdus în lista de fapte. Se poate întâmpla de asemenea ca o regulă să nu aibă nici o acţiune în RHS. Acest lucru nu este prea util, dar e bine de ştiut că este posibilă realizarea unei astfel de reguli. Lansarea în execuţie în CLIPS a unui program se face cu ajutorul comenzii run a cărei sintaxa este următoarea : ( run [ <limit> ] ) unde argumentul opţional <limit> este un număr întreg, ce specifică numărul maxim de reguli ce vor fi aprinse. Dacă acest argument nu apare, atunci el are implicit valoarea –1 şi toate regulile vor fi aprinse până ce nu va mai rămâne nici una în agendă. În caz contrar execuţia regulilor va înceta după ce un număr de <limit> reguli au fost aprinse. Următoarea comanda run va continua execuţia din locul de unde s-a oprit, astfel încât comanda (run 1) ar fi echivalentul unei rulări pas cu pas a programului. Trebuie reţinut faptul că o regulă o dată aprinsă, nu mai poate fi activată de obicei din nou. Este necesară ori ‘reîmprospătarea’ ei cu ajutorul comenzii refresh, ori apelarea comenzii reset, care şterge toate faptele şi reintroduce baza iniţială de fapte din construcţiile deffacts de la care s-a plecat. Odată refăcută baza iniţială de cunoaştere se poate da din nou comanda run . Alte exemple de reguli ar putea fi:

(defrule bariera_coborita tren_apropiat da)

=> actiune “Coboara bariera.”)

Page 43: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

43

(defrule bariera_ridicata tren_apropiat nu)

=> actiune “Ridica bariera.”) 4.3.10. Afişarea agendei

Agenda este o colecţie de reguli activate, iar această listă poate fi afişată cu ajutorul comenzii agenda a cărei sintaxa este următoarea:

(agenda) Dacă nu avem nici o regulă activată, atunci prompter-ul CLIPS-ului va apare

imediat. Dacă în schimb avem una sau mai multe reguli în agendă, atunci acestea vor fi afişate în felul următor. Mai întâi este afişat un număr ce indică prioritatea regulii, aceasta având în mod implicit valoarea 0, dacă utilizatorul nu a asociat o prioritate regulii respective. După prioritate (salience) este afişat numele regulii urmat de identificatorii de fapt ce s-au potrivit cu pattern-urile (condiţiile) regulii. În exemplul următor presupunem deja introduse construcţia deffacts date-initiale şi regula actiunea_zilei.

CLIPS> (defrule find_person “Die or life” (angajat (nume Cozma George)) => (assert (mesaj “Exista un angajat cu acest nume.”) ) ) LIPS> (agenda)

0 find_person: f-1 0 actiunea_zilei: f-4

For a total of 2 activations. CLIPS> (watch facts) CLIPS> (run 1) ==> f-5 (mesaj “Exista un angajat cu acest nume.”) CLIPS>(agenda) 0 actiunea_zilei: f-4 For a total of 1 activation. CLIPS> (run 1) ==> f-6 (actiune “caseria da banii…”) CLIPS> (agenda) CLIPS>

În exemplul nostru la aprinderea unei reguli, se asertează în lista de fapte un fapt nou ce specifică o acţiune sau un mesaj. După cum se observă fiecare regulă aprinsă este scoasă din agendă, astfel încât la un moment dat nu se mai găseşte nici o regulă activată în agendă. Din acest moment comanda run nu mai are nici un efect. În CLIPS o regulă nu se aprinde mai mult de o singură dată pentru un anumit set de fapte, această proprietate purtând şi numele de refracţie. Fără această proprietate un sistem expert s-ar afla întotdeauna într-o buclă infinită, fiecare regulă fiind din nou şi din nou aprinsă de acelaşi fapt. Pentru a reaprinde regula, este necesară retractarea faptului ce a aprins-o (dacă sunt mai multe fapte, se alege unul la întâmplare) şi apoi asertarea acestuia din nou. Noul fapt va avea un nou identificator de fapt, iar regula va putea fi aprinsă din nou. Altă posibilitate este folosirea comenzii refresh a cărei sintaxa este următoarea:

(refresh <rule-name>)

Page 44: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

44

Comanda refresh pune înapoi în agendă toate activările regulii, ce au fost deja aprinse (singura restricţie este ca în lista de fapte să fie încă prezent faptul ce a dus la activarea acesteia).

CLIPS> (modify 1 (salariu 1700000)) <== f-1 (angajat (nume Cozma George) (salariu 1500000) ) ==> f-7 (angajat (nume Cozma George) (salariu 1700000) ) <Fact-7> CLIPS> (agenda) 0 find_person: f-7 For a total of 1 activation. CLIPS> (refresh actiunea_zilei) CLIPS> (agenda) 0 actiunea_zilei: f-4 0 find_person: f-7 For a total of 2 activations. CLIPS> (unwatch facts) CLIPS> (retract 4 7) CLIPS> (agenda) CLIPS> (assert (angajat (nume George Cozma) ) )

CLIPS> (refresh actiunea_zilei) CLIPS> (agenda) CLIPS> Se observă faptul ca la ultima asertare s-au inversat în mod intenţionat numele

cu prenumele, din acest motiv CLIPS-ul vede cele două fapte ca fiind distincte, iar regula nu se mai aprinde. Dacă la asertarea unui fapt se omite asocierea unei valori unui slot, atunci CLIPS-ul va asocia implicit simbolul nil acelui slot. Ultimul refresh nu are nici un efect deoarece faptul care a aprins regula a fost retractat.

4.3.11. Urmărirea activărilor, regulilor şi a statisticilor La fel cum se putea urmări într-un mod dinamic asertarea şi retractarea faptelor, tot aşa cu ajutorul comenzii watch pot fi urmărite şi activările. Efectul este aproape similar cu cel al comenzii agenda putându-se observa faptele din agendă care sunt activate, sau care sunt dezactivate de retractarea sau modificarea vreunui fapt. În mod similar secvenţa de caractere <== specifică ştergerea unei activări din agendă, iar secvenţa de caractere ==> adăugarea unei activări la agendă. Se dă următorul exemplu în continuarea celui anterior: CLIPS> (watch activations) CLIPS> (reset)

==> Activation 0 find_person: f-1 ==> Activation 0 actiunea_zilei: f-4 CLIPS> (retract 1)

<== Activation 0 find_person: f-1 CLIPS> (run) CLIPS> (unwatch activations) CLIPS> (agenda) CLIPS>

Page 45: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

45

Se observă că faptul watch activations nu afişează nici un mesaj atunci când o regulă este aprinsă (executată) după ce a fost dată comanda run ,deşi aceasta a fost ştearsă din agendă în momentul aprinderii sale. Dacă se urmăresc regulile atunci se va afişa un mesaj de fiecare dată când o regulă este aprinsă. CLIPS> (reset) CLIPS> (watch rules) CLIPS> (run)

FIRE 1 actiunea_zilei: f-4 FIRE 2 find_person: f-1

CLIPS>(unwatch rules) CLIPS> Numărul aflat după simbolul FIRE indică cât de multe reguli s-au aprins după ce a fost dată comanda run. Dacă se urmăresc statisticile vor fi afişate pe ecran o serie de mesaje informaţionale după cum se va vedea: CLIPS> (reset) CLIPS> (watch statistics) CLIPS> (run) 2 rules fired Run time is 0.054 seconds. 36.4 rules per second. 6 mean number of facts (7 maximum)

1 mean number of instances (1 maximum) 2 mean number of activations (2 maximum) CLIPS> (unwatch statistics) CLIPS>

4.3.12. Afişarea listei membrilor unei construcţii specificate Pentru afişarea listei regulilor aflate la un moment dat în CLIPS se utilizează comanda list-defrules. De asemenea comenzile list-deftemplates şi list-deffacts sunt utilizate pentru afişarea construcţiilor deftemplate, respectiv a construcţiilor deffacts. Sintaxa acestor comenzi este următoarea: (list-defrules) (list-deftemplates) (list-deffacts) CLIPS> (list-deffacts) initial-fact date-initiale For a total of 2 deffacts. 4.3.13. Afişarea textului membrilor unei construcţii specificate Ca şi mai sus avem la dispoziţie trei comenzi ppdefrule (pretty print defrule), ppdeftemplate şi ppdeffacts utilizate la afişarea textului (conţinutului) unei construcţii defrule, deftemplate sau deffacts. Sintaxa acestor comenzi este următoarea: (ppdefrule <defrule-name>) (ppdeftemplate <deftemplate-name>) (ppdeffacts <deffacts-name>)

Page 46: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

46

Singurul argument pe care îl acceptă aceste funcţii este numele construcţiei defrule, deftemplate sau deffacts. CLIPS-ul realizează afişarea într-o manieră proprie de aranjare a liniilor şi spaţiilor, astfel încât textul să fie cât mai uşor de citit. De exemplu: CLIPS> (ppdefrule actiunea_zilei)

(defrule MAIN::actiunea_zilei “Comentariu” (data (zi 31)) => (assert (actiune “caseria da banii…”))) CLIPS>(ppdeftemplate data) (deftemplate MAIN::data (slot zi) (slot luna) (slot an))) CLIPS>(ppdeffacts date-initiale) (deffacts MAIN::date-initiale “Baza de salarizare” (angajat (nume Cozma George) (salariu 1500000) ) (angajat (nume Miron Liliana) (salariu 1650000) ) (angajat (nume Mazilu Razvan) (salariu 1580000) )

(data (zi 31) (luna 9 ) (an 1991))) CLIPS> (ppdeffacts initial-fact) CLIPS>

Simbolul MAIN:: care precede fiecare construcţie, indică modulul în care au fost amplasate. Modulele sunt un mecanism de partiţionare a bazei de cunoaştere, utilizatorul având posibilitatea să grupeze regulile în funcţie de acţiunile realizate de acestea şi de preferinţele sale în module. În cazul de faţă nu există decât modulul principal şi anume modulul MAIN. Se observă că la încercarea de afişare a construcţiei deffacts iniţial fact nu se obţine nici un rezultat, aceasta fiind automat realizată de către CLIPS. 4.3.14. Ştergerea membrilor unei construcţii specificate Comenzile undefrule , undeftemplate şi undeffacts sunt utilizate pentru ştergerea unei construcţii defrule, deftemplate şi deffacts. Sintaxa acestora este: (undefrule <defrule-name>) (undeftemplate <deftemplate-name>) (undeffacts <deffacts-name>) După cum se observă comenzile nu acceptă decât un singur argument, iar acela este numele construcţiei ce se doreşte a fi ştearsă. CLIPS> (undefrule actiunea_zilei) CLIPS> (list-defrule) find_person For a total of 1 defrules. CLIPS> (undeffacts date_initiale) CLIPS> (list-deffacts) initial-fact For a total of 1 deffacts. CLIPS> (undeffacts initial-fact) CLIPS> (list deffacts) CLIPS>

Page 47: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

47

Se observă faptul că putem şterge construcţiile deffacts initial-fact şi deftemplate initial-fact ca pe oricare altă construcţie definită de utilizator. Însă dacă se va da comanda reset de această dată (initial-fact) nu va mai fi adăugat la lista de fapte. În acest caz dacă avem reguli care nu au condiţii în LHS, acestea nu se mai aprind şi programul poate funcţiona incorect. Pentru a reintroduce acest fapt în lista de fapte este necesară execuţia comenzii clear şi reîncărcarea bazei de cunoştinţe. Se poate folosi ca şi la comanda retract simbolul * ca argument, în acest caz fiind şterse toate construcţiile de acel tip. De exemplu ( undefrule *) şterge toate construcţiile de tip defrule. Trebuie reţinut şi faptul ca toate construcţiile ce sunt referite (cerute) de alte construcţii nu pot fi şterse. După cum se va vedea în următorul exemplu construcţia deftemplate initial-fact nu poate fi ştearsă până când construcţia deffacts initial-fact nu este ştearsă. De asemenea va trebui să fie ştearsă şi construcţia defrule exemplu, care utilizează faptul initial-fact în LHS pattern. CLIPS> (defrule exemplu

=> ) ;cea mai simplă regulă CLIPS> (undeftemplate initial-fact) Unable to delete deftemplate initial-fact while

outstanding references to it still exist. CLIPS> (undeffacts initial-fact) CLIPS> (undeftemplate initial-fact)

Unable to delete deftemplate initial-fact while outstanding references to it still exist. CLIPS> (undefrule exemplu) CLIPS> (undeftemplate initial-fact) CLIPS> Dacă ar mai fi apărut mesaje de eroare, ar fi însemnat că încă mai există

construcţii ce utilizează initial-fact şi în acest caz ar fi trebuit să fie şterse fiecare în parte. 4.3.15. Ştergerea tuturor construcţiilor din mediul CLIPS

Comanda clear este cea care şterge toată informaţia din mediul CLIPS. Sunt şterse toate construcţiile şi toate faptele din lista de fapte. Sintaxa comenzii clear este următoarea :

(clear) După ştergerea mediului CLIPS, comanda clear adaugă şi construcţia initial-fact

după cum urmează: CLIPS> (clear) CLIPS> (list-deftemplates) initial-fact For a total of 1 deftemplates. CLIPS> (list-deffacts) Initial-fact For a total of 1 deffacts. CLIPS>

La sfârşitul programului se găseşte comanda printout.

Page 48: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

48

4.3.16. Comanda printout

Comanda printout trimite spre un dispozitiv ataşat unui nume logic un şir de caractere. Numele logic trebuie specificat pentru ca dispozitivul spre care se trimite să fie pregătit (de exemplu un fişier trebuie deschis mai întâi). Pentru a avea ieşirea spre stdout (ieşirea standard-în general monitorul) se foloseşte numele logic t. Sintaxa comenzii printout este următoarea :

( printout <logical-name> <expresion>* ) Această comandă îşi dovedeşte utilitatea atunci când este amplasată în RHS-ul regulilor cu scopul de a se afişa mesaje. Orice număr de expresii poate fi amplasat într-o comandă printout pentru a fi afişate. Fiecare expresie este evaluată în vederea eliminării spaţiilor adiţionale aflate între expresiile ce se doresc a fi printate. Simbolul crlf utilizat ca o <expresie> poate fi amplasat oriunde în lista de expresii, el forţând carriage return / new line (salt la început de linie nouă). Funcţia printout îşi marchează şirurile pe care le afişează încadrându-le între ghilimele. Pot fi printate de asemenea şi adresele de fapt, adresele de instanţă şi adresele externe. Această funcţie nu returnează nici o valoare. Dispozitivul spre care se trimite poate fi redefinit, astfel încât se pot transmite informaţii spre un modem sau o imprimantă. Următoarea regulă demonstrează utilitatea comenzii printout : (defrule cartela_telefonica (card yes) => (printout t “Puteti forma numărul de telefon…” crlf) ) În aceasta regulă prezenţa comenzii printout în RHS-ul regulii duce la afişarea spre terminal (standard output device) a unui şir de caractere. Singurul argument al funcţiei este şirul: “Puteti forma numărul de telefon…” care va fi afişat pe ecran fără ghilimele. Dacă s-ar fi dorit trimiterea şirului spre un fişier, ar fi trebuit mai întâi deschis fişierul cu funcţia open . Să vedem acum câteva din elementele programelor CLIPS. În CLIPS avem trei elemente primare de scriere a programelor : tipuri primitive de date, funcţii pentru manipularea datelor şi constructori pentru adăugarea datelor la baza de cunoaştere. 4.3.17. Tipuri de date În CLIPS există opt tipuri de date primitive şi acestea sunt : float , integer , symbol , string , external address , fact address , instance name şi instance address. Informaţiile de tip numeric pot fi reprezentate evident de float şi integer, iar informaţiile de tip simbolic pot fi reprezentate de symbol şi string.

Primele două tipuri de câmpuri float şi integer sunt numite câmpuri numerice sau numere. Un câmp numeric este alcătuit din trei părţi : semnul, valoarea, şi exponentul. Semnul este opţional şi poate fi + sau -. Valoarea conţine una sau mai multe cifre (0-9), un punct opţional (.) şi din nou una sau mai multe cifre. Exponentul este şi el opţional şi constă în litera e sau E urmata de un + sau – opţional şi de una sau mai multe cifre. Orice număr format doar din semnul opţional şi din cifre este considerat a fi de tip întreg. Toate celelalte numere sunt de tip float. Exemple de întregi : 1 +7 -2 79 Exemple de float: 1.3 3.0 8e-1 6.5E+3

Page 49: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

49

În concluzie un întreg foloseşte următorul format: <integer> ::= [ +| - ] <digit>+

<digit> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 Un număr în virgulă mobilă foloseşte formatul următor:

<float> ::= <integer> <exponent> | <integer> . [exponent] |

. <unsigned integer> [exponent] | <integer > . <unsigned integer> [exponent]

<exponent> ::= e|E <integer> <unsigned-integer> ::= <digit>+ Un symbol este un câmp ce începe cu un caracter ASCII printabil şi este urmat

de unul sau mai multe caractere. Sfârşitul unui simbol este marcat de un delimitator şi anume : orice caracter ASCII neprintabil ( spaţiu , tab, CR – Enter, LF – Line feeds), ghilimelele “ , paranteza deschisă ( , paranteza închisă ) , punct şi virgulă ; ,apăsând & , bara verticala | , tilda ~ , caracterul mai mic decât < . Un simbol nu poate conţine un delimitator ( singura excepţie este caracterul < care poate fi doar primul caracter din simbol). De asemenea ? şi $? sunt secvenţe de caractere ce nu pot să apară la începutul unui simbol deoarece acestea sunt folosite pentru a marca variabilele. Orice secvenţă de caractere care nu este un câmp numeric este tratată ca un simbol. Exemple de simboluri:

data-an viata Mihai nr_prim !#$%?$? 1234A 091-345-67

Se observă folosirea underscore-ului şi a liniuţei de unire pentru utilizarea mai multor simboluri într-un singur câmp. CLIPS este case-sensitive şi deci face deosebire între literele mari şi cele mici, din acest motiv următoarele simboluri sunt considerate ca fiind diferite:

nr-prim Nr-prim NR-PRIM nr-Prim . Următorul tip de câmpuri este string (şirul de caractere). Un şir trebuie să înceapă şi să se termine cu ghilimele. Trebuie reţinut faptul că ghilimelele fac parte din şir şi că între acestea pot fi zero sau mai multe caractere inclusiv delimitatorii. Exemple de şiruri :

“Introduceţi caracterele” “ caractere !@#$%^^&* “ “Popescu N. Ionescu” Trebuie reţinut faptul că şirul “abcd” şi simbolul abcd nu sunt unul şi acelaşi lucru. Deşi conţin aceleaşi caractere prezenţa ghilimelelor face ca acestea să fie tipuri de date diferite. De obicei spaţiul este folosit în CLIPS ca delimitator pentru a separa câmpurile (mai ales pentru simboluri) şi celelalte tokens (grup de caractere cu o semnificaţie specială pentru limbaj). Spaţiile adiţionale utilizate între tokens sunt neglijate. Într-un şir însă spaţiul este considerat ca aparţinând şirului, oriunde ar fi acesta amplasat. Din acest motiv sunt considerate a fi şiruri diferite:

“spaţiu” “ spaţiu” “spaţiu “. Fără ghilimele spaţiile ar fi ignorate. Mai trebuie reţinut faptul că nu se pot plasa direct într-un şir ghilimelele şi de exemplu înşiruirea de caractere: “” trei_câmpuri ”” este interpretat de CLIPS ca fiind trei tokens separate : “” trei_câmpuri “” .

Page 50: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

50

Pentru introducerea într-un şir a ghilimelelor este necesară folosirea caracterului backslash \ . De exemplu : “\” un_câmp \”” este interpretat de CLIPS ca fiind câmpul: “” un_câmp “” . De această dată a fost creat un singur câmp deoarece folosirea caracterului backslash împiedica interpretarea ghilimelelor ca fiind delimitatori. Introducerea unui caracter backslash într-un şir presupune folosirea a două astfel de caractere succesiv. De exemplu : “\\ un_câmp \\” va fi interpretat de CLIPS ca fiind câmpul: “\ un_câmp \” . Celelalte patru tipuri de câmpuri external address , fact address , instance name şi instance address prezintă un interes mai mic pentru utilizatorul obişnuit. External address reprezintă adresa unei structuri de date externe returnată de un user-defined function (funcţie definită de utilizator scrisă într-un limbaj ca C sau Ada şi legată cu CLIPS-ul pentru a adauga o funcţionalitate adiţională). Dar valoarea unei adrese externe nu poate fi specificată ca fiind o secvenţă de caractere ce formează un tokens şi nu este posibilă crearea unui astfel de câmp de către utilizator într-o variantă nemodificată a CLIPS-ului. Reprezentarea unei astfel de adrese externe este:

<pointer-XXXXXX> , unde XXXXXX este external address.

Un fapt este o listă de valori atomice şi este referit poziţional (fapte ordonate - ordered facts) sau după nume (fapte neordonate sau şablon – non-ordered or template facts). Referirea unui fapt se face cu ajutorul unui index sau adresă. Formatul pentru fact address este:

<Fact-XXX> , unde XXX este indexul de fapt. Instance name şi instance address sunt câmpuri utilizate în conjuncţie cu COOL. Obiectele în CLIPS sunt definite a fi floats, integers, symbols, strings, multifield

values (valori multicâmp), external addresses, fact addresses sau o instanţă a unei user-defined class. O clasă definită de utilizator este realizată, folosind un constructor defclass. O instanţă a unei clase definite de utilizator este creată cu funcţia makeinstance şi poate fi referită în mod unic cu ajutorul adresei acesteia. Câteva exemple de instance name sunt: [pump-1] [foo] [+++] [123-890]

Parantezele pătrate nu sunt parte componentă din instanţă, ele indicând faptul că simbolul închis între acestea este o instance-name. O adresă de instanţă poate fi obţinută prin asocierea unei variabile, valorii returnate de funcţia instance-address. Reprezentarea unei instance address este:

<instance-XXX> ,unde XXX este numele instanţei. 4.3.18. Funcţiile

O funcţie în CLIPS este un element format din cod executabil cu un nume specific, care returnează o valoare utilă sau are un anumit efect asupra informaţiei. Există două tipuri de funcţii : user defined functions şi system defined functions, acestea fiind elemente de cod scrise în limbaje externe (cum ar fi C, FORTRAN sau ADA) şi linkeditate cu mediul CLIPS. Funcţiile definite de sistem sunt acele funcţii ce au fost definite intern de mediul CLIPS-ului, iar funcţiile definite de utilizator sunt funcţii care au fost definite extern mediului CLIPS-ului.

Constructorul deffunction ajută utilizatorii să definească noi funcţii direct în mediul CLIPS-ului utilizând sintaxa acestuia. Pot fi definite şi funcţii generice cu ajutorul constructorilor defgeneric şi defmethod. Funcţiile apelate în CLIPS folosesc o

Page 51: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

51

notaţie prefix, argumentele unei funcţii apar întotdeauna după numele funcţiei. Funcţia apelată începe cu o paranteză deschisă ‘ ( ‘ , urmată de numele funcţiei, de argumentele acesteia (fiecare argument separat de unul sau mai multe spaţii) şi se termină cu o paranteză închisă ‘ ) ‘ . Argumentele pot fi tipuri primitive de date, variabile sau chiar alte funcţii apelate de aceasta. De exemplu funcţiile de adunare + şi de multiplicare * :

(+ 1 2) (* 3 4.5 6) (+ 3 (* 7 8) 4) (* 5 (+ (* 2 3 4) 1 2) (* 5 6))

Aceste exemple sunt expresii care apelează funcţiile + şi *. Amplasarea greşită a parantezelor duce la modificarea numărului de argumente şi de aici la obţinerea unui rezultat greşit. 4.3.19. Constructorii Mai mulţi constructori de definiţie apar în CLIPS: defmodule, defrule, deffacts, deftemplate, defglobal, deffunction, defclass, definstances, defmessagehandler, defgeneric şi defmethod. Toate construcţiile în CLIPS sunt cuprinse între paranteze, începând cu o paranteză deschisă ‘ ( ‘ şi terminându-se cu o paranteză închisă ‘ ) ‘. Aceşti constructori se folosesc pentru a adăuga o informaţie la baza de cunoaştere a CLIPS-ului. Faţă de funcţiile apelate aceştia nu returnează niciodată o valoare. Se oferă posibilitatea adăugării unui comentariu la numele construcţiei (excepţie face doar defglobal). Comentariile pot fi amplasate în CLIPS utilizând punctul şi virgula ‘ ; ’ (semicolon), iar CLIPS-ul va ignora tot ce va găsi după punct şi virgulă. Dacă avem la început de linie punct şi virgulă întreaga linie va fi tratată ca fiind un comentariu. În momentul în care se va dori lansarea în execuţie a unui program CLIPS-ul va încerca toate construcţiile ignorând comentariile. 4.3.20. Faptele

În CLIPS sunt trei forme principale de reprezentare a informaţiei : fapte (facts), obiecte şi variabilele globale. Faptele sunt forma principală de reprezentare a informaţiei în sistemul CLIPS. Fiecare fapt reprezintă un element de informaţie care va fi plasat în lista de fapte numită factlist. Faptul este forma fundamentală de date folosită de reguli şi constă într-un nume de relaţie urmat de zero sau mai multe sloturi (câmpuri simbolice cărora li se pot asocia valori). Forma generală a unui fapt va fi următoarea :

fact => ( nume_relaţie [ (slot)* ] [ (multislot)* ] ) Parantezele pătrate indica faptul ca existenţa sloturilor este opţională, iar semnul

* arată faptul că putem avea zero sau mai multe sloturi. Se observă faptul că în CLIPS trebuie să cuprindem între paranteze atât numele de relaţie cât şi sloturile. Un slot este la rândul său format dintr-un nume de slot, căruia i se poate asocia o valoare. Există însă şi posibilitatea asocierii de mai multe valori şi în acest caz spunem ca avem un multislot. Acest lucru este posibil datorită existenţei în CLIPS a multicâmpului (multifield) care este de fapt o secvenţă de zero sau mai multe câmpuri. Afişarea în CLIPS a unei valori multicâmp se va realiza prin închiderea acestuia între paranteze. Trebuie reţinut faptul că o valoare multifield (a) nu este unul şi acelaşi lucru cu o valoare câmp (single field) (a) . slot => ( nume_slot valoare )

Page 52: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

52

multislot => ( nume_slot [ valoare ]* ) Un slot trebuie să aibă obligatoriu asociată o valoare, pe când la un multislot

asocierea unei valori nu e obligatorie. Valoarea pe care o asociem unui slot poate lua forma unui tip de dată primitivă (integer, float, symbol, string) . Exemple de fapte ar putea fi : (start) (adresa (nume-strada “Alexandru cel Bun”) (numar-strada 47) (bloc E1) (scara D) (apartament 31)) (persoana (nume Ion Vasile) (culoare-par) În primul caz faptul (start) nu are nici un slot. În al doilea caz faptul cu numele de relaţie adresa are mai multe sloturi şi anume : nume-strada, numar-strada, bloc, scara, apartament. Se observă faptul că putem asocia unui slot valori de diferite tipuri. Astfel valoarea slotului nume-strada este un şir de caractere, valorile sloturilor numar-strada şi apartament sunt întregi, iar valorile sloturilor bloc şi scara sunt simboluri. În ultimul caz, pentru faptul persoana, atât slotul nume, cât şi slotul culoare-par sunt multisloturi (au asociate două şi respectiv zero valori).

Trebuie reţinut faptul că în CLIPS nu are nici o importanţă ordinea apariţiei sloturilor şi de aceea următoarele două fapte sunt văzute ca fiind identice deşi au schimbată ordinea a două sloturi : (student (nume Pascal B. Mihaita) (nr_grupa 1407)

(an IV)) (student (nr_grupa 1407)

(nume Pascal B. Mihaita) (an IV)) .

Page 53: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

CAPITOLUL 5 REŢELE NEURALE 5.1. Modelul general al unei reţele neuronale În cadrul inteligenţei artificiale problemele de învăţare ocupă un loc aparte. Aceste preocupări se constituie într-o direcţie distinctă de cercetare, cea a maşinilor autoinstruibile (“machine learning”). Învăţarea automată reprezintă studiul modelelor de sisteme capabile să-şi îmbunătăţească performanţele în mod semnificativ, utilizând o mulţime de date de instruire.

O reţea neurală constă dintr-o mulţime de elemente de prelucrare (neuroni, elemente cognitive sau noduri ale reţelei) înalt interconectate.

Considerăm o reţea de p neuroni conectaţi prin ponderi de conexiune sau ponderi sinaptice.

Un neuron i are n intrări şi o ieşire yi i. Reprezentarea grafică a acestui neuron este prezentată în figura următoare:

∑=j

jjxws

y=f(s) wn

w1

w2

t

y

x1

x2

xn

Intrările sunt notate:

i i ix , x , ..., x1 2 n acest neuron are i ponderi sinaptice, câte una pentru fiecare intrare. Ponderile sunt notate:

i i i, w , ..., ww1 2 n

idacă w > 0 avem o pondere sinaptică excitatoare jidacă w < 0 avem o pondere sinaptică inhibitoare j

53

Page 54: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

Pentru simplitate se suprimă indicele i. Starea internă sau activarea (excitaţia) neuronului se exprimă cu relaţia:

∑=

=n

jjj xws

1

În modelul McCulloch-Pitts fiecare neuron este caracterizat de un prag de

excitare t. Ieşirea y este unu dacă s ≥ t. Definim funcţia răspuns f:R → R

⎩⎨⎧

<≥

=0001

)(xdacaxdaca

xf

Ieşirea se scrie:

⎟⎟⎠

⎞⎜⎜⎝

⎛+= ∑

=

n

jjj txwfy

1

Pentru eliminarea valorii de prag t se introduce o intrare cu valoarea “1”

permanent şi ponderat: x =1 n+1w =t n+1 rezultă activitatea totală a neuronului:

laţie care poate fi pusă şi sub formă matriceală.

vantajul acestei abordări: pragul poate fi ajustat împreună cu celelalte ponderi.

a neuro

alele tipuri de funcţii neurale sunt:

∑+

=

=1

1

'n

jjj xws

reIeşirea se scrie: y=f(s’) AForma funcţiei de răspuns f depinde de modelul de reţea neuronală studiat.

ivareFuncţia f se mai numeşte funcţie neurală, funcţie de ieşire sau funcţie de actnului. Princip

Funcţia prag

54

1.

⎩⎨⎧

<≥

=0001

)(xdacaxdaca

xf

Page 55: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

2. Funcţia signum

3. Funcţia prag liniar

55

f : R → [0, 1]

4. Funcţia sigmoidală (var 1)

5. Funcţia sigmoidală (var 2)

ţelei

ă din n neuroni.

Vectorul de stare al reţelei este vectorul ale cărui componente sunt stările . tiv, activarea totală a neuronului i este:

unde wij reprezintă ponderea conexiunilor neuronilor i şi j.

⎨⎧ ≥

=0

01)(

xdacaxf

⎩ <−1 xdaca

01)( >=−

kxf kx1+ e

0)( >+−

=−

keexf kxkx

kxkx

ee

5.2. Ecuaţia de evoluţie a re

Considerăm o reţea format

neuronilor reţelei. Notăm acest vector cu XAdmiţând un model de activare adi

∑+

Considerăm toţi neuronii reţelei conectaţi între ei:

=

⎜⎜

= i

i

i

w

ww

V 2,

1,

=1j

jij xws1n

⎟⎟⎟

⎜⎜⎜ ...

⎟⎟⎞

ni,

Page 56: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

56

1, 2, ..., n

prezintă vectorul pondere asociat neuronului i şi conţine toate ponderile spre neuron

area neuronului se scrie:

= V X

acă se notează:

atricea de conexiune a reţelei, rezultă vectorul total de activare a reţelei:

=WX

entru studiul dinamicii reţelei introducem parametrul timp.

(t+1) = F(W X(t))

.3.

Considerăm modelul de reţea neurală prezentat în figura următoare:

În această figură xk reprezintă vectorul de intrare iar yk vectorul de ieşire.

i= reul i. Activ

iTS D

m S PEcuaţia de evoluţie va fi: X

5 Paradigme ale instruirii

Se presupune că o secvenţă de intrare definind o formă (pattern) sau o configuraţie este prezentată reţelei sub forma unui vector. Mulţimea acestor vectori reprezintă spaţiul vectorilor de intrare. Reţelele neurale transformă o anumită configuraţie de intrare într-o configuraţie

⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

=

nV

VV

W...

2

1

de ieşire. Ieşirile reţelei pot corespunde unei acţiuni pe care reţeaua trebuie s-o realizeze. Aceasta poate fi, de exemplu, o problemă de control. De asemenea, ieşirile reţelei pot reprezenta o clasificare a obiectelor prezentate la intrare. În general, ieşirea

I1

I2

In

O1

O2

On

xk1

xk2

x n

yk1

yk2

yk km

Page 57: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

57

Prin instruire

poate fi orice transformare a spaţiului de intrare, deci funcţionarea reţelei reprezintă o aplicaţie (proiecţie, transformare) a spaţiului vectorilor de intrare în spaţiul vectorilor de ieşire. sau învăţare vom înţelege o metodă prin care este construită o

iste de asociere.

Considerăm vectorii:

R = (x1 x2 ... xm) – formă (vectorul de intrare în reţea)

O asociere este o pereche ordonată (R,S), unde R este forma cheie iar S este forma a

istă de asociere pe lungime p sau mulţime de instruire

astfel de aplicaţie. În mod obişnuit instruirea presupune că se furnizează reţelei suficient de multe exemple de perechi intrare-ieşire. Folosind aceste exemple reţeaua este forţată să se adapteze în sensul generalizării unei aplicaţii de intrare-ieşire. Această aplicaţie îi va permite reţelei să trateze corect şi valori de intrare care nu i-au mai fost prezentate niciodată. L

T S = (s1 s2 ... sn)T – forma asociată

sociată. Numim l o mulţime LA de

p asoci

LA = {(R1,S1), ..., (Rp,Sp)} p≥1

nde toate formele cheie au aceeaşi dimensiune:

dim R = m j = 1,2, ..., p

Se admite că şi toate formele asociate au aceeaşi dimensiune:

dim S = n j = 1,2, ..., p

.4. Topologia multistrat a reţelelor neurale

Neuronii pot fi conectaţi în diferite moduri pentru a forma o reţea neurală. Un model

eri: u

j

j

5

uzual de topologie consideră neuronii organizaţi în mai multe straturi. O reţea neurală multistrat conţine două sau mai multe straturi de neuroni. Primul strat primeşte intrările din mediu. Ieşirile neuronilor din acest strat constituie intrări pentru neuronii stratului următor. Ieşirea reţelei este formată din ieşirile neuronilor de pe ultimul strat. Straturile situate între primul şi ultimul nivel sunt straturi ascunse ale reţelei.

Page 58: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

58

CAPITOLUL 6 MULŢIMI NUANŢATE 6.1. Noţiunea de mulţime nuanţată Noţiunea de mulţime nuanţată a fost introdusă de L. Zadeh ca mijloc de reprezentare şi utilizare a datelor care care nu sunt precise ci mai degrabă vagi (fuzzy) – L. A. Zadeh, Fuzzy Sets, Information and Control, 8 (1965) 338-353. Aşa cum s-a arătat până acum, în logica bivalentă se operează cu două valori de adevăr: adevărat şi fals. Acest lucru reprezintă o problemă serioasă în modelarea lumii reale în care foarte multe dintre noţiuni au un caracter subiectiv raportat la un anumit observator. Utilizarea logicilor polivalente şi a mulţimilor nuanţate (vagi) permite obţinerea unor rezultate superioare, de multe ori surprinzătoare. Trebuie precizat faptul că utilizarea mulţimilor nuanţate este recomandată în special în domenii ale cunoaşterii unde nu sunt elaborate legi matematice precise şi deci fenomenele nu sunt stăpânite deplin. O mulţime nuanţată reprezintă în esenţă valorile de adevăr asociate unei noţiuni şi care între valorile extreme de fals şi adevărat poate avea o infinitate de valori intermediare. Prezentăm în continuare elementele de bază ale teoriei mulţimilor nuanţate.

Fie X o mulţime nevidă. O mulţime nuanţată (fuzzy) este perechea (X, A) unde:

A:X → [0, 1]

X – este universul mulţimii nuanţateA – este funcţia de apartenenţă a mulţimii nuanţate

Observaţie: dacă A(x) =1 atunci cu certitudine x este un element din A. Între neapartenenţa totală şi apartenenţa totală există o infinitate de situaţii intermediare. Cele două situaţii extreme pot fi asociate cu valorile de adevăr adevărat respectiv fals.

Pentru simplitate vom identifica mulţimea nuanţată cu funcţia ei de apartenenţă. Vom spune deci că A este o mulţime nuanţată peste universul X. Prezentăm în continuare vor fi prezentate câteva exemple de definire a mulţimilor nuanţate. Exemplul 1. Considerăm universul X format din trei elemente:

Page 59: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

X = {x1, x2, x3}

şi o mulţime nuanţată A peste X, ale cărei grade de apartenenţă sunt date de formula:

3,2,1i,2i

1)x(A i =+

=

Exemplul 2. Fie universul:

X = {x1, x2, x3} Gradele de apartenenţă ale mulţimii nuanţate A sunt indicate prin valorile numerice:

A(x1)=0,7; A(x2)=0,5; A(x3)=0,9 Exemplul 3. Fie: X=R Definim peste X mulţimea nuanţată a temperaturilor de aproximativ 10o C. Mulţimea A se poate reprezenta ca în figura următoare. Această reprezentare poate fi considerată satisfăcătoare pentru o anumită problemă particulară.

A(t)

1

t (oC)5 10 15

Continuăm prezentarea elementelor de bază ale teoriei mulţimilor nuanţate. Fie A o mulţime nuanţată peste X. Suportul mulţimii nuanţate A, notat supp A,

este mulţimea clasică definită prin: Supp A = { x ∈ X | A(x) > 0}

Egalitatea mulţimilor nuanţate: A = B ⇔ A(x) = B(x), ∀ x ∈ X

59

Page 60: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

60

Mulţimea nuanţată A este inclusă în mulţimea nuanţată B şi notăm A ⊆ B dacă şi numai dacă:

A(x) ⊆ B(x), ∀ x ∈ X

Complementara A’ a unei mulţimi nuanţate este: A’ = 1 – A(x), ∀ x ∈ X

Mulţimea vidă: Φ(x) = 0, ∀ x ∈ X

Complementara mulţimii vide Φ:

X(x) =1

Principiul Modus-Ponens generalizat:

X este A* Premiză Dacă x este A atunci y este B Implicaţie ---------------------------------------------------------- Y este B* Concluzie

Dacă în principiul Modus-Ponens prezentat mai sus se introduce A ca predicat se

obţine regula clasică. 6.2. Sisteme expert bazate pe mulţimi nuanţate Una din aplicaţiile importante ale mulţimilor nuanţate este realizarea sistemelor expert. Aşa cum s-a arătat în capitolul 4 unul din aspectele cele mai importante legate de sistemele expert este legat de modul de prelucrare a informaţiilor aflate în baza de date a sistemului. Având în vedere faptul că mulţimile nuanţate permit o reprezentare mai flexibilă a realităţii, maşinile de inferenţă bazate pe această tehnică permit obţinerea unor rezultate foarte bune. Schema bloc a unui astfel de sistem expert este prezentată în figura 6.1. Intrările în maşina de inferenţă suferă procesul de nuanţare care permite definirea universului mulţimii nuanţate şi gradul de apartenenţă pentru mărimea de intrare.

Regulile de evaluare sunt de genul:

Dacă IN1 este ... şi IN2 este ... atunci OUT1 este ...

unde IN1 şi IN2 sunt elemente ale universului mulţimilor nuanţate de intrare iar OUT1 este un element al universului mulţimii nuanţate de ieşire.

Obţinerea mărimii de ieşire a sistemului expert se face prin denuanţarea mulţimii nuanţate de ieşire. Metoda clasică de denuanţare este metoda centrului de greutate sau a centroidei:

Page 61: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

( )

∑∑ ⋅

=

xtoti

xtoti

xA

xxAcentroida

)(

)(

Funcţiile de apartenenţă a mărimilor de

intrare

Reguli

Funcţiile de apartenenţă a

mărimilor de ieşire

Nuanţare (fuzificare) - universul

mulţimii nuanţate-

Evaluarea regulilor

Denuanţare (defuzificare)

intrări fuzzy

ieşiri fuzzy

Intrări

Ieşiri

Baza de cunoştinţe a sistemului expert

Maşina de inferenţă nuanţată

Figura 6.1. Sistem expert realizat cu ajutorul mulţimilor nuanţate

61

Page 62: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

CAPITOLUL 7 ALGORITMI GENETICI 7.1. Generalităţi

Algoritmii genetici reprezintă o familie de modele computaţionale inspirate de teoria evoluţiei. Aceşti algoritmi codifică soluţiile posibile ale unor probleme specifice într-o structură de date de tip cromozom şi aplică acestor structuri operatori de recombinare, pentru a păstra informaţia utilă.

Implementarea unui algoritm genetic începe cu o populaţie de cromozomi (în general aleasă aleator). Se evaluează, apoi, aceste structuri şi se alocă facilităţi reproductive astfel încât acei cromozomi, care reprezintă o soluţie mai bună pentru problema ţintă, să aibă mai multe şanse de a se reproduce decât acei cromozomi care sunt soluţii mai proaste. Definirea unei soluţii bune se face, în general, în raport cu populaţia curentă.

Algoritmii genetici se pot utiliza pentru optimizarea unei funcţii F(x1, x2, ... xM) ceea ce înseamnă că dorim să minimizăm sau să maximizăm această funcţie. În acest caz variabilele ce desemnează parametrii sunt reprezentate în general prin şiruri binare (variabilele fiind discretizate apriori). 7.2. Algoritmul genetic canonic

Primul pas în implementarea unui algoritm genetic constă în generarea populaţiei iniţiale.

În algoritmul genetic canonic fiecare membru al acestei populaţii va fi un şir binar de lungime L corespunzând codificării problemei. Fiecare şir este denumit fie genotip fie cromozom. În majoritatea cazurilor populaţia iniţială este generată aleator.

Fiecare şir este evaluat şi i se atribuie un fitness. Funcţia de evaluare sau funcţia obiectiv reprezintă o măsură a performanţei în

raport cu o anumită mulţime de parametrii. Funcţia fitness transformă această măsură a performanţei în alocare de facilităţi reproductive.

În algoritmul genetic canonic fitness-ul este definit prin relaţia:

ffi

unde:

62

Page 63: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

fi reprezintă evaluarea asociată cu şirul i; f - evaluarea medie a tuturor şirurilor populaţiei.

Este util ca execuţia unui algoritm genetic să fie considerată ca un proces în

două etape:

1. prima etapă constă în aplicarea unei selecţii populaţiei curente rezultând o populaţie intermediară;

2. a doua etapă constă în aplicarea recombinărilor şi mutaţiilor populaţiei intermediare pentru a crea o populaţie următoare.

Trecerea de la populaţia curentă la populaţia următoare reprezintă o generaţie în

execuţia unui algoritm genetic. Figura următoare explică acest lucru: o generaţie se compune din faza selecţiei şi

faza recombinării. Mutaţia (nu apare în desen) poate interveni după crossover.

Sir 1

Sir 2

Sir 3

...

Sir 1

Sir 2

Sir 3

...

Descendent A (1x2)

Descendent B (1x2)

Descendent A (2x4)

Descendent D (2x4)

.............

Selecţie (duplicare)

Recombinare(crossover)

Generaţie curentă t

Generaţia intermediară t

Generaţia următoare t+1

În figura de mai sus şirurile care alcătuiesc o generaţie reprezintă variabilele funcţiei de optimizat, variabile ce sunt de regulă anumiţi parametrii ai unui fenomen. Aceste variabile sunt convertite în şiruri binare prin operaţia de discretizare. Generaţiei

curente i se aplică operaţia de selecţie astfel: se calculează fitness-ul ffi şi apoi se

asociază şanse mai mari şirurilor cu fitness mai mare. Metoda de asociere a şanselor depinde de algoritmul folosit. De exemplu poate fi folosită o metodă similară cea utilizată la jocul de ruletă. La jocul de ruletă, pe roată, fiecărui număr i se alocă un anumit spaţiu inegal pe circumferinţa roţii. Numerele care vor avea alocat un sector de cerc mai mare au şanse mai mari să capteze bila ruletei. O altă metodă poate fi cea a extragerii aleatoare cu rest. Pentru a aplica această metodă se parcurg următoarele etape:

63

Page 64: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

- se calculează fitness-ul şi pentru ffi >1 partea întreagă indică numărul de

şiruri identice plasate în populaţia intermediară;

- partea fracţionară ffi reprezintă şansa de a mai plasa o copie a şirului. De

exemplu pentru un fitness egal cu 1,36 se plasează o copie în generaţia intermediară şi se mai poate plasa una cu probabilitatea 0,36.

Prin recombinare se înţelege aplicarea cu o probabilitate pc operatorul crossover

perechilor de şiruri aleator formate. Funcţionarea operatorului de crossover va fi explicată prin următorul exemplu. Presupunem două şiruri binare din generaţia intermediară. Pentru a putea urmări modul de funcţionare a operatorului cel de-al doilea şir a fost reprezentat cu simbolurile “x” şi “y” în loc de “1” şi “0”. Cele două şiruri sunt:

primul şir: 1101011011 al doilea şir: yxxyxxxxyy

Folosind un punct de recombinare aleator ales, un crossover simplu (1-point

crossover) apare ca: 1101\/011011

yxxy/\xxxxyy

În urma aplicării operatorului de recombinare obţinem descendenţii: 1101xxxxyy şi

yxxy011011

După recombinare se poate aplica operatorul de mutaţie. Fiecare bit din populaţie se va schimba cu o mică probabilitate pm (în general rata mutaţiei este sub 1%).

După ce procesele de selecţie, recombinare şi mutaţie au luat sfârşit, populaţia următoare poate fi evaluată. Evaluarea, selecţia, recombinarea şi mutaţia formează o generaţie în executarea unui algoritm genetic. Generaţia următoare devine generaţie curentă şi algoritmul este reluat până se atinge obiectivul propus definit de funcţia obiectiv.

Teoria algoritmilor genetici presupune o mare varietate de metode şi tehnici utilizate, începând de la modul de reprezentare a variabilelor funcţiei de optimizat şi terminând cu metodele de calcul.

Rezultatele foarte bune obţinute în unele domenii ale inteligenţei artificiale au impus această metodă pe lângă reţelele neurale şi mulţimile nuanţate ca instrumente foarte puternice de lucru.

În concluzie putem spune că un lucru izbitor la algoritmii genetici şi modelele paralele este bogăţia acestor forme de calcul. Ceea ce pare o mică schimbare în algoritm duce adeseori la comportări surprinzătoare.

64

Page 65: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

65

Reţelele neurale, mulţimile nuanţate şi algoritmii genetici sunt adesea utilizate împreună, în diverse domenii ale inteligenţei artificiale cum ar fi analiza imaginilor, recunoaşterea formelor şi a vorbirii, sisteme expert etc.

Page 66: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

66

SEMINAR Seminar 1 Problema 1.1. Să se construiască tabelele de adevăr pentru conectorii ~, v, ^, →, ↔ (negare, sau, şi, implicare şi respectiv, echivalenţă). Rezolvare Tabelul 1.1. a b ~ a

a negat ~ b

b negat a v b a ŞI b

a ^ b a SAU b

a → b a IMPLICĂ b

a↔b a ECHIVALENT b

0 0 1 1 0 0 1 1 0 1 1 0 1 0 1 0 1 0 0 1 1 0 0 0 1 1 0 0 1 1 1 1 Problema 1.2. Se consideră egalitatea: p v q = ~ (~p ^ ~ q) să se demonstreze cu ajutorul tabelelor de adevăr că această egalitate este adevărată. Rezolvare Tabelul 1.2.

p q ~p ~q ~p ^ ~q p v q ~ (~p ^ ~ q) 0 0 1 1 1 0 0 0 1 1 0 0 1 1 1 0 0 1 0 1 1 1 1 0 0 0 1 1

Pentru ca formula să fie adevărată, ultimele două coloane ale tabelului de adevăr 1.2. trebuie să fie identice. Cu alte cuvinte, toate interpretările din ultimele două coloane trebuie să aibă valoarea corespunzătoare, egală. Problema 1.3. Să se arate, cu ajutorul tabelelor de adevăr că formula P: p v q → ~ (~p ^ ~ q) este o tautologie.

Page 67: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

67

Rezolvare Dacă luăm în considerare ultimele două coloane din tabelul 1.2. obţinem:

Tabelul 1.3. p v q ~ (~p ^ ~ q) p v q → ~ (~p ^ ~ q)

0 0 1 1 1 1 1 1 1 1 1 1

Ceea ce arată că formula este o tautologie (este adevărată în toate interpretările ei). Problema 1.4. Să se arate cu ajutorul tabelelor de adevăr că egalitatea: p ^ (q v r) =(p ^ q) v (p ^ r) – distributivitate – este adevărată. Rezolvare Tabelul 1.4.

p q r q v r p ^ q p ^ r p ^ (q v r) (p ^ q) v (p ^ r) 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 1 0 1 0 0 0 0 0 1 1 1 0 0 0 0 1 0 0 0 0 0 0 0 1 0 1 1 0 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1

Aşa cum s+a arătat şi la problema 1.2. ultimele două coloane ale tabelului de adevăr 1.4. trebuie să fie egale pentru ca egalitatea să fie adevărată. Problema 1.5 Se consideră formula P: p ^ (q v r). Să se răspundă la următoarele întrebări:

1. Formula P este realizabilă? Răspuns: DA 2. Formula P este o tautologie? Răspuns: NU 3. Formula P este nevalidă? Răspuns: DA 4. Formula P este o contradicţie? Răspuns: NU

Notă: răspunsurile se obţin având în vedere tabelul de adevăr 1.4. şi diagrama de la pagina 11 din curs. Problema 1.6. Se consideră formula: P: p ^ (q v r) să se răspundă la următoarele întrebări referitoare la interpretarea {p, ~q, r}. Să se răspundă la următoarele întrebări:

Page 68: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

68

1. Interpretarea satisface pe P? Răspuns: DA 2. Interpretarea falsifică pe P? Răspuns: NU

Notă: răspunsurile se obţin având în vedere tabelul de adevăr 1.4. şi explicaţiile de la pagina 10 din curs. Problema 1.7. Să se scrie toate modelele formulei: P: p ^ (q v r). Rezolvare Un model reprezintă o interpretare care satisface formula P (o interpretare pentru care formula P este adevărată). Folosindu-ne de tabelul 1.4, obţinem modelele formulei P:

{p, ~q, r}, {p, q, ~r} şi {p, q, r} Seminar 2 Problema 2.1. Cu ajutorul metodei lui Quine, prezentată în curs la pagina 13, să se determine caracterul formulei: P: ((p ^ q ^ ~r) ^ (p v r)) → ((p v r) ^ (q v r)). Rezolvare Atomul care apare cel mai frecvent este atomul r. Îl înlocuim mai întâi cu V (adevărat) şi apoi cu F (fals). Dacă înlocuim atomul r cu adevărat (V) obţinem:

1.a. ((p ^ q ^ ~V) ^ (p v V)) → ((p v V) ^ (q v V)) din care se obţine:

2.a. ((p ^ q ^ F) ^ V)) → (V ^ V) apoi:

3.a. ((p ^ F) ^ V)) → V după care:

4.a. (F ^ V) → V ceea ce duce la:

5.a. F → V şi în final:

6.a. F Înlocuim acum atomul r cu fals (F) şi obţinem:

1.b. ((p ^ q ^ ~F) ^ (p v F)) → ((p v F) ^ (q v F)) rezultă:

2.b. ((p ^ q ^ V) ^ p) → (p ^ q) deci:

3.b. ((p ^ q) ^ p) → (p ^ q) În acest moment atomul r este eliminat. Vom înlocui în continuare atomul care apare cel mai des întâi cu adevărat şi apoi cu fals. Acesta este atomul p:

Page 69: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

((p ^ q) ^ p) → (p ^ q)

((V ^ q) ^ V) → (V ^ q) ((F ^ q) ^ F) → (F ^ q)

69

ceea ce duce la: (q ^ V) → q (F ^ F) → F

şi deci: q → q F → F

în final: V → V F → F V

V V

Rezultat obţinut prin înlocuirea atomului q cu adevărat şi apoi fals. S-a obţinut astfel o interpretare în care formula este falsă (punctul 6.a.) iar restul în care formula este adevărată. Putem spune că formula este consistentă dar nu este o tautologie. Problema 2.2. Să se demonstreze cu ajutorul metodei lui Quine că formula: P: (p→q) →((q→r) →((p v q)→r)) este o tautologie. Rezolvare Ca în exemplul precedent, se va înlocui atomul care apare cel mai frecvent, q, mai întâi cu adevărat (V) şi apoi cu fals (F). a. q = V

1.a. (p→V) →((V→r) →((p v V)→r)) 2.a. V →(r →(V→r) 3.a. V →(r →r) 4.a. V →(r →r) În această situaţie se înlocuieşte atomul r, mai întâi cu adevărat şi apoi cu fals. Se obţine:

4.a.1. V →(V →V) rezultă: V → V şi ceea ce în final duce la V (adevărat); 4.a.2. V →(F →F) rezultă: V → V şi ceea ce în final duce la V (adevărat); b. q = F 1.b. (p→F) →((F→r) →((p v F)→r)) 2.b. ~p →(V →(p→r))

Se înlocuieşte acum atomul care apare cel mai frecvent, p, mai întâi cu adevărat şi apoi cu fals. 2.b.1. ~V →(V →(V→r)), rezultă: F →(V →r) şi deci: F → r care este V (adevărat); 2.b.2. ~F →(F →(F→r)), rezultă: V →(F →V) deci: V →V care dă rezultatul V (adevărat). S-a obţinut în toate cazurile rezultatul „adevărat” şi deci formula este o tautologie”. Notă: Seminarul se va completa cu exemplele din curs.

Page 70: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

70

Seminar 3. Problema 3.1. Să se demonstreze prin metoda reducerii că formula de la problema 2.2. este o tautologie. Rezolvare Formula este: P: (p→q) →((q→r) →((p v q)→r)) Încercăm să falsificăm această formulă. Conectorul principal va fi conectorul IMPLICARE aşa cum se arată în continuare: 2 1 3 2 3

(p→q) →((q→r) →((p v q)→r)) 1 0 1 0 0 în cazul pasului 2 avem două situaţii ce presupun mai multe variante de studiat: o operaţie IMPLICARE a cărui rezultat este unu şi o operaţie SAU a cărui rezultat este de asemenea unu. Se studiază fiecare caz în parte.

a) în primul caz, operaţia de implicare are rezultatul unu când ambii termeni sunt zero, se studiază această situaţie:

5 4 5 2 6 4 6 1 7 3 7 2 3 (p→q) →((q→r) →((p v q)→r))

1 0 0 1 1 0 0 0 1 1 0 0 0 valoarea atomului q este v(q) = 0 la pasul 5 (valoare introdusă pentru ca rezultatul operaţiei de IMPLICARE să fie zero) şi v(q) = 1 la pasul 6 (valoare introdusă, de asemenea pentru ca rezultatul operaţiei de IMPLICARE să fie zero). Cele două valori contradictorii ne arată că formula nu poate fi falsificată în această interpretare. Toate celelalte cazuri pentru situaţia 0 → 0, indiferent de combinaţia folosită pentru funcţia SAU la pasul 3, conduc la acelaşi rezultat.

b) în al doilea caz, operaţia de implicare are rezultatul unu când unul din termeni este zero şi celălalt este unu:

6 4 6 2 4 1 3 2 3 (p→q) →((q→r) →((p v q)→r))

1 0 0 1 1 0 1 0 0 vom analiza acest rezultat deoarece sunt mai multe combinaţii posibile. La pasul 4 prima operaţie de IMPLICARE egală cu zero impune v(p) = 1 şi v(q) = 0. Cea de-a treia operaţie de IMPLICARE, egala cu unu permite următoarele combinaţii: v(p) = 0 şi v(q) = 0, care duce la o contradicţie, v(p) = 0 şi v(q) = 1, care conduce de asemenea la o contradicţie şi, de asemenea, v(p) = 1 şi v(q) = 1 care este, evident iarăşi o contradicţie. Din nou nu s-a putut găsi o combinaţie v(p), v(q) care sa permită falsificarea formulei.

c) în al treilea caz, operaţia de implicare are rezultatul unu când ambii termeni sunt egali cu unu. Evident că în această situaţie, în partea stângă a ecuaţiei vom putea găsi combinaţii v(p), v(q) care să satisfacă ambele implicaţii:

4 2 4 1 3 2 3 (p→q) →((q→r) →((p v q)→r))

1 1 1 0 1 0 0 Studiem in acest caz membrul drept al ecuaţiei: combinaţia v(p) = 0 şi v(q) = 0, impune v (q) = 0, v(r) = 1 ceea ce intră în contradicţie cu valoarea lui r stabilită la pasul 3,

Page 71: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

71

combinaţia v(p) = 0 şi v(q) = 1, impune v (q) = 1, v(r) = 1 ceea ce intră iarăşi în contradicţie cu valoarea lui r stabilită la pasul 3 iar combinaţia v(p) = 1 şi v(q) = 1, impune v (q) = 1, v(r) = 1 ceea ce intră în contradicţie cu valoarea lui r stabilită la pasul 3. După cum s-a putut vedea nu mai este necesară studierea combinaţiilor posibile pentru conectorul SAU deoarece nu se poate găsi o combinaţie convenabilă pentru atomii p,q,r din analiza celorlalţi conectori. Rezultă că în toate interpretările formula nu poate fi falsificată şi deci ea este o tautologie. Notă: Seminarul se va completa cu exemplele din curs. Seminar 4. Întrebări pentru testul grilă. 1. Alegeţi răspunsul corect, în funcţie de modul în care definiţia următoare este

corectă (ADEVĂRAT) sau incorectă (FALS). O formulă este validă dacă şi numai dacă este adevărată în toate interpretările.

A. ADEVĂRAT B. FALS Răspuns: A 2. Alegeţi varianta cea mai corectă din cele prezentate mai jos. Metoda lui Quine

reprezintă: A. O metodă de reprezentare a funcţiilor logice. B. O metodă de determinare a realizabilităţii unei formule. C. Un operator logic. Răspuns: B 3. Alegeţi răspunsul corect, în funcţie de modul în care definiţia următoare este

corectă (ADEVĂRAT) sau incorectă (FALS). Două formule sunt logic echivalente dacă au aceeaşi tabelă de adevăr.

A. ADEVĂRAT B. FALS Răspuns: A 4. Alegeţi răspunsul corect, în funcţie de modul în care definiţia următoare este

corectă (ADEVĂRAT) sau incorectă (FALS). O formulă nerealizabilă este adevărată în toate interpretările ei deci admite model.

A. ADEVĂRAT B. FALS Răspuns: B 5. Alegeţi varianta cea mai corectă din cele prezentate mai jos. Metoda reducerii

se bazează pe: A. Încercarea de falsificare a formulei date. B. Încercarea de validare a formulei date. C. Înlocuirea termenilor negaţi cu cei nenegaţi. Răspuns: A 6. Alegeţi răspunsul corect, în funcţie de modul în care definiţia următoare este

corectă (ADEVĂRAT) sau incorectă (FALS). Un lanţ inferenţial exprimat în limbaj obiect, ale cărui premise sunt axiome se numeşte demonstraţie iar concluzia se numeşte teoremă.

A. ADEVĂRAT B. FALS Răspuns: A

Page 72: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

7. Alegeţi răspunsul corect, în funcţie de modul în care definiţia următoare este corectă (ADEVĂRAT) sau incorectă (FALS). În cazul logicii propoziţiilor: o formulă validă poate fi şi inconsistentă.

A. ADEVĂRAT B. FALS Răspuns: B 8. Alegeţi răspunsul corect, în funcţie de modul în care definiţia următoare este

corectă (ADEVĂRAT) sau incorectă (FALS). Metoda lui Quine permite determinarea caracterului de tautologie al unei formule.

A. ADEVĂRAT B. FALS Răspuns: A 9. Alegeţi răspunsul corect, în funcţie de modul în care definiţia următoare este

corectă (ADEVĂRAT) sau incorectă (FALS). În cazul logicii propoziţiilor: o tautologie reprezintă o formulă validă.

A. ADEVĂRAT B. FALS Răspuns: A 10. Alegeţi varianta incorectă din cele prezentate mai jos. A. O formulă validă este consistentă. B. O formulă este nevalidă dacă şi numai dacă există o interpretare în care este falsă. C. O formulă este validă dacă şi numai dacă negaţia ei este inconsistentă. Răspuns: C Seminar 5. Să se deseneze schema bloc a unui sistem expert. Se vor explica următoarele blocuri: Modul de achiziţie a cunoştinţelor, Baza de cunoştinţe, Baza de fapte, Mecanismul de inferenţă, Modulul de explicare, Interfaţa utilizator (curs pagina 25). Se va desena şi se va explica schema bloc a strategiei de control cu restricţie nulă (curs pagina 26). Se vor discuta şi explica principalele elemente ale limbajului CLIPS (curs de la pagina 27). Seminar 6. Problema 6.1. Folosind universul de discurs, mulţimea oamenilor, să se definească mulţimea TÂNĂR care răspunde la întrebarea: „care este gradul de tinereţe al unei persoane” Rezolvare. Noţiunea de TÂNĂR este o noţiune imprecisă. Putem considera persoanele cu vârsta mai mică de 20 de ani ca fiind tinere. Vârsta unei persoane o notăm cu v(x). Un exemplu de definire este:

⎪⎩

⎪⎨

>

≤<−

=

30)(,0

30)(20,10

)(3020)(,1

)(

xv

xvxvxv

xATANAR

72

Page 73: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

Problema 6.2. Să se definească mulţimea oamenilor înalţi pe universul de discurs mulţimea oamenilor. Rezolvare. Caracteristica unei persoane de a fi înaltă este de asemenea o noţiune imprecisă. Pentru a specifica un model fuzzy, notăm h(x) înălţimea în centimetrii a unei persoane şi considerăm că oamenii cu înălţimea sub 150 cm sunt scunzi (nu sunt înalţi) iar cei cu înălţimea peste 200 cm sunt înalţi. Funcţia de apartenenţă la clasa oamenilor înalţi se defineşte atunci prin:

⎪⎩

⎪⎨

>

≤≤−

<

=

200)(,1

200)(150,200

150)(150)(,0

)(

xh

xhxhxh

xAINALT

Problema 6.3. Să se definească mulţimea fuzzy a numerelor reale foarte apropiate de numărul zero. Rezolvare. Dacă X este mulţimea fuzzy dorită, atunci un model pentru funcţia de apartenenţă A(x) poate fi:

211)(x

xA+

=

ceea ce ne conduce la: A(1) = 0,5; A(0) = 1; A(2) = 0,2; A(-2) = 0,2; A(3) = 0,1; A(-3) = 0,1. Un alt model ar putea fi:

2

211)( ⎟

⎠⎞

⎜⎝⎛+

=x

xA

ceea ce ne conduce la: A(1) = 0,25; A(0) = 1; A(2) = 0,04; A(-2) = 0,04; A(3) = 0,01; A(-3) = 0,01. Similar, putem defini mulţimea fuzzy a numerelor apropiate de numărul real a, cu ajutorul funcţiei de apartenenţă:

( )211)(

axxA

−+=

Problema 6.4. Se consideră universul de discurs mulţimea numerelor reale. Să se definească funcţia de apartenenţă pentru numerele reale care îndeplinesc condiţia a < b. Rezolvare. În acest caz se foloseşte o mulţime interval. Modelul interval este:

[ ][ ]

⎩⎨⎧ ∈

==altfel

baxxxA ba ,0

,,1)(1)( ,

Se spune că funcţia de apartenenţă furnizează o reprezentare pe verticală a unei mulţimi fuzzy.

73

Page 74: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

74

Seminar 7. Test grilă final. 11. Alegeţi varianta cea mai corectă din cele prezentate mai jos. Problemele tratate

cu succes de un sistem expert sunt: A. Probleme de optimizare. B. Probleme de conducere. C. Probleme pentru care nu există o soluţie algoritmică clară. Răspuns: C 12. Alegeţi răspunsul corect, în funcţie de modul în care definiţia următoare este

corectă (ADEVĂRAT) sau incorectă (FALS). O reţea neurală constă dintr-o mulţime de elemente de prelucrare (neuroni, elemente cognitive sau noduri ale reţelei) înalt interconectate.

A. ADEVĂRAT B. FALS Răspuns: A 13. Alegeţi răspunsul corect, în funcţie de modul în care definiţia următoare este

corectă (ADEVĂRAT) sau incorectă (FALS). Funcţia de ieşire a neuronului reprezintă funcţia de activare.

A. ADEVĂRAT B. FALS Răspuns: A 14. Alegeţi răspunsul corect, în funcţie de modul în care definiţia următoare este

corectă (ADEVĂRAT) sau incorectă (FALS). O reţea neurală multistrat poate conţine cel mult un strat ascuns.

A. ADEVĂRAT B. FALS Răspuns: B 15. Alegeţi răspunsul corect, în funcţie de modul în care definiţia următoare este

corectă (ADEVĂRAT) sau incorectă (FALS). Algoritmul de instruire a perceptronului se bazează pe modificarea ponderilor şi a valorii de prag.

A. ADEVĂRAT B. FALS Răspuns: A 16. Alegeţi răspunsul corect, în funcţie de modul în care definiţia următoare este

corectă (ADEVĂRAT) sau incorectă (FALS). O mulţime nuanţată nu poate avea complementară.

A. ADEVĂRAT B. FALS Răspuns: B 17. Alegeţi răspunsul corect, în funcţie de modul în care definiţia următoare este

corectă (ADEVĂRAT) sau incorectă (FALS). Populaţia iniţială a unui algoritm genetic este stabilită de funcţia de evaluare.

A. ADEVĂRAT B. FALS Răspuns: B 18. Alegeţi răspunsul corect, în funcţie de modul în care definiţia următoare este

corectă (ADEVĂRAT) sau incorectă (FALS). Un sistem expert conţine o bază de cunoştiinţe şi un mecanism de interferenţă.

A. ADEVĂRAT B. FALS Răspuns: B

Page 75: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

75

19. Alegeţi răspunsul corect, în funcţie de modul în care definiţia următoare este corectă (ADEVĂRAT) sau incorectă (FALS). Ponderile sinaptice sunt asociate ieşirilor neuronului.

B. ADEVĂRAT B. FALS Răspuns: B 20. Alegeţi varianta corectă din cele prezentate mai jos. În activitatea de instruire a

unei reţele neurale sunt folosite: A. Listele cu ponderile aşteptate. B. Listele de conexiuni cunoscute. C. Listele de asociere. Răspuns: C 21. Alegeţi varianta incorectă din cele prezentate mai jos. Perceptronul reprezintă: A. Cea mai simplă reţea neurală. B. O reţea neurală cu un singur strat. C. Perceptronul nu poate avea decât două intrări. Răspuns: C 22. Alegeţi varianta incorectă din cele prezentate mai jos. O mulţime nuanţată este

caracterizată de: A. Universul mulţimii nuanţate. B. Tabelul de adevăr. C. Funcţia de apartenenţă. Răspuns: B 23. Alegeţi răspunsul corect, în funcţie de modul în care definiţia următoare este

corectă (ADEVĂRAT) sau incorectă (FALS). În cazul unui algoritm genetic fiecare şir component al unei generaţii se numeşte cromozom sau genotip.

A. ADEVĂRAT B. FALS Răspuns: A 24. Alegeţi răspunsul corect, în funcţie de modul în care definiţia următoare este

corectă (ADEVĂRAT) sau incorectă (FALS). Într-un algoritm genetic trecerea de la generaţia curentă la generaţia următoare se face prin selecţie, recombinare şi mutaţie.

A. ADEVĂRAT B. FALS Răspuns: A 25. Alegeţi răspunsul corect, în funcţie de modul în care definiţia următoare este

corectă (ADEVĂRAT) sau incorectă (FALS). Pentru un perceptron ponderile sinaptice pot fi inhibitoare sau excitatoare.

A. ADEVĂRAT B. FALS Răspuns: A 26. Alegeţi varianta incorectă din cele prezentate mai jos. Funcţiile unui sistem

expert sunt: A. Funcţia de învăţare. B. Funcţia de evaluare a cunoştinţelor pe baza raţionamentelor. C. Funcţia de elaborare a unor algoritmi simplii. Răspuns: C 27. Alegeţi varianta corectă din cele prezentate mai jos. Listele de asociere în cazul

reţelelor neurale reprezintă: A. Asocierea intrărilor cu ponderile sinaptice.. B. Asocierea intrărilor cu funcţiile de excitaţie.

Page 76: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

76

C. Perechi de valori intrare-ieşire furnizate reţelei neurale în procesul de instruire. Răspuns: C 28. Alegeţi răspunsul corect, în funcţie de modul în care definiţia următoare este

corectă (ADEVĂRAT) sau incorectă (FALS). Universul unei mulţimi nuanţate poate fi continuu sau discret.

A. ADEVĂRAT B. FALS Răspuns: A

Page 77: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

77

LABORATOR Laborator 1, 2, 3.

Demonstrarea tautologiilor cu ajutorul calculatorului. Să se întocmească un program în limbaj C sau Pascal cu ajutorul căruia să se verifice tautologiile din formulele de la paginile 12 şi 13 din curs (tautologiile fundamentale). Indicaţie: Ne vom baza pe metoda tabelelor de adevăr în care trebuie să demonstrăm că formula este adevărată în toate interpretările ei. Pentru aceasta se vor construi funcţii (proceduri) pentru conectorii: ~ (negare), v (sau), ^ (şi), → (implicare). Cu ajutorul acestora vor fi evaluate formulele pentru toate valorile posibile pentru variabilele P,Q, R. Tabelul de adevăr pentru conectori: a b ~ a

a negat ~ b

b negat a v b a ŞI b

a ^ b a SAU b

a → b a IMPLICĂ b

a↔b a ECHIVALENT b

0 0 1 1 0 0 1 1 0 1 1 0 1 0 1 0 1 0 0 1 1 0 0 0 1 1 0 0 1 1 1 1

Un exemplu de realizare a unui program de verificare a tautologiilor, în C++ va fi prezentat în continuare.

Pentru început vor fi realizate funcţiile logice de baza de care avem nevoie. În C++ funcţiile logice ŞI (&&) şi SAU (||) sunt definite, deci trebuie realizate doar funcţiile implicare şi echivalenţă. Realizarea acestor funcţii este făcută in programul „binar1.cpp”: PROGRAMUL binar1.cpp /* testare operatiilor logice */ #include <stdio.h> #include <conio.h>

Page 78: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

78

char impl (char a,char b) { char c; if (a==0) c=1; if ((a==1) && (b==0)) c=0; if ((a==1) && (b==1)) c=1; return c; } char echiv (char a,char b) { char c; if (a==b) c=1; if (a != b) c=0; return c; } void main(void) { unsigned char alfa, beta, gama,pas; clrscr(); for (alfa=0; alfa<=1; alfa++) for (beta=0; beta<=1; beta++) { printf("\n alfa= %d", alfa); printf("\n beta= %d", beta); gama=alfa && beta; printf("\n gama(si)= %d", gama); gama=alfa || beta; printf("\n gama(sau)= %d", gama); printf("\n gama(nu)= %d", !gama); gama=impl(alfa,beta); printf("\n gama(implicare)= %d", gama); gama=echiv(alfa,beta); printf("\n gama(echivalenta)= %d", gama); scanf("%c",pas); } }

La începutul programului sunt definite cele două funcţii logice necesare: IMPLICARE funcţia impl: char impl (char a,char b) { char c; if (a==0) c=1; if ((a==1) && (b==0)) c=0; if ((a==1) && (b==1)) c=1; return c;

Page 79: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

79

} şi ECHIVALENŢĂ funcţia echiv: char echiv (char a,char b) { char c; if (a==b) c=1; if (a != b) c=0; return c; } Dacă ne uităm la tabela de adevăr prezentată mai sus este uşor să înţelegem cum au fost realizate aceste funcţii:

Funcţia impl are ca variabile de intrare variabilele a şi b şi ca rezultat variabila c. Variabila c ia valoarea 1 (unu) logic dacă variabila a este zero (prima instrucţiune if) şi ia valoarea logică a variabilei b dacă variabila a este 1 (unu) – următoarele două instrucţiuni if.

Funcţia echiv are ca variabile de intrare variabilele a şi b şi ca rezultat variabila c. Variabila c ia valoarea 1 (unu) logic dacă variabila a şi variabila b au valori egale (prima instrucţiune if) şi ia valoarea logică 0 (zero) în caz contrar (a doua instrucţiune if).

Prin execuţia programului se obţine următorul rezultat: alfa= 0 beta= 0 gama(si)= 0 gama(sau)= 0 gama(nu beta)= 1 gama(implicare)= 1 gama(echivalenta)= 1 alfa= 0 beta= 1 gama(si)= 0 gama(sau)= 1 gama(nu beta)= 0 gama(implicare)= 1 gama(echivalenta)= 0 alfa= 1 beta= 0 gama(si)= 0 gama(sau)= 1 gama(nu beta)= 1 gama(implicare)= 0

Page 80: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

80

gama(echivalenta)= 0 alfa= 1 beta= 1 gama(si)= 1 gama(sau)= 1 gama(nu beta)= 0 gama(implicare)= 1 gama(echivalenta)= 1

În aceste rezultate, variabilele de intrare sunt notate cu alfa şi beta în loc de a şi b iar rezultatul este gama fiind specificat în paranteză ce funcţie este reprezentată.

După cum se vede rezultatul obţinut este identic cu cel din tabela de adevăr. În continuare vom arăta cum se face verificarea unei tautologii. Pentru verificarea formulei: ((a si b) implica c) şi (d şi e) implica (d sau e) care poate fi scrisă şi : ((a ^ b) → c) ^ (d ^ e) → (d v e) vom folosi programul „binar2.ccp”. Acest exemplu a fost ales mult mai complex decât formulele 1) … 34) în aşa fel încât să se înţeleagă modul de lucru pentru toate cazurile. PROGRAMUL binar2.ccp /* testare operatiilor logice */ // pentru functia ((a si b) implica c) si (d si e) implica (d sau e) #include <stdio.h> #include <conio.h> //pentru inceput sunt definite functiile logice implicare si ecuvalenta char impl (char a,char b) { char c; if (a==0) c=1; if ((a==1) && (b==0)) c=0; if ((a==1) && (b==1)) c=1; return c; } char echiv (char a,char b) { char c; if (a==b) c=1; if (a != b) c=0; return c;

Page 81: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

81

} void main(void) { unsigned char a, b, c, d, e, AS[4], A[8], B[8], C[8], D[8], E[8], contor, pas; FILE *fisier; fisier=fopen("rezultat","w+"); clrscr(); // se calculeaza functia a si b // se memoreaza temporar in vectorul AS printf("\n Se calculeaza (a SI b)"); fprintf(fisier,"\n Se calculeaza (a SI b)"); contor=0; for (a=0; a<=1; a++) for (b=0; b<=1; b++) { // rezultatul se pastreaza in vectorul AS AS[contor]=a && b; printf("\n a: %d",a); printf("\n b: %d",b); printf("\n Valoare iesire a SI b: %d",AS[contor]); fprintf(fisier,"\n a: %d",a); fprintf(fisier,"\n b: %d",b); fprintf(fisier,"\n Valoare iesire a SI b: %d",AS[contor]); contor++; scanf("%c",pas); } // se calculeaza (a si b) implica c // (a si b) a fost deja calculat si se afla in vectorul AS // se calculeaza deci AS implica c // AS are 4 valori rezultate din calculul precedent valoarea lui c va // fi 0 si 1 rezulta ca vor fi 8 valori la sfirsit // rezultatul se pune in vectorul A. printf("\n Se calculeaza (a SI b) IMPLICA c"); fprintf(fisier,"\n Se calculeaza (a SI b) IMPLICA c"); contor=0; for (c=0; c<=1; c++) // se foloseste temporar variabila a pentru a contoriza cele patru // stari ale vectorului AS for (a=0; a<=3; a++) { A[contor]=impl(AS[a],c); printf("\n (a si b): %d",AS[a]); printf("\n c: %d",c); printf("\n Valoare iesire (a SI b) IMPLICA c: %d",A[contor]); fprintf(fisier,"\n (a si b): %d",AS[a]);

Page 82: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

82

fprintf(fisier,"\n c: %d",c); fprintf(fisier,"\n Valoare iesire (a SI b) IMPLICA c: %d",A[contor]); contor++; scanf("%c",pas); } // se calculeaza acum formula (d si e) iar rezultatul acesteia se // memoreaza in B si formula (d sau e) care se memoreaza in C. // Pentru ca vectorii obtinuti sa fie compatibili cu vectorul A, // vectorii B si C vor avea si ei 8 valori desi nu sunt necesare decit // patru (valorile se vor repeta de doua ori. printf("\n Se calculeaza separat cele doua functii. Prima: d SI e iar a doua d SAU e"); fprintf(fisier,"\n Se calculeaza separat cele doua functii. Prima: d SI e iar a doua d SAU e"); contor=0; for (a=0; a<=1; a++) // se foloseste temporar variabila a pentru a dubla cele patru // stari ale vectorilor B si C for (d=0; d<=1; d++) for (e=0; e<=1; e++) { B[contor]=d && e; C[contor]=d || e; printf("\n d: %d",d); printf("\n e: %d",e); printf("\n Valoare iesire (d SI e): %d",B[contor]); printf("\n Valoare iesire (d SAU e): %d",C[contor]); fprintf(fisier,"\n d: %d",d); fprintf(fisier,"\n e: %d",e); fprintf(fisier,"\n Valoare iesire (d SI e): %d",B[contor]); fprintf(fisier,"\n Valoare iesire (d SAU e): %d",C[contor]); if (contor==4) {printf("\n Valorile se repeta"); fprintf(fisier,"\n Valorile se repeta");} contor++; scanf("%c",pas); } // se calculeaza formula ((a SI b) IMPLICA c) SI (d SI e) care, cu notatiile // facute se poate scrie A SI B iar rezultatul se va pune in vectorul D. printf("\n Se calculeaza formula ((a SI b) IMPLICA c) SI (d SI e)"); fprintf(fisier,"\n Se calculeaza formula ((a SI b) IMPLICA c) SI (d SI e)"); for (contor=0; contor<=7; contor++) { D[contor]=A[contor] && B[contor]; printf("\n ((a SI b) IMPLICA )c: %d",A[contor]); printf("\n (d SI e): %d",B[contor]); printf("\n Valoare iesire (A SI B): %d",D[contor]); fprintf(fisier,"\n ((a SI b) IMPLICA )c: %d",A[contor]);

Page 83: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

83

fprintf(fisier,"\n (d SI e): %d",B[contor]); fprintf(fisier,"\n Valoare iesire (A SI B): %d",D[contor]); scanf("%c",pas); } // se calculeaza formula ((a SI b) IMPLICA c) SI (d SI e) IMPLICA (d SAU e) // care, cu notatiile facute se poate scrie D IMPLICA C // iar rezultatul se va pune in vectorul E. printf("\n Se calculeaza formula ((a SI b) IMPLICA c) SI (d SI e) IMPLICA (d SAU e)"); fprintf(fisier,"\n Se calculeaza formula ((a SI b) IMPLICA c) SI (d SI e) IMPLICA (d SAU e)"); for (contor=0; contor<=7; contor++) { E[contor]=impl(D[contor],C[contor]); printf("\n ((a SI b) IMPLICA )c SI (d SI e): %d",D[contor]); printf("\n (d SAU e): %d",C[contor]); printf("\n Valoare iesire D IMPLICA C: %d",E[contor]); fprintf(fisier, "\n ((a SI b) IMPLICA )c SI (d SI e): %d",D[contor]); fprintf(fisier, "\n (d SAU e): %d",C[contor]); fprintf(fisier, "\n Valoare iesire D IMPLICA C: %d",E[contor]); scanf("%c",pas); } printf("\n Verificarea s-a terminat!"); scanf("%c",pas); fclose(fisier); }

Pentru început vom construi tabelul de adevăr pentru această formulă. Prima observaţie care se poate face este că prima parte a formulei: ((a ^ b) → c) depinde de variabilele a, b şi c care nu apar în partea a doua a formulei. În acest fel vom construi tabelul de adevăr din două tabele. Primul tabel:

c b a (a ^ b) (a ^ b) → c notat mai departe cu A 0 0 0 0 1 0 0 1 0 1 0 1 0 0 1 0 1 1 1 0 1 0 0 0 1 1 0 1 0 1 1 1 0 0 1 1 1 1 1 1

Formula (a ^ b) → c nu este validă (este nevalidă) şi deci nu este o tautologie.

Pentru a evalua formula se construieşte acum cel de-al doilea tabel pentru

formula: A ^ (d ^ e) → (d v e)

Page 84: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

este :

A d e (d ^ e) notat B

(d v e) notat C

A ^ B notat D

D → C care este de fapt formula ((a ^ b) → c) ^ (d ^ e) → (d v e)

0 0 0 0 0 0 1 0 0 1 0 1 0 1 0 1 0 0 1 0 1 0 1 1 1 1 0 1 1 0 0 0 0 0 1 1 0 1 0 1 0 1 1 1 0 0 1 0 1 1 1 1 1 1 1 1

Formula este egala cu unu in toate interpretările ei şi deci este o tautologie. Acelaşi lucru a fost realizat şi cu ajutorul programului Binar2. Rezultatele acestuia sunt: Se calculeaza (a SI b) a: 0 b: 0 Valoare iesire a SI b: 0 a: 0 b: 1 Valoare iesire a SI b: 0 a: 1 b: 0 Valoare iesire a SI b: 0 a: 1 b: 1 Valoare iesire a SI b: 1 Se calculeaza (a SI b) IMPLICA c (a si b): 0 c: 0 Valoare iesire (a SI b) IMPLICA c: 1 (a si b): 0 c: 0 Valoare iesire (a SI b) IMPLICA c: 1 (a si b): 0 c: 0 Valoare iesire (a SI b) IMPLICA c: 1 (a si b): 1 c: 0 Valoare iesire (a SI b) IMPLICA c: 0 (a si b): 0 c: 1 Valoare iesire (a SI b) IMPLICA c: 1 (a si b): 0

84

Page 85: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

85

c: 1 Valoare iesire (a SI b) IMPLICA c: 1 (a si b): 0 c: 1 Valoare iesire (a SI b) IMPLICA c: 1 (a si b): 1 c: 1 Valoare iesire (a SI b) IMPLICA c: 1 Se calculeaza separat cele doua functii. Prima: d SI e iar a doua d SAU e d: 0 e: 0 Valoare iesire (d SI e): 0 Valoare iesire (d SAU e): 0 d: 0 e: 1 Valoare iesire (d SI e): 0 Valoare iesire (d SAU e): 1 d: 1 e: 0 Valoare iesire (d SI e): 0 Valoare iesire (d SAU e): 1 d: 1 e: 1 Valoare iesire (d SI e): 1 Valoare iesire (d SAU e): 1 d: 0 e: 0 Valoare iesire (d SI e): 0 Valoare iesire (d SAU e): 0 Valorile se repeta d: 0 e: 1 Valoare iesire (d SI e): 0 Valoare iesire (d SAU e): 1 d: 1 e: 0 Valoare iesire (d SI e): 0 Valoare iesire (d SAU e): 1 d: 1 e: 1 Valoare iesire (d SI e): 1 Valoare iesire (d SAU e): 1 Se calculeaza formula ((a SI b) IMPLICA c) SI (d SI e) ((a SI b) IMPLICA )c: 1 (d SI e): 0 Valoare iesire (A SI B): 0

Page 86: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

86

((a SI b) IMPLICA )c: 1 (d SI e): 0 Valoare iesire (A SI B): 0 ((a SI b) IMPLICA )c: 1 (d SI e): 0 Valoare iesire (A SI B): 0 ((a SI b) IMPLICA )c: 0 (d SI e): 1 Valoare iesire (A SI B): 0 ((a SI b) IMPLICA )c: 1 (d SI e): 0 Valoare iesire (A SI B): 0 ((a SI b) IMPLICA )c: 1 (d SI e): 0 Valoare iesire (A SI B): 0 ((a SI b) IMPLICA )c: 1 (d SI e): 0 Valoare iesire (A SI B): 0 ((a SI b) IMPLICA )c: 1 (d SI e): 1 Valoare iesire (A SI B): 1 Se calculeaza formula ((a SI b) IMPLICA c) SI (d SI e) IMPLICA (d SAU e) ((a SI b) IMPLICA )c SI (d SI e): 0 (d SAU e): 0 Valoare iesire D IMPLICA C: 1 ((a SI b) IMPLICA )c SI (d SI e): 0 (d SAU e): 1 Valoare iesire D IMPLICA C: 1 ((a SI b) IMPLICA )c SI (d SI e): 0 (d SAU e): 1 Valoare iesire D IMPLICA C: 1 ((a SI b) IMPLICA )c SI (d SI e): 0 (d SAU e): 1 Valoare iesire D IMPLICA C: 1 ((a SI b) IMPLICA )c SI (d SI e): 0 (d SAU e): 0 Valoare iesire D IMPLICA C: 1 ((a SI b) IMPLICA )c SI (d SI e): 0 (d SAU e): 1 Valoare iesire D IMPLICA C: 1 ((a SI b) IMPLICA )c SI (d SI e): 0 (d SAU e): 1 Valoare iesire D IMPLICA C: 1 ((a SI b) IMPLICA )c SI (d SI e): 1 (d SAU e): 1 Valoare iesire D IMPLICA C: 1

Page 87: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

87

Se poate observa faptul că rezultatele sunt identice cu cele din tabele. Vom verifica acum cu ajutorul unui program similar tautologia numarul 7):

P ^ Q →Q din tabelul de început al acestei lucrari. Programul realizat este programul Binar3. Pentru a simplifica lucrurile vom modifica fişierul binar1.ccp şi-l vom salva sub numele flogic.ccp, astfel : PROGRAMUL flogic.ccp /* testarea operatiilor logice */ char impl (char a,char b) { char c; if (a==0) c=1; if ((a==1) && (b==0)) c=0; if ((a==1) && (b==1)) c=1; return c; har echiv (char a,char b) { har c; if (a==b) c=1; if (a != b) c=0; return c; } După aceasta, se creează fişierul flogic.h cu următorul conţinut: extern char impl (char a,char b); extern char echiv (char a,char b);

putem să realizăm acum fişierul binar3.ccp pentru verificarea formulei P ^ Q →Q: PROGRAMUL binar3.ccp // programul Binar3 de verificare a formulei (p SI q) IMPLICA q #include <stdio.h> include<conio.h> #include<flogic.h> void main (void) { unsigned char p,q,r,pas; FILE *fisier; isier=fopen("rezultat","w+");

Page 88: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

88

clrscr(); for (p=0; p<=1; p++) or (q=0; q<=1; q++) { r = impl((p && q),q); printf("\n p= %d",p); printf("\n q= %d",q); printf("\n Rezultatul pentru (p SI q) IMPLICA q este: %d",r); scanf("%c",pas); fprintf(fisier,"\n p= %d",p); fprintf(fisier,"\n q= %d",q); fprintf(fisier,"\n Rezultatul pentru (p SI q) IMPLICA q este: %d",r); fscanf(fisier,"%c",pas); } fclose(fisier); }

Datele se afişează pe ecran şi se salvează şi în fişierul rezultat pentru a fi accesibile mai târziu.

După ce au fost create aceste fişiere se creează proiectul cu numele binar3.prj. Acest lucru se realizează prin selectarea meniului PROJECT -> OPEN PROJECT şi în fereastra care se deschide se scrie numele proiectului binar3.prj.

După aceasta se deschide din nou meniul PROJECT şi se selectează ADD ITEM. În fereastra care se deschide se selectează binar3.ccp şi flogic.ccp cu opţiunea ADD după care se selectează DONE. Proiectul poate fi acum compilat şi executat. La sfârşit se selectează opţiunea CLOSE PROJECT din meniul PROJECT. Din execuţia programului se vede că formula este o tautologie: p= 0 q= 0 Rezultatul pentru (p SI q) IMPLICA q este: 1 p= 0 q= 1 Rezultatul pentru (p SI q) IMPLICA q este: 1 p= 1 q= 0 Rezultatul pentru (p SI q) IMPLICA q este: 1 p= 1 q= 1 Rezultatul pentru (p SI q) IMPLICA q este: 1

La sfârşit se prezintă un exemplu similar pentru formula 9) din tabelul prezentat la început: (P→(Q→R)) →((P ^ Q) →R) legea importării. PROGRAMUL binar4.cpp // programul Binar3 de verificare a formulei (p IMPLICA (q IMPLICA r)) IMPLICA ((p SI Q) IMPLICA r)

Page 89: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

89

#include <stdio.h> #include<conio.h> #include<flogic.h> void main (void) { unsigned char p,q,r,s,pas; FILE *fisier; fisier=fopen("rezultat","w+"); clrscr(); for (p=0; p<=1; p++) for (q=0; q<=1; q++) for (r=0; r<=1; r++) { s=impl(impl(p,impl(q,r)) , impl(p && q, r)); printf("\n p= %d",p); printf("\n q= %d",q); printf("\n q= %d",r); printf("\n Rezultatul pentru (p IMPLICA (q IMPLICA r)) IMPLICA ((p SI Q) IMPLICA r) este: %d",s); fprintf(fisier,"\n p= %d",p); fprintf(fisier,"\n q= %d",q); fprintf(fisier,"\n q= %d",r); fprintf(fisier,"\n Rezultatul pentru (p IMPLICA (q IMPLICA r)) IMPLICA ((p SI Q) IMPLICA r) este: %d",s); scanf("%c",pas); } fclose(fisier); }

Se observă că diferenţele sunt mici faţă de programul binar3.ccp şi programul binar4.cpp se poate obţine din modificarea acestuia. Mai întâi sa salvează fişierul binar3.cpp sub numele binar4.cpp prin selectarea meniului FILE -> SAVE AS. În fişierul nou creat se adaugă o nouă variabilă s, se modifică ecuaţia de calculat corespunzător: s=impl(impl(p,impl(q,r)) , impl(p && q, r)); şi se modifică mesajele de afişat. Odată terminat programul binar4.cpp se creează proiectul binar4.prj la fel ca mai sus şi programul poate fi executat.

Din execuţia programului se vede că formula (P→(Q→R)) →((P ^ Q) →R) este de asemenea o tautologie: p= 0 q= 0

Page 90: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

90

q= 0 Rezultatul pentru (p IMPLICA (q IMPLICA r)) IMPLICA ((p SI Q) IMPLICA r) este: 1 p= 0 q= 0 q= 1 Rezultatul pentru (p IMPLICA (q IMPLICA r)) IMPLICA ((p SI Q) IMPLICA r) este: 1 p= 0 q= 1 q= 0 Rezultatul pentru (p IMPLICA (q IMPLICA r)) IMPLICA ((p SI Q) IMPLICA r) este: 1 p= 0 q= 1 q= 1 Rezultatul pentru (p IMPLICA (q IMPLICA r)) IMPLICA ((p SI Q) IMPLICA r) este: 1 p= 1 q= 0 q= 0 Rezultatul pentru (p IMPLICA (q IMPLICA r)) IMPLICA ((p SI Q) IMPLICA r) este: 1 p= 1 q= 0 q= 1 Rezultatul pentru (p IMPLICA (q IMPLICA r)) IMPLICA ((p SI Q) IMPLICA r) este: 1 p= 1 q= 1 q= 0 Rezultatul pentru (p IMPLICA (q IMPLICA r)) IMPLICA ((p SI Q) IMPLICA r) este: 1 p= 1 q= 1 q= 1 Rezultatul pentru (p IMPLICA (q IMPLICA r)) IMPLICA ((p SI Q) IMPLICA r) este: 1

Lucrările de laborator vor conţine: schema logică sau pseudocodul programului utilizat, rezultatele obţinute în urma verificării tuturor formulelor prezentate la începutul lucrării, listate conform exemplului dat în această lucrare de laborator şi ecuaţiile formulelor incluse în program. Laborator 4, 5, 6.

Sistem expert Programul DIAG2.PAS este un program demonstrativ pentru utilizarea sistemelor expert. Acest program este destinat in principal pentru învăţarea modului de definire a termenilor introduşi în baza de date. Rezultatele obţinute sunt în general modeste datorită faptului că maşina de inferenţă utilizată este extrem de simplă. Chiar şi aşa se poate vedea modul de funcţionare al unui sistem expert şi faptul că definirea corectă a informaţiei duce la rezultate bune. De asemenea este prezentat şi listingul complet al programului în aşa fel încât să se poată urmări modul de realizare al diverselor funcţii program. Deşi pentru sisteme

Page 91: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

expert există limbaje consacrate s-a preferat scrierea programului în PASCAL pentru veleităţile didactice ale acestuia. După lansarea programului este afişat următorul meniu:

Introduceti:I -> invatare A -> actualizare M -> modificare C -> consultare D -> analiza E -> estimare S -> stergere baza de date Q -> parasire program Introduceti optiunea: _

Acest meniu permite realizarea următoarelor acţiuni:

• Învăţare. Permite introducerea noţiuniilor şi a atributelor acestora în baza de date. Atributele trebuie să răspundă la întrebările: ce este noţiunea la care se referă? ce caracterizează noţiunea? care sunt proprietăţile noţiunii? etc. şi ce NU este noţiunea la care se referă? ce NU caracterizează noţiunea? care NU sunt proprietăţile noţiunii? etc. În acest fel, în baza de date, se vor forma trei categorii de propoziţii: adevărate, false şi nedefinite.

• Actualizare. Permite definirea atributelor nedefinite. Introducerea unui

atribut nou la o noţiune, face ca acesta să fie nedefinit la toate noţiunile anterioare. Regimul actualizare permite definirea acestor atribute la toate noţiunile din baza de date.

• Modificare. Permite ştergerea unei noţiuni, ştergerea unui atribut,

modificarea valorii de adevăr a atributelor existente, introducerea atributelor noi pentru o noţiune.

• Consultare. Permite afişarea unei noţiuni cu toate atributele asociate acesteia

adevărate şi false fiind ignorate cele nedefinite. • Analiză. Opţiunea permite afişarea asocierilor noţiunilor pe baza atributelor

introduse. Cele trei tipuri de asocieri sunt: identitate, asemănare şi diferite. Regimul permite estimarea corectitudinii şi suficienţei atributelor introduse.

• Estimare. Permite aflarea unei noţiuni (din baza de date) pe baza atributelor

acesteia. • Ştergere bază de date. Permite ştergerea bazei de date curente şi crearea unei

baze de date complet goală. Baza de date curentă are denumirea standard:

91

Page 92: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

diag2.dat. Dacă datele din baza de date vor fi utilizate mai târziu atunci este necesar ca, înainte de ştergerea bazei de date, să se copie baza de date curentă într-un fişier cu un alt nume.

Dacă este prima rulare a programului sau se doreşte crearea unei baze de date

noi se alege opţiunea “S – Ştergere bază de date” pentru iniţilalizarea respectiv ştergerea bazei de date. După aceasta se vor introduce datele în baza de date prin selectarea opţiunii “I - Învăţare”. După selectarea acestei opţiuni este afişat pe ecranul monitorului:

92

fapt ce permite introducerea numelui unei noţiuni. Din cauză că numărul de caractere pentru o noţiune este limitat, pe ecran este afişată şi dimensiunea acesteia (cu linie punctată) în aşa fel încât denumirea noţiunii să fie introdusă corect. După introducerea noţiunii vor fi introduse atributele acesteia. Dacă au fost definite atribute anterior (pentru alte noţiuni), atunci se va cere utilizatorului să definească valoarea de adevăr a acestor atribute, pentru noţiunea nou introdusă. Valorile de adevăr pot fi: adevărat – dacă atributul respectiv reprezintă o caracteristică (în general definitorie) pentru noţiunea respectivă, fals – dacă atributul respectiv este o caracteristică a noţiunii respective dar precizează diferenţa (neîndeplinirea unei caracteristici) faţă de alte noţiuni şi nedefinit – dacă atributul în discuţie nu este definitoriu pentru noţiunea respectivă. După definirea atributelor existente în baza de date sau atunci când se introduce prima noţiune se va cere introducerea atributelor noi. Atributele noi vor fi definite aici pentru noţiunea în lucru şi vor fi automat nedefinite pentru celelalte noţiuni din baza de date. Pentru actualizarea valorilor de adevăr a atributelor cu valoarea de adevăr “nedefinit” pentru toate noţiunile din baza de date se utilizează opţiunea “A – Actualizare” după terminarea fazei de învăţare. Revenind la faza de învăţare, introducerea atributelor noi, pentru început se vor introduce atributele care reprezintă afirmaţii legate de noţiunea respectivă. Ecranul afişat este:

=============== INVATARE =============== Introduceti notiunea: |-----------------------| _

Introduceti ce este ADEVARAT pentru notiunea TEST: |-----------------------| _

Urmează introducerea atributelor care reprezintă negaţii legate de noţiunea

respectivă. Ecranul afişat este:

Page 93: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

Introduceti ce este FALS pentru notiunea TEST: |-----------------------| _

Introducerea datelor în faza de învăţare este esenţială pentru buna funcţionare a sistemului expert. Datorită faptului că acest program este demonstrativ, destinat învăţării, numărul maxim al noţiunilor diferite, posibil de introdus în baza de date, este de 100 iar al atributelor de tot 100. Este limpede ca noţiunile introduse trebuie să aibă atribute asemănătoare şi deci rezultate bune se vor obţine dacă se construieşte o bază de date pentru un domeniu al cunoaşterii cât mai îngust. Un alt aspect este reprezentat de alegerea atributelor şi definirea corectă a valorilor de adevăr ale acestora. Din acest motiv mai întâi se va explica modul de stabilire a atributelor şi valorilor de adevăr ale acestora. Atributele unei noţiuni, atât cele care reprezintă o caracteristică adevărată cât şi una falsă trebuie alese astfel încât ele să reprezinte caracteristici de bază ale noţiunii alese. Aceste atribute vor trebui sa permită individualizarea noţiunii respective, prin definirea unor caracteristici proprii numai pentru acea noţiune, faţă de celelalte noţiuni introduse în baza de cunoştinţe, pe de o parte şi, în acelaşi timp să permită asocierea noţiunilor, prin definirea unor atribute care sunt comune unei clase de noţiuni dar care individualizează această clasă de celelalte din baza de noţiuni, pe de altă parte. Pentru clarificarea ideilor vom alcătui o baza de date referitoare la arhitectura calculatoarelor. Prima noţiune introdusă va fi cea de microprocesor. Pentru această notiune se vor introduce atributele cu valoarea de adevar adevărat:

• face calcul aritmetic – atribut specific • face calcul logic – atribut specific • achita intreruperi – atribut specific • executa program – atribut specific • modul master – atribut de departajare • genereaza adrese – atribut de departajare • comunica cu periferice – atribut de departajare • trensfer blocuri date – atribut de departajare • comunica cu interfetele – atribut de departajare • circuit integrat – atribut de departajare • pe placa de baza – atribut de departajare

Primele patru atribute sunt specifice noţiunii “microprocesor” în domeniul

cunoaşterii pentru care se construieşte baza de date. Ele au fost stabilite pe baza următorului raţionament: în mod obişnuit într-un sistem de calcul unitatea centrală (respectiv microprocesorul) este elementul care efectuează calcule aritmetice şi logice, execută programe din memorie şi achită întreruperile. Următoarele atribute care sunt de departajare trebuie sa permită gruparea noţiunilor pe clase. Astfel, clasa modulelor master este cea care poate genera adrese spre deosebire de clasa modulelor slave care nu poate face acest lucru. De asemenea, pentru a departaja componentele interne de cele externe calculatorului s-au introdus atributele: circuit integrat şi pe placa de baza. Pentru

93

Page 94: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

94

a putea face distincţia între interfeţe, periferice şi celelalte elemente s-au mai introdus atributele: transfer blocuri date, comunică cu perifericele şi comunică cu interfeţele. Atributele cu valoarea de adevăr fals pentru noţiunea microprocesor vor fi:

• modul slave – atribut de departajare • dispozitiv programabil – atribut de departajare • genereaza intreruperi – atribut de departajare • transfer rapid date – atribut de departajare • memoreaza programe – atribut de departajare • introducere de date – atribut de departajare • este periferic – atribut de departajare • definit de capacitate – atribut de departajare • dispozitiv extern – atribut de departajare • electro-mecanica – atribut de departajare • consola sistem – atribut de departajare • utilizeaza cod ASCII – atribut de departajare

Se observă că toate atributele din această clasă sunt de departajare. În general

aici sunt mai greu de stabilit atributele specifice din cauză că este mai uşor de spus ce este un obiect decât ce nu este. Dacă aceste atribute sunt suficiente pentru caracterizarea corectă a noţiunii de microprocesor se va vedea mai târziu în faza de analiză şi estimare.

Următoarea noţiune definită va fi cea de memorie. Pentru această noţiune atributele cu valoarea de adevăr adevărat vor fi:

• memoreaza date – atribut specific • memoreaza programe – atribut specific • modul slave – atribut de departajare • circuit integrat – atribut de departajare • pe placa de baza – atribut de departajare • definit de capacitate – atribut de departajare

Pentru această noţiune au fost stabilite numai două atribute specifice ceea ce în

general ar trebui să fie suficient dacă aceste atribute sunt proprii numai noţiunii respective. De asemenea, fiind definite atribute specifice cu valoarea de adevăr adevărat la noţiunea de microprocesor acestea vor avea de regulă valoarea de adevăr fals pentru noţiunea de memorie şi pentru toate noţiunile care vor fi introduse după aceasta. Trebuie notat faptul că nu este o regulă generală ca un atribut specific unei noţiuni să fie obligatoriu fals pentru toate celelalte existând şi situaţii când un atribut specific este adevărat pentru mai multe noţiuni (a nu se confunda cu atributele de departajare care sunt destinate departajării claselor de noţiuni) Atributele cu valoarea de adevăr fals sunt:

• face calcul aritmetic – atribut specific • face calcul logic – atribut specific • achita intreruperi – atribut specific • executa program – atribut specific • genereaza adrese – atribut de departajare • modul master – atribut de departajare

Page 95: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

• comunica cu periferice – atribut de departajare • dispozitiv programabil – atribut de departajare • genereaza intreruperi – atribut de departajare • introducere de date – atribut de departajare • este periferic – atribut de departajare • comunica cu interfetele – atribut de departajare • dispozitiv extern – atribut de departajare • electro-mecanica – atribut de departajare • consola sistem – atribut de departajare

După introducerea celei de-a doua noţiuni se poate observa faptul că nu se poate

stabili uşor o graniţă precisă între atributele de departajare şi cele specifice. După o primă fază de stabilire a acestora, se vor face analize prin compararea tuturor noţiunilor care sunt caracterizate de acelaşi atribut, cu opţiunea “C – consultare” şi clasificarea noţiunilor cu ajutorul opţiunii “D – analiză”.

În tabelul următor sunt prezentate următoarele noţiuni introduse şi valorile de adevăr pentru atributele acestora.

Noţiune Atribut

Interfaţă Modul DMA Tastură Imprimantă

Face calcul aritmetic Fals Fals Fals Fals Face calcul logic Fals Fals Fals Fals Executa program Fals Fals Fals Adevărat Generează adrese Fals Adevărat Fals Fals Achita intreruperi Fals Fals Fals Fals Modul master Fals Adevărat Fals Fals Modul slave Adevărat Fals Nedefinit Nedefinit Memoreaza date Nedefinit Fals Fals Nedefinit Memoreaza programe Fals Fals Fals Adevărat Definit de capacitate Fals Fals Fals Fals Comunică cu periferice Adevărat Nedefinit Fals Fals Dispozitiv programabil Adevărat Adevărat Fals Adevărat Generează întreruperi Adevărat Adevărat Nedefinit Nedefinit Noţiune Atribut

Interfaţă Modul DMA Tastură Imprimantă

Transfer blocuri date Adevărat Adevărat Fals Adevărat Introducere de date Adevărat Adevărat Adevărat Fals Circuit integrat Adevărat Adevărat Fals Fals Pe placa de bază Adevărat Adevărat Fals Fals Transfer rapid date Fals Adevărat Fals Fals Este periferic Fals Fals Adevărat Adevărat Comunica cu interfetele Fals Adevărat Adevărat Adevărat Dispozitiv extern Fals Fals Adevărat Adevărat Electro-mecanica Fals Fals Adevărat Adevărat Consola sistem Fals Fals Adevărat Fals

95

Page 96: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

Utilizează cod ASCII Nedefinit Nedefinit Adevărat Adevărat Din inspectarea acestui tabel se observă că ponderea atributelor nedefinite este

relativ mică ceea ce este un lucru bun din cauză că acest lucru demonstrează că s-au ales, pe cât posibil trăsăturile esenţiale pentru noţiunile respective. Vom comenta în continuare atributele nedefinite. Pentru interfaţă atributul “memorează date” are valoarea de adevăr nedefinit din cauză că marea majoritate a interfeţelor pot memora date în scopul programării lor dar acest lucru nu este esenţial în caracterizarea interfeţei. Din acest motiv, deşi atributul ar putea avea în principiu valoarea adevărat el nu trebuie să fie luat în considerare la evaluarea noţiunii interfaţă. Acelaşi lucru se întâmplă cu atributul “utilizează cod ASCII”. Unele interfeţe cum sunt: interfaţa serială, cea paralelă sau interfaţa cu tastatura utilizează codurile ASCII pe când interfaţa cu monitorul, spre exemplu, nu utilizează aceste coduri. Pentru că nu se poate stabili precis valoarea de adevăr a acestui atribut (care a apărut la caracterizarea noţiunii tastatură) el este aici nedefinit.

Pentru noţiunea modul DMA sunt nedefinite atributele: “comunică cu periferice” şi “utilizează cod ASCII”. Atributul “comunică cu periferice” este adevărat în sensul că modulul DMA poate comunica cu perifericele prin intermediul interfeţelor. Nefiind o caracteristică directă ea a căpătat valoarea de adevăr nedefinit. De asemenea codurile ASCII pot fi utilizate în transferuri DMA dar acestă situaţie reprezintă un caz particular.

Noţiunea tastatură are nedefinite atributele: “modul slave” şi “generează întreruperi” pentru că sunt parţial adevărate. Tastatura este un periferic şi deci nu intră in discuţie această caracterizare dar ea este conectată la interfaţă care este un modul slave. În acelaşi sens, tastatura nu poate genera direct întreruperi dar face acest lucru prin intermediul interfeţei. Această discuţie este valabilă şi pentru noţiunea de imprimantă. În plus, la această noţiune mai apare atributul “memorează date” cu valoarea de adevăr nedefinit. Majoritatea imprimantelor actuale sunt dotate cu memorie ceea ce le face să aibă o viteză de lucru crescută. Această proprietate nu este esenţială pentru domeniul cunoaşterii (arhitectura calculatoarelor) pentru care se construieşte baza de date şi deci acest atribut va avea şi el valoarea de adevăr nedefinit.

După introducerea noţiunilor şi a atributelor acestora, următoarea etapă în definitivarea bazei de cunoştiinţe o reprezintă reevaluarea atributelor cu valoarea de adevăr nedefinit, din cauză că introducerea succesivă a noţiunilor duce la apariţia unor atribute noi care iniţial vor fi definite automat ca având valoarea de adevăr nedefinit pentru toate noţiunile introduse anterior. Se selectează opţiunea “A – actualizare”, programul afişează următorul ecran:

==================== ACTUALIZARE ===================== ================ MARIME NEDEFINITA =================== Pentru: microprocesor este ADEVARAT: memoreaza date ? DA - D NU - N NU SE POATE DEFINI - I Introduceti raspunsul (ENTER - nemodificat): _

96

Page 97: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

care permite (eventual) modificarea valorii de adevăr a atributelor cu valoarea de adevăr nedefinit. Dacă se doresc alte modificări în baza de date cum ar fi: ştergerea unei noţiuni, ştergerea unui atribut, schimbarea valorii de adevăr a atributelor definite ca adevărat sau fals sau introducerea unor atribute noi pentru o noţiune se va utiliza opţiunea “M – modificare”. După definirea atributelor cu valoarea de adevăr nedefinit este bine să se facă o inspectare a bazei de date afişând noţiunile corespunzătoare unui atribut cu ajutorul opţiunii “C – consultare” din care se selectează opţiunea “C – consultare după atribute”. Rezultatele obţinute pot fi spre exemplu următoarele:

==================== CONSULTARE ======================= ===================== Atribute ======================== modul master este valabil pentru: microprocesor modul DMA Apasati Enter pentru continuare

==================== CONSULTARE ======================= ===================== Atribute ======================== modul master NU este valabil pentru: memorie interfata tastatura imprimanta Apasati Enter pentru continuare

Verificarea finală a bazei de cunoştiinţe se va face cu opţiunea “D – analiză”. Dacă asocierile făcute între noţiuni nu sunt corecte atunci se va reveni cu modificări asupra bazei de cunoştiinţe prin:

• reevaluarea atributelor cu valoarea de adevăr nedefinit; • introducerea unor atribute noi.

În final clasificarea noţiunilor poate fi conform figurii următoare.

97

Page 98: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

Identice Asemanatoare Diferite interfata-modul DMA microprocesor-modul DMA microprocesor-memorie memorie-interfata microprocesor-interfata tastatura-imprimanta microprocesor-imprimanta memorie-modul DMA memorie-tastatura memorie-imprimanta interfata-tastatura interfata-imprimanta modul DMA-tastatura modul DMA-imprimanta Apasati ENTER _

Această clasificare poate fi considerată mulţumitoare deoarece deşi o interfaţă nu este identică cu un modul DMA totuşi ele au multe trăsături comune. Astfel, şi interfaţa şi modulul DMA vehiculează date, lucrează cu interfeţele, lansează întreruperi etc. Asemănările sunt corecte deoarece microprocesorul şi modulul DMA sunt module master, memoria şi interfaţa sunt module slave iar tastatura şi imprimanta sunt dispozitive periferice. Diferenţele sunt evidente şi corecte.

În concluzie putem spune că după stabilirea unui prim conţinut al bazei de cunoştiinţe este necesară prelucrarea acesteia în scopul determinării dacă atributele noţiunilor au fost corect folosite şi programul poate face distincţia între corectă între noţiuni. Pentru aceasta se vor folosi succesiv opţiunile “C – Consultare”, “M – modificare” şi “D – analiză”. Activitatea de realizare a bazei de cunoştiinţe testarea şi corectarea acesteia este realizată în general de un expert în domeniul cunoaşterii pentru care se construieşte sistemul expert asistat (eventual) de un informatician.

După punerea la punct a bazei de cunoştiinţe reprezentată de baza de date sistemul expert este pregătit pentru utilizare. Utilizarea se referă la evaluarea anumitor noţiuni în general necunoscute (diagnosticarea unor cunoştiinţe) şi introducerea noţiunilor noi care după evaluare reprezintă cunoştiinţe valide pentru sistemul expert. Evaluarea unei cunoştiinţe se va face cu opţiunea “E – estimare” din meniul principal. Utilizarea acestei opţiuni se face atât pentru noţiuni existente în baza de date cât şi pentru noţiuni noi. Vom considera mai întâi că utilizatorul are un dispozitiv periferic la care cunoaşte anumite caracteristici şi consultă sistemul expert pentru aflarea numelui acestuia. Presupunem cazul ipotetic când acest dispozitiv este o imprimantă dar utilizatorul nu ştie acest lucru. Evident că acest exemplu este pur teoretic şi prin simplitatea lui permite înţelegerea utilizării sistemului expert. Se selectează opţiunea “E – estimare” din meniul principal care afişează:

98

Page 99: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

Introduceti valorile de adevar pentru atributele notiunii de estimat.Atributul: face calcul aritmetic Introduceti valoarea de adevar: D - pentru ADEVARAT N - pentru FALS I - pentru NEDEFINIT ENTER pentru a-l lasa nedefinit _

în continuare este prezentată lista atributelor pentru care se solicită stabilirea unei valori de adevăr şi un exemplu de valori de adevăr stabilite. Trebuie observat faptul că utilizatorul nu a stabilit corect toate valorile de adevăr (prin comparare cu cele stabilita la crearea bazei de cunoştiinţe prezentate în tabelul de mai sus) iar pentru caracteristicile la care nu a ştiut să răspundă a ales valoarea de adevăr nedefinit.

Lista atributelor şi a valorilor de adevăr este:

• Face calcul aritmetic – fals • Face calcul logic – fals • Generează adrese – fals • Modul master – fals • Achită întreruperi – fals • Modul slave – adevărat • Memorează date – adevărat • Execută program – adevărat • Comunică cu periferic – fals • Dispozitiv programabil – adevărat • Generează întreruperi – adevărat • Transfer rapid de date – adevărat • Transfer blocuri date – nedefinit • Memorează programe – adevărat • Introduce date – fals • Este periferic – adevărat • Comunică cu interfeţele– adevărat • Circuit integrat – nedefinit • Pe placa de bază – fals • Definit de capacitate – nedefinit • Dispozitiv extern – adevărat • Electro-mecanică – adevărat • Consolă sistem – adevărat • Utilizează cod ASCII – adevărat

Este evident faptul că în stabilirea valorilor de adevăr este de preferat în primul

rând ca valorile de adevăr nedefinit să fie în număr cât mai mic. În al doilea rând între o valoare de adevăr greşit stabilită (cu valoarea de adevărat sau fals) şi una cu valoarea de adevăr nedefinit este de preferat cea din urmă. După introducerea valorilor de adevăr vor fi afişate următoarele informaţii:

99

Page 100: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

Este: imprimanta 88.89 %Este: tastatura 68.42 % Este: memorie 52.63 % Este: interfata 42.11 % Este: modul DMA 33.33 % Este: microprocesor 15.00 % Apasati ENTER _

care arată că noţiunea cu cea mai mare probabilitate (88,89%), care are trăsăturile specificate de utilizator, este cea de imprimantă, ceea ce este corect. Sunt afişate toate noţiunile din baza de cunoştiinţe cu probabilitatea asociată în aşa fel încât utilizatorul să poată alege noţiunea ce răspunde cel mai bine situaţiei date (în cazul probabilităţilor apropiate). Vom considera acum că se evaluează o noţiune care nu există în baza de cunoţtiinţe, cea de monitor. Valorile de adevăr stabilite pentru această noţiune vor fi:

• Face calcul aritmetic – fals • Face calcul logic – fals • Generează adrese – fals • Modul master – fals • Achită întreruperi – fals • Modul slave – nedefinit • Memorează date – fals • Execută program – fals • Comunică cu periferice – fals • Dispozitiv programabil – fals • Generează întreruperi – fals • Transfer rapid de date – nedefinit • Transfer blocuri date – fals • Memorează programe – fals • Introduce date – fals • Este periferic – adevărat • Comunică cu interfeţele – adevărat • Circuit integrat – fals • Pe placa de bază – fals • Definit de capacitate – fals • Dispozitiv extern – adevărat • Electro-mecanică – fals • Consolă sistem – adevărat • Utilizează cod ASCII – fals

De la început se observă că sunt puţine valori de adevăr adevărat ceea ce va

impune introducerea unor atribute noi. Rezultatul afişat de program va fi:

100

Page 101: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

Acest rezultat arată că noţiunea estimată este un periferic (tastatura şi imprimanta au scorurile cele mai mari) dar evident este greşit evaluat pentru că tastatura este un dispozitiv periferic de intrare iar monitorul un dispozitiv periferic de ieşire. Vor trebui introduse atribute suplimentare care să asigure diferenţierea între noţiunea de tastatură şi cea de monitor. La solicitarea programului de a introduce noţiunea vom răspunde afirmativ şi se va introduce noţiunea de monitor deocamdată fără atribute suplimentare. După aceasta selectăm opţiunea “D – analiză” din meniul principal. Rezultatul afişat va fi:

Este: tastatura 85.71 %Este: imprimanta 65.00 % Este: memorie 55.00 % Este: modul DMA 45.45 % Este: interfata 45.00 % Este: microprocesor 38.10 %Apasati ENTER _

Identice Asemanatoare Diferite interfata-modul DMA microprocesor-modul DMA microprocesor-memorie tastatura-monitor memorie-interfata microprocesor-interfata tastatura-imprimanda microprocesor-imprimanda imprimanda-monitor microprocesor-monitor memorie-modul DMA memorie-tastatura memorie-imprimanda memorie-monitor interfata-tastatura interfata-imprimanda interfata-monitor modul DMA-tastatura modul DMA-imprimanda modul DMA-monitor

Rezultat evident inacceptabil pentru că s-ar fi putut admite eventual o identitate (in sens larg) între imprimantă şi monitor dar în nici un caz între monitor şi tastatură. Acest lucru indică faptul că trebuie introduse atribute care să diferenţieze în primul rând noţiunea de tastatură de cea de monitor. Pentru aceasta selectăm meniul “M – modificare” şi din acesta introducere atribute noi. Vor fi introduse suplimentar următoarele atribute pentru noţiunea monitor:

• Reprezentare grafică - adevărat • Reprezentare text - adevărat • Reprezentare color - adevărat • Principiu tub catodic - adevărat

101

Page 102: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

După aceasta se selectează din meniul principal opţiunea “A – actualizare” şi se actualizează valoarea de adevăr a acestor atribute astfel:

- pentru noţiunile de microprocesor, memorie, interfaţă, modul DMA şi

tastatură atributele noi au valoarea de adevăr: fals. - pentru noţiunea de imprimantă, atributele: “reprezentare grafică”,

“reprezentare text” şi “reprezentare color” au valoarea de adevăr: adevărat iar atributul “principiu tub catodic” are valoarea de adevăr: fals.

În sfârşit, din meniul principal se selectează opţiunea “D – analiză” care afişează

următoarele informaţii:

Identice Asemanatoare Diferite interfata-modul DMA microprocesor-modul DMA microprocesor-memorie memorie-interfata microprocesor-interfata tastatura-imprimanta microprocesor-tastatura tastatura-monitor microprocesor-imprimanta imprimanta-monitor microprocesor-monitor memorie-modul DMA memorie-tastatura memorie-imprimanta memorie-monitor interfata-tastatura interfata-imprimanta interfata-monitor modul DMA-tastatura modul DMA-imprimanta modul DMA-monitor Apasati ENTER

Rezultat considerat mulţumitor şi deci sistemul expert este pregătit pentru o nouă estimare.

Maşina de inferenţă utilizată aici este cât se poate de simplă şi ea se bazează pe compararea propoziţiilor formate cu o noţiune şi grupurile de atribute asociate acesteia. Propoziţiile (afirmaţiile sau negaţiile) adevărate sau false cu excepţia celor nedefinite sunt evaluate cu regula de inferenţă modus ponens: din A şi (A→B) rezultă B. Pentru stabilirea asocierilor între noţiuni se foloseşte un principiu statistic simplu şi oarecum arbitrar care stabileşte asocierea pe baza numărului de propoziţii adevărate comune celor două noţiuni comparate. În procedura “Analiza” din programul “Diag2.pas” se poate vedea modul de implementare celor prezentate mai sus. -------------------------------- Sursa programului Diagnostic ------------------------------------ Program Diagnostic; { Programul Diagnostic este un program demonstrativ pentru sisteme expert. Acest program are mai multe regimuri:

102

Page 103: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

103

Invatare - care permite introducerea notiunilor si a atributelor acestora in baza de date. Atributele trebuie sa raspunda la intrebarile: Ce este notiunea la care se refera? Ce caracterizeaza notiunea? Care sunt proprietatile notiunii? etc. si Ce NU este notiunea la care se refera? Ce NU caracterizeaza notiunea? Care NU sunt proprietatile notiunii? etc. In acest fel in baza de date se vor forma trei categorii de propozitii: adevarate, false si nedefinite. Actualizare – care permite definirea atributelor nedefinite. Introducerea unui atribut nou la o notiune face ca acesta sa fie nedefinit la toate notiunile anterioare. Regimul actualizare permite defineirea acestor atribute la toate notiunile din baza de date. Modificare – care permite stergerea unei notiuni, stergerea unui atribut, modificarea valorii de adevar a atributelor existente, introducerea atributelor noi pentru o notiune. Consultare – care permite afisarea unei notiuni cu toate atributele asociate acesteia adevarate si false fiind ignorate cele nedefinite. Analiza – in care sunt prezentate asocierile notiunilor pe baza atributelor introduse. Cele trei tipuri de asocieri sunt: identitate, asemanare si diferite. Regimul permite estimarea corectitudinii si suficientei atributelor introduse. Estimare – care permite aflarea unei notiuni (din baza de date) pe baza atributelor acesteia. Stergere baza de date – in care baza de date este stearsa si se creaza una noua complet goala. } uses Crt; const { Numarul maxim de notiuni sau atribute ce pot fi introduse in baza de date. Se pot introduce DimensiuneMaximaBazaDeDate notiuni si DimensiuneMaximaBazaDeDate atribute. } DimensiuneMaximaBazaDeDate=100; { Dimensiunea maxima a numelui unei notiuni sau a unui articol. } DimensiuneArticol=25; type { Descrierea bazei de date a sistemului expert. }

Page 104: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

104

BazaDeDate_t = record { Baza de date cu notiuni. } notiuni:array[1..DimensiuneMaximaBazaDeDate] of string[DimensiuneArticol]; { Baza de date cu atributele notiunilor. } atribute:array[1..DimensiuneMaximaBazaDeDate] of string[DimensiuneArticol]; { Legaturile dintre notiuni si atribute. Se foloseste 0 pentru FALS, 1 pentru ADEVARAT, 2 pentru NEDEFINIT pentru notiunea respectiva. } legatura:array[1..DimensiuneMaximaBazaDeDate, 1..DimensiuneMaximaBazaDeDate] of byte; ContorNotiuni:byte; ContorAtribute:byte; end; var { Baza de date a sistemului expert. } BazaDeDate:BazaDeDate_t; { Fisierul in care se salveaza baza de date. } FisierBazaDeDate:file of BazaDeDate_t; { Optiunile introduse in program. } optiune:char; { Numarul notiunii in lucru. } NrNotiuneInLucru:byte; procedure StergeEcran; { Procedura sterge ecranul intr-o maniera care sa nu impiedice functionarea sub procesoarele noi. } var contor1:byte; begin for contor1:=1 to 24 do

Page 105: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

105

writeln; gotoxy(1,1); end; procedure Dimensiune; { Procedura afiseaza grafic pe ecran dimensiunea maxima a sirului care poate fi introdus pentru a permite incadrarea in dimensiunea impusa de DimensiuneArticol. } var contor1:byte; begin write('|'); for contor1:=1 to DimensiuneArticol-2 do write('-'); writeln('|'); end; procedure CitescOptiune; { Procedura citeste optiunea si intoarce majuscula caracterului apasat. } begin readln(optiune); optiune:=upcase(optiune); end; procedure CitescBazaDeDate; { Citire baza de date din fisier in memorie. } begin assign(FisierBazaDeDate,'diag2.dat'); reset(FisierBazaDeDate); read(FisierBazaDeDate,BazaDeDate); close(FisierBazaDeDate); end; procedure ScriuBazaDeDate; { Scriere baza de date din memorie in fisier. } begin assign(FisierBazaDeDate,'diag2.dat'); rewrite(FisierBazaDeDate); write(FisierBazaDeDate,BazaDeDate); close(FisierBazaDeDate); end;

Page 106: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

106

procedure IntroducereAtributeNoi; { Procedura permite introducerea atributelor noi pentru o notiune. } var { Atributul introdus la un moment dat. } atribut:string[DimensiuneArticol]; { Semnaleaza ca atributul care s-a introdus exista deja in baza de date. } ExistaAtribut:boolean; contor1:byte; begin {Introducere atribut nou} with BazaDeDate do begin atribut:=''; write('Introduceti afirmatii? D/N: '); CitescOptiune; if optiune='D' then repeat StergeEcran; ExistaAtribut:=false; writeln('Introduceti ce este ADEVARAT pentru ',

notiuni[NrNotiuneInLucru],':'); Dimensiune; readln(atribut); if atribut<>'' then begin {Verificare existenta atribut} for contor1:=1 to ContorAtribute-1 do if atribute[contor1]=atribut then ExistaAtribut:=true; if ExistaAtribut then writeln('Atributul exista!') else begin atribute[ContorAtribute]:=atribut; legatura[NrNotiuneInLucru,ContorAtribute]:=1; inc(ContorAtribute); end; end; write('Mai introduceti afirmatii? D/N: '); CitescOptiune; until optiune<>'D'; write('Introduceti negatii? D/N: ');

Page 107: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

107

CitescOptiune; if optiune='D' then repeat StergeEcran; ExistaAtribut:=false; writeln('Introduceti ce este FALS pentru '

,notiuni[NrNotiuneInLucru],':'); Dimensiune; readln(atribut); if atribut<>'' then begin {Verificare existenta atribut} for contor1:=1 to ContorAtribute-1 do

if atribute[contor1]=atribut then ExistaAtribut:=true; if ExistaAtribut then writeln('Atributul exista!') else begin atribute[ContorAtribute]:=atribut; legatura[NrNotiuneInLucru,ContorAtribute]:=0; inc(ContorAtribute); end; end; write('Mai introduceti negatii? D/N: '); CitescOptiune; until optiune<>'D'; end; end; procedure Invatare; { Procedura de completare a bazei de date cu notiuni noi. } var contor1:byte; { Notiunea introdusa la un moment dat. } notiune:string[DimensiuneArticol]; { Semnaleaza faptul ca notiunea introdusa se gaseste deja in baza de date. } ExistaNotiune:boolean; begin CitescBazaDeDate; {Introducerea datelor in baza de date} StergeEcran; writeln('================================= INVATARE

Page 108: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

108

===============================') writeln; writeln; repeat ExistaNotiune:=false; notiune:=''; writeln('Introduceti notiunea: '); Dimensiune; readln(notiune); if notiune<>'' then begin {Verificare existenta notiune.} for contor1:=1 to BazaDeDate.ContorNotiuni-1 do if BazaDeDAte.notiuni[contor1] = notiune then

ExistaNotiune:=true; if ExistaNotiune then writeln('Notiunea: ',notiune,' a fost introdusa!') else begin with BazaDeDate do begin {Notiune noua - introducere atribute}

NrNotiuneInLucru:=ContorNotiuni; {Completare atribute vechi.} for contor1:=1 to ContorAtribute-1 do begin writeln('Pentru: ',notiune,' este ADEVARAT:

',atribute[contor1],' ?'); writeln('DA - D');

writeln('NU - N'); writeln('NU SE POATE DEFINI - I'); write('Introduceti raspunsul: ');

CitescOptiune; if optiune='N' then

legatura[ContorNotiuni,contor1]:=0; if optiune='D' then legatura[ContorNotiuni,contor1]:=1;

if optiune='I' then legatura[ContorNotiuni,contor1]:=2

end; write('Introduceti atribute noi? D/N: '); CitescOptiune; if optiune='D' then IntroducereAtributeNoi;

end; end; end; write('Introduceti o noua notiune? D/N: ');

Page 109: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

109

CitescOptiune; BazaDeDate.notiuni[BazaDeDate.ContorNotiuni]:=notiune; inc(BazaDeDate.ContorNotiuni); until optiune<>'D'; ScriuBazaDeDate; end; procedure Consultare; { Procedura de consultare a bazei de date. Permite afisarea unei notiuni cu toate atributele asociate acesteia adevarate si false fiind ignorate cele nedefinite. } var NumarNotiune, NumarAtribut, contor1:byte; begin CitescBazaDeDate; NumarNotiune:=0; NumarAtribut:=0; repeat StergeEcran; writeln('================================= CONSULTARE

==============================='); writeln('Introduceti:');

writeln('N - consultare dupa notiuni'); writeln('A - consultare dupa atribute'); writeln('P - abandon'); CitescOptiune; with BazaDeDate do begin case optiune of 'N': {Consultare dupa notiuni.} begin StergeEcran; writeln('================================= CONSULTARE

==============================='); writeln('================================== Notiuni

================================'); for contor1:=1 to ContorNotiuni-1 do begin writeln(contor1,'. ',notiuni[contor1]); if contor1 mod 20 = 0 then begin writeln; write('Apasati ENTER pentru continuare'); readln; StergeEcran; writeln('=================================

Page 110: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

110

CONSULTARE ==============================='); writeln('==================================

Notiuni ================================'); end;

end; writeln; write('Apasati ENTER pentru continuare');

readln; StergeEcran; writeln('================================= CONSULTARE

==============================='); writeln('================================== Notiuni

================================'); writeln; write('Introduceti numarul notiunii

(0 - abandon): '); readln(NumarNotiune); if NumarNotiune<>0 then begin StergeEcran; writeln('=================================

CONSULTARE ==============================='); writeln('================================== Notiuni ================================'); writeln; writeln('Pentru ',notiuni[NumarNotiune],

' este ADEVARAT:'); writeln;

for contor1:=1 to ContorAtribute-1 do if legatura[NumarNotiune,contor1]=1 then

writeln(atribute[contor1]); writeln; writeln('Apasati Enter pentru continuare'); readln; StergeEcran; writeln('=================================

CONSULTARE ==============================='); writeln('==================================

Notiuni ================================'); writeln; writeln('Pentru ',notiuni[NumarNotiune],

' NU este ADEVARAT:'); writeln;

for contor1:=1 to ContorAtribute-1 do if legatura[NumarNotiune,contor1]=0 then

writeln(atribute[contor1]); writeln; writeln('Apasati Enter pentru continuare');

readln;

Page 111: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

111

end; end; 'A':

{Consultare dupa atribute.} begin StergeEcran; writeln('================================= CONSULTARE

==============================='); writeln('================================== Atribute

==============================='); for contor1:=1 to ContorAtribute-1 do

begin writeln(contor1,'. ',atribute[contor1]);

if contor1 mod 20 = 0 then begin writeln; write('Apasati ENTER pentru continuare'); readln; StergeEcran; writeln('=================================

CONSULTARE ==============================='); writeln('================================== Atribute ================================');

end; end; writeln; write('Apasati ENTER pentru continuare'); readln; StergeEcran; writeln('================================= CONSULTARE

==============================='); writeln('================================== Atribute

================================'); writeln; write('Introduceti numarul atributului

(0 - abandon): '); readln(NumarAtribut); if NumarAtribut<>0 then begin StergeEcran; writeln('=================================

CONSULTARE ==============================='); writeln('==================================

Atribute ================================'); writeln; writeln(atribute[NumarAtribut],

' este valabil pentru:');

Page 112: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

112

writeln; for contor1:=1 to ContorNotiuni-1 do

if legatura[contor1,NumarAtribut]=1 then writeln(notiuni[contor1]); writeln; writeln('Apasati Enter pentru continuare'); readln;

StergeEcran; writeln('=================================

CONSULTARE ==============================='); writeln('==================================

Atribute ================================'); writeln; writeln(atribute[NumarAtribut],

' NU este valabil pentru:'); writeln;

for contor1:=1 to ContorNotiuni-1 do if legatura[contor1,NumarAtribut]=0 then

writeln(notiuni[contor1]); writeln; writeln('Apasati Enter pentru continuare'); readln; end;

end; end;

end; until optiune='P'; end; procedure StergereBazaDeDate; { Procedura creaza o baza de date goala pe disc. } begin with BazaDeDate do begin for ContorNotiuni:=1 to DimensiuneMaximaBazaDeDate do for ContorAtribute:=1 to DimensiuneMaximaBazaDeDate do begin notiuni[ContorNotiuni]:=''; atribute[ContorAtribute]:=''; legatura[ContorNotiuni,ContorAtribute]:=2; end; ContorNotiuni:=1; ContorAtribute:=1; end; ScriuBazaDeDate; end;

Page 113: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

113

procedure Actualizare; { Procedura permite actualizarea atributelor introduse mai tarziu pentru notiunile introduse mai devreme. Este posibil sa se defineasca valoarea de adevarat sau fals sau sa se lase nedefinita. } var contor1,contor2:byte; begin CitescBazaDeDate; with BazaDeDate do begin for contor2:=1 to ContorNotiuni-1 do for contor1:=1 to ContorAtribute-1 do begin if legatura[contor2,contor1]=2 then begin StergeEcran; writeln('================================= ACTUALIZARE

==============================='); writeln('============================= MARIME

NEDEFINITA ==============================='); writeln;

writeln('Pentru: ',notiuni[contor2], ' este ADEVARAT: ',atribute[contor1],' ?');

writeln('DA - D'); writeln('NU - N'); writeln('NU SE POATE DEFINI - I'); write('Introduceti raspunsul

(ENTER - nemodificat): '); CitescOptiune;

if optiune='N' then legatura[contor2,contor1]:=0; if optiune='D' then legatura[contor2,contor1]:=1; if optiune='I' then legatura[contor2,contor1]:=2 end; end; end; ScriuBazaDeDate; end; procedure Analiza; { Procedura analizeaza asemanarile pe baza atributelor si produce o statistica a notiunilor. In cazul in care la una din notiuni nu este definit atributul nu se face comparatia. } const {

Page 114: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

114

Pozitia initiala pe axa y a listei afisate. } PozitieInitiala=3; { Pozitia finala pe axa y a listei afisate. Depasirea acestei pozitii duce la afisarea unui ecran nou dupa apasarea tastei ENTER. } PozitieFinala=20; var { Numarul de comparari efectuate pentru o notiune cu alta notiune. } Comparari:byte; { Numarul de asemanari gasite pentru doua notiuni comparate. } Asemanari:byte; contor1,contor2,contor3:byte; { Cele trei pozitii curente pe axa y corespunzatoare celor trei liste afisate: Identitate, Asemanare si Diferit. } pozitie1,pozitie2,pozitie3:byte; begin Comparari:=0; Asemanari:=0; CitescBazaDeDate; pozitie1:=PozitieInitiala; pozitie2:=PozitieInitiala; pozitie3:=PozitieInitiala; StergeEcran; gotoxy(1,1); write('Identice'); gotoxy(DimensiuneArticol+2,1); write('Asemanatoare'); gotoxy(2*DimensiuneArticol+4,1); write('Diferite'); {Incepe compararea notiunilor doua cate doua} with BazaDeDate do begin for contor1:=1 to ContorNotiuni-2 do begin for contor2:=contor1+1 to ContorNotiuni-1 do begin Comparari:=0; Asemanari:=0; for contor3:=1 to ContorAtribute-1 do begin

Page 115: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

115

if (legatura[contor1,contor3]<>2) and (legatura[contor2,contor3]<>2) then

begin if legatura[contor1,contor3]=

legatura[contor2,contor3] then inc(Asemanari); inc(Comparari); end;

end; {Criteriul pentru notiuni identice}

if Asemanari >= (Comparari * 4 div 5) then begin gotoxy(1,pozitie1); write(notiuni[contor1],'-',notiuni[contor2]); inc(pozitie1); {S-a depasit un ecran de afisare} if pozitie1>PozitieFinala then begin pozitie1:=PozitieInitiala; writeln('Apasati ENTER.'); readln; StergeEcran; end; end else begin {Criteriul pentru notiuni asemanatoare} if (Asemanari < (Comparari * 4 div 5)) and

(Asemanari >= (Comparari * 2 div 3))then begin

gotoxy(DimensiuneArticol+2,pozitie2); write(notiuni[contor1],

'-',notiuni[contor2]); inc(pozitie2);

{S-a depasit un ecran de afisare} if pozitie2>PozitieFinala then begin pozitie2:=PozitieInitiala; writeln('Apasati ENTER.'); readln; StergeEcran; end; end else {Criteriul pentru notiuni diferite} if (Asemanari < (Comparari * 2 div 3)) and

(Asemanari >= (Comparari div 3)) then begin

gotoxy(2*DimensiuneArticol+4,pozitie3);

Page 116: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

116

write(notiuni[contor1], '-',notiuni[contor2]);

inc(pozitie3); {S-a depasit un ecran de afisare}

if pozitie3>PozitieFinala then begin pozitie3:=PozitieInitiala; writeln('Apasati ENTER.'); readln; StergeEcran; end; end; end; end; end; gotoxy(1,23); writeln('Apasati ENTER'); readln; end; end; procedure AfisareNotiuni; { Procedura permite afisarea tuturor notiunilor din baza de date. } var contor1:byte; begin with BazaDeDate do begin for contor1:=1 to ContorNotiuni-1 do begin writeln(contor1,'. ',notiuni[contor1]); if contor1 mod 20 = 0 then begin writeln; write('Apasati ENTER pentru continuare'); readln; StergeEcran; end; end; end; writeln; write('Apasati ENTER pentru continuare'); readln; StergeEcran; end;

Page 117: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

117

procedure AfisareAtribute; { Procedura afiseaza toate atributele din baza de date. } var contor1:byte; begin with BazaDeDate do begin StergeEcran; for contor1:=1 to ContorAtribute-1 do begin writeln(contor1,'. ',atribute[contor1]); if contor1 mod 20 = 0 then begin writeln; write('Apasati ENTER pentru continuare'); readln; StergeEcran; end; end; writeln; write('Apasati ENTER pentru continuare'); readln; StergeEcran; end; end; procedure Modificare; { Procedura permite stergerea notiunilor si a atributelor, de asemenea permite modificarea valorilor de adevar a atributelor unei notiuni la alegere sau introducerea atributelor noi. } var { Numarul notiunii in lucru. } NumarNotiune:byte; contor1,contor2:byte; begin CitescBazaDeDate; NumarNotiune:=0; with BazaDeDate do begin StergeEcran; write('Stergeti notiune? D/N: '); CitescOptiune;

Page 118: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

118

if optiune='D' then begin AfisareNotiuni; write('Introduceti numarul notiunii (0 - abandon): '); readln(NumarNotiune); if NumarNotiune<>0 then begin for contor1:=NumarNotiune to ContorNotiuni-1 do begin notiuni[contor1]:=notiuni[contor1+1]; legatura[contor1]:=legatura[contor1+1]; end; ContorNotiuni:=ContorNotiuni-1; end; end; StergeEcran; write('Stergeti atribute? D/N: '); CitescOptiune; if optiune='D' then begin AfisareAtribute; write('Introduceti numarul atributului (0 - abandon): '); readln(NumarNotiune); if NumarNotiune<>0 then begin for contor1:=NumarNotiune to ContorAtribute-1 do atribute[contor1]:=atribute[contor1+1]; for contor2:=1 to ContorNotiuni-1 do for contor1:=NumarNotiune to ContorAtribute-1 do

legatura[contor2,contor1]:=legatura[contor2,contor1+1]; ContorAtribute:=ContorAtribute-1; end;

end; StergeEcran; write('Modificati caracteristica atribut? D/N: '); CitescOptiune; if optiune='D' then begin AfisareNotiuni; write('Introduceti numarul notiunii (0 - abandon): '); readln(NumarNotiune); if NumarNotiune<>0 then begin StergeEcran; writeln('Modificare atributele notiunii: ',

notiuni[NumarNotiune],' :'); for contor1:=1 to ContorAtribute-1 do

begin

Page 119: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

119

write('Atributul: ',atribute[contor1],' este: '); if legatura[NumarNotiune,contor1]=0 then

writeln('FALS'); if legatura[NumarNotiune,contor1]=1 then

writeln('ADEVARAT'); if legatura[NumarNotiune,contor1]=2 then

writeln('NEDEFINIT'); writeln('Introduceti noua valoare de adevar: ');

writeln('D - pentru ADEVARAT'); writeln('N - pentru FALS'); writeln('I - pentru NEDEFINIT'); writeln('ENTER pentru a-l lasa neschimbat'); CitescOptiune; if optiune='N' then

legatura[NumarNotiune,contor1]:=0; if optiune='D' then

legatura[NumarNotiune,contor1]:=1; if optiune='I' then

legatura[NumarNotiune,contor1]:=2; end; end; end; StergeEcran; write('Introduceti atribute noi? D/N: '); CitescOptiune; if optiune='D' then begin AfisareNotiuni; write('Introduceti numarul notiunii (0 - abandon): '); readln(NumarNotiune); if NumarNotiune<>0 then begin StergeEcran; NrNotiuneInLucru:=NumarNotiune; IntroducereAtributeNoi; end; end; end; ScriuBazaDeDate; end; procedure Estimare; { Procedura estimeaza o notiune noua (necunoscuta) pe baza atributelor existente in baza de date. La sfarsit daca este o notiune noua ea poate fi introdusa in baza de date cu valorile de adevar pentru atributele existente. Daca se doreste introducerea atributelor noi atunci se apeleaza meniul Modificare. }

Page 120: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

120

var { Modelul valorilor atributelor notiunii de estimat. } model:array[1..DimensiuneMaximaBazaDeDate] of byte; { Contorizeaza numarul de potriviri dintre notiunea de estimat si cele existente in baza de date. } NumarPotriviri:array[1..DimensiuneMaximaBazaDeDate] of byte; { Contorizeaza numarul de comparari (exceptand atributele nedefinite) efectuate intre notiunea de estimat si o notiune din baza de date. } NumarComparari:array[1..DimensiuneMaximaBazaDeDate] of byte; contor1,contor2:byte; {Numarul maxim de potriviri intre notiunea de estimat si una dintre notiunile din baza de date la un moment dat. } Maxim:byte; { Pozitia unei notiuni cu care se lucreaza la un moment dat in baza de date. } Pozitie:byte; { Numele notiunii noi } Notiune:string[DimensiuneArticol]; begin CitescBazaDeDate; for contor1:=1 to DimensiuneMaximaBazaDeDate do begin model[contor1]:=2; NumarPotriviri[contor1]:=0; end; Notiune:=''; StergeEcran; with BazaDeDate do begin writeln('Introduceti valorile de adevar pentru atributele

notiunii de estimat.'); for contor1:=1 to ContorAtribute-1 do begin writeln('Atributul: ',atribute[contor1]); writeln('Introduceti valoarea de adevar: '); writeln('D - pentru ADEVARAT'); writeln('N - pentru FALS'); writeln('I - pentru NEDEFINIT');

Page 121: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

121

writeln('ENTER pentru a-l lasa nedefinit'); CitescOptiune; if optiune='N' then model[contor1]:=0; if optiune='D' then model[contor1]:=1; if optiune='I' then model[contor1]:=2; end; for contor1:=1 to DimensiuneMaximaBazaDeDate do NumarComparari[contor1]:=0; for contor1:=1 to ContorNotiuni-1 do for contor2:=1 to ContorAtribute-1 do if (legatura[contor1,contor2]<>2) and (model[contor2]<>2) then begin if legatura[contor1,contor2]=model[contor2] then

inc(NumarPotriviri[contor1]); inc(NumarComparari[contor1]); end; { Afisare rezultat. } StergeEcran; for contor2:=1 to ContorNotiuni-1 do begin Maxim:=0; Pozitie:=0; for contor1:=1 to ContorNotiuni-1 do if NumarPotriviri[contor1]>Maxim then begin Maxim:=NumarPotriviri[contor1]; Pozitie:=contor1; end; if Pozitie<>0 then begin writeln('Este: ',notiuni[Pozitie],' ',

Maxim/NumarComparari[Pozitie]*100:2:2,' %'); NumarPotriviri[Pozitie]:=0; end; end; writeln('Apasati ENTER'); readln; write('Introduceti noua notiune? D/N: '); CitescOptiune; if optiune='D' then begin write('Introduceti notiunea: '); readln(Notiune); if Notiune<>'' then begin notiuni[ContorNotiuni]:=Notiune;

Page 122: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

122

for contor1:=1 to ContorAtribute-1 do legatura[ContorNotiuni,contor1]:=Model[contor1]; inc(ContorNotiuni); end; ScriuBazaDeDate; end; end; end; { Program principal. Optiunile sunt: Invatare - in acest regim se pot introduce notiuni noi. Pentru atributele existente se cer valori de adevar (ADEVARAT, FALS, NEDEFINIT) dupa care se permite introducerea unor atribute noi. Actualizare - pentru toate notiunile se reiau atributele

nedefinite si se cere precizarea acestora. Acest lucru deoarece la introducerea unei notiuni pot aparea atribute noi

care nu au fost definiti la notiunile anterioare. Modificare - Permite modificarea valorii de adevar a tuturor

atributelor de la o notiune. Dupa aceea se pot introduce

atribute noi. Consultare - Se pot afisa atributele unei notiuni sau notiunile

unui atribut. Analiza - Permite aflarea notiunilor identice, asemanatoare

sau diferite. Stergere baza de date - Baza de date este initializata } begin repeat StergeEcran; writeln('Introduceti:'); writeln('I -> invatare'); writeln('A -> actualizare'); writeln('M -> modificare'); writeln('C -> consultare'); writeln('D -> analiza'); writeln('E -> estimare'); writeln('S -> stergere baza de date'); writeln('Q -> parasire program'); writeln; write('Introduceti optiunea: ');

Page 123: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

123

CitescOptiune; case optiune of 'I': Invatare; 'A': Actualizare; 'M': Modificare; 'C': Consultare; 'D': Analiza; 'E': Estimare; 'S': StergereBazaDeDate; end; until optiune='Q'; end. În lucrarea de laborator studenţii vor efectua următoarele activităţi:

1. Se vor familiariza cu modul de funcţionare al programului Diagnostic însuşindu-şi meniul acestuia, modul de acţiune al fiecărei comenzi şi opţiunile de lucru.

2. Vor lucra pe o bază de date deja definită (Arhitectura calculatoarelor), condorm celor arătate în exemplul prezentat, vor verifica modul de evaluare a noţiunilor deja definite şi vor introduce noţiuni noi.

3. Vor crea o bază de date nouă, într-un domeniu ales şi în final vor verifica baza de date pentru noţiunile deja introduse şi pentru noţiuni noi.

Lucrările de laborator vor conţine meniul programului Diagnostic cu

explicaţii privind modul de funcţionare a acestora, modul în care a fost verificată o noţiune existentă şi una nou introdusă conform exemplului arătat în această lucrare de laborator. La baza de date nou creată se va pune în referatul de laborator tabelul afişat de comanda “D – analiză” din meniul principal. Laborator 7, 8, 9.

Perceptronul Perceptronul cu un singur strat este cea mai simplă reţea neurală. Modelul

perceptronului este sâmburele din care s-au dezvoltat toate celelalte reţele neurale. Instruirea perceptronului se face cu ajutorul unui algoritm simplu şi eficient reprezentativ pentru o clasă largă de algoritmi de instruire. Programul PERCEPT1.PAS realizează modelarea perceptronului cu un singur strat cu n intrări. Pentru exemplificare se utilizeaza perceptronul cu două intrări instruit să separe punctele dintr-un plan. Programul este destinat învăţării modului de funcţionare a perceptronului, modul de instruire a acestuia şi limitele acestuia. De asemenea este prezentată lista codului programului scris în limbaj de programare PASCAL pentru înţelegerea modului de implementare a perceptronului, a tehnicii de instruire şi utilizarea perceptronului. Perceptronul cu un singur strat cu două intrări este prezentat în figura următoare:

Page 124: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

y=w1x1++w2x2

f=y(t)

f

w1

w2

x1

x2

t

Valoarea ieşirii perceptronului se calculează în felul următor. Se calculează suma ponderată a intrărilor după relaţia:

2211 xwxwy += în care w1, w2 reprezintă valorile ponderilor intrărilor perceptronului. După aceasta se calculează valoarea ieşirii perceptronului după regula:

⎩⎨⎧

−>−<

=tydacatydaca

f10

unde t este valoarea pragului perceptronului. Pentru antrenarea perceptronului se aplică la intrare mai multe seturi de date la care este cunoscută valoarea aşteptată a ieşirii. În funcţie de rezultatul obţinut la ieşirea perceptronului, sunt modificate ponderile w1, w2 şi valoarea de prag t după un anumit algoritm, în aşa fel încât răspunsul perceptronului sa corespundă cu răspunsul aşteptat. Seturile de date utilizate pentru învăţare (antrenarea perceptronului) se numesc forme cheie şi ele sunt alcătuite din mulţimea vectorilor de intrare şi mulţimea vectorilor de ieşire aşteptaţi ca răspuns ai perceptronului pentru vectorii de intrare daţi. Pentru programul prezentat în continuare formele cheie sunt alcătuite din vectorul de intrare (Intrare) ce conţine un anumit numar de seturi de date de intrare şi vectorul ţintă (Tinta) care conţine răspunsul aşteptat de la perceptron pentru un anumit set de date. Trebuie de notat faptul că modificarea ponderilor intrărilor şi a valorii de prag se face numai pe durata învăţării perceptronului. Dacă procesul de învăţare a reuşit atunci valorile ponderilor şi a pragului rămân fixate si perceptronul poate fi utilizat la evaluarea datelor pentru care ieşirea (rezultatul evaluării) este necunoscută. Programul Perceptron1 prezentat în continuare are vectorul de intrare de dimensiunea n x m unde n reprezinta numărul seturilor de date prezentate la intrare, în exemplul prezentat acesta fiind de patru iar m reprezintă numărul intrărilor perceptronului (în numar de două în acest exemplu). Utilizarea perceptronului cu două intrări prezintă avantajul posibilităţii reprezentării grafice a datelor de intrare şi a rezultatelor obţinute. Astfel un set de date poate fi reprezentat în plan asociind intrării 1 a perceptronului coordonata x iar intrării 2 coordonata y. În acest fel cele patru seturi de date de intrare, propuse pentru test în program, în scopul antrenării perceptronului vor putea fi reprezentate în plan conform figurii de mai jos.

124

Page 125: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

În figură, setul valorilor de intrare pentru care vectorul ţintă are valoarea unu sunt reprezentate cu “+” iar cele pentru care vectorul ţintă are valoarea zero sunt reprezentate cu “o”. În aceasta situaţie, învăţarea perceptronului reprezintă de fapt determinarea unei drepte care să separe planul în două părţi, fiecare parte a planului trebuind să conţină numai punctele de acelaşi fel. In acest fel relaţia:

2211 xwxwy += poate fi transformată în:

021 =−+ tywxw ce reprezintă ecuaţia dreptei de separaţie. Este limpede faptul ca perceptronul nu poate separa decât puncte (în plan sau hiperplan) liniar separabile. În cazul în care configuraţia punctelor este mai complicată şi acestea nu sunt liniar separabile se vor utiliza reţele neuronale cu mai multe straturi. Algoritmul de învăţare utilizat pentru perceptron în acest program este următorul:

1. se calculează un vector de ieşire pentru cele patru seturi de date de intrare utilizate la instruire;

2. se compară vectorul de ieşire calculat la punctul 1 cu vectorul ţintă; 3. dacă cei doi vectori sunt diferiţi atunci se modifică ponderile şi pragul astfel:

w = w + dw t = t + dt unde dw şi dt sunt valori adăugate la vechea pondere, respectiv prag. Aceste valori se calculează astfel:

125

Page 126: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

dW = I x (T - O)T

)OT(dt ∑ −= unde dW este vectorul coloana cu două elemente al valorilor cu care se modifică ponderea pe intrarea 1 respectiv 2, I este matricea de 2 x 4 elemente a seturilor de date de intrare, T este vectorul ţintă cu 4 elemente iar O este vectorul de ieşire cu 4 elemente. Dupa calculul noilor ponderi şi al pragului algoritmul este reluat de la punctul 1.

4. Dacă vectorul de ieşire coincide cu vectorul ţintă atunci instruirea perceptronului se consideră încheiată.

Acest algoritm nu se va încheia intotdeauna. Din acest motiv se stabileste un

anumit număr de paşi limită care vor fi efectuaţi. Dacă instruirea nu se termină după numărul de paşi impus, se consideră învăţarea perceptronului eşuată. Poziţia iniţială a dreptei ce corespunde valorilor de test pentru ponderi şi prag, faţă de punctele de instruire este prezentată în figura următoare.

Pentru datele de test propuse în program algoritmul se încheie şi programul işeaz

af ă următorul mesaj:

126

Page 127: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

=============== REZULTAT =================== Procesul de invatare a reusit. Invatarea s-a facut in 4 pasi. Ponderile obtinute sunt: - ponderea intrarii 1: -2.6161 - ponderea intrarii 2: -0.6922 Pragul obtinut: -0.1680 Apasati tasta ENTER.

Reprezentarea grafică a rezultatului obţinut este prezentată în figura următoare.

Din această reprezentare grafică se observă modul în care este separat planul în

cele două regiuni. După instruire perceptronul este capabil să clasifice punctele din plan. Se propune ca exerciţiu să se completeze programul în aşa fel încât utilizatorul, după faza de instruire, să poată introduce valorile punctelor de intrare şi să primesacă ca răspuns evaluarea acestora de către perceptronul cu un strat. ---------------------------- Sursa programului Perceptron1 ------------------------------------ Program perceptron1; { Programul implementeaza in Pascal perceptronul cu doua intrari.

127

Page 128: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

128

Este vorba de o retea cu un singur strat realizata cu un perceptron cu doua intrari instruita sa separe valorile dintr-un plan (care sunt liniar separabile). } const { Numarul seturilor de date (asocieri) folosite pentru instruirea perceptronului. } NrSeturiDate=4; type { Vectorul de lucru - dimensiunea lui este data de numarul de date de intrare folosite pentru instruirea perceptronului. } VectorDate_t=array[1..NrSeturiDate] of real; var { Forma cheie. Vectorul datelor de intrare pentru instruire; acest vector contine NrSeturiDate seturi de date pentru cele 2 intrari ale perceptronului; primul indice se refera la numarul intrarii iar cel de-al doilea la numarul lotului de date prezentat la intrarea perceptronului. De exemplu pentru o matrice de forma: [a11 a12 a13 a14] [a21 a22 a23 a24] la un moment dat la intrarea perceptronului vor fi datele: a13 (intrare 1) \ O- iesire perceptron a23 (intrare 2) / } Intrare:array[1..2] of VectorDate_t; { Vectorul datelor de iesire. Aceste date reprezinta iesirea perceptronului pentru fiecare set de date de intrare, calculata cu algoritmul: yi = a1i*w1+a2iw2 unde a1i, a2i, i=1 ... NrSeturiDate sunt intrarile pentru lotul i, iar w1 si w2 sunt ponderile celor 2 intrari daca yi<-t atunci iesirea este egala cu zero daca yi>-t atunci iesirea este egala cu unu }

Page 129: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

129

Iesire:VectorDate_t; { Forma asociata. Vectorul tinta care contine rezultatele asteptate de la perceptron pentru setul de date furnizat. } Tinta:VectorDate_t; { Ponderile pe cele doua intrari ale perceptronului. } Pondere:array[1..2] of real; { Valoarea de prag pentru perceptron. } Prag:real; { Numarul maxim de pasi efectuati pentru instruirea perceptronului. Daca instruirea nu se termina inainte de acest numar de pasi se considera instruirea esuata. } NumarMaximPasi:integer; { Variabila invatare arata daca procesul de invatare a perceptronului a reusit sau nu. Invatare=FALSE daca procesul de invatare nu a reusit si TRUE in caz contrar. } Invatare:boolean; { Variabila pentru contorizarea pasilor facuti pentru instruirea perceptronului. } ContorPasi:integer; procedure StergeEcran; { Procedura sterge ecranul intr-o maniera care sa nu impiedice functionarea sub procesoarele noi. } var contor1:byte; begin for contor1:=1 to 24 do writeln; end; procedure IntroducereDate; {Procedura IntroducereDate solicita utilizatorului introducerea urmatoarelor date:

Page 130: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

130

- datele de intrare pentru antrenarea perceptronului - vectorul tinta - ponderile initiale - pragul initial - numarul maxim de pasi de efectuat pentru instruire Se lucreaza cu variabilele globale ale programului. } var contor1,contor2:byte; begin Writeln('Introduceti datele de intrare pentru instruirea

perceptronului.'); Writeln('Aceste date se introduc perechi, mai intai pentru intrarea 1 si'); Writeln('apoi pentru intrarea 2. Numarul total de perechi este: ',

NrSeturiDate); Writeln('Pentru test se propune setul de date:'); Writeln(' 1 2 3 4'); Writeln(' intrare 1: -0.5 -0.5 +0.3 +0.0'); Writeln(' intrare 2: -0.5 +0.5 -0.5 +1.0'); Writeln; for contor1:=1 to NrSeturiDate do for contor2:=1 to 2 do begin Write('Introduceti data ',contor1,' pentru intrarea ',

contor2,': '); Readln(Intrare[contor2,contor1]); end; Writeln('Datele introduse sunt:'); for contor2:=1 to 2 do begin Write(' intrarea ',contor2,': '); for contor1:=1 to NrSeturiDate do begin Write(Intrare[contor2,contor1]:3:3,' '); end; Writeln; end; Writeln; Writeln('Introduceti datele tinta. Aceste date se introduc in aceeasi

ordine'); Writeln('ca si datele vectorului de intrare.'); Writeln('Pentru datele de intrare propuse ca test se propune

urmatorul'); Writeln('vector tinta:'); Writeln(' Setul de date: 1 2 3 4'); Writeln(' Iesire perceptron: 1 1 0 0'); Writeln; for contor1:=1 to NrSeturiDate do

Page 131: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

131

begin Write('Introduceti valoarea iesirii perceptronului pentru

setul ',contor1,' de date: '); Readln(Tinta[contor1]); end; Writeln; Writeln('Introduceti ponderile intrarilor.'); Writeln('Pentru datele propuse ca test se propun urmatoarele

ponderi:'); Writeln(' pondere intrare 1: -0.8161'); Writeln(' pondere intrare 2: +0.3078'); Writeln; for contor1:=1 to 2 do begin Write('Introduceti ponderea pentru intrarea ',contor1,': '); Readln(Pondere[contor1]); end; Writeln; Writeln('Introduceti valoarea de prag pentru perceptron.'); Writeln('Pentru datele de test propuse, valoarea de prag este: - 0.1680'); Write('Introduceti valoarea de prag: '); Readln(Prag); Writeln; Writeln('Introduceti numarul maxim de pasi pentru instruire.'); Writeln('Pentru datele de test propuse, numarul maxim de pasi este:

20'); Write('Introduceti numarul maxim de pasi: '); Readln(NumarMaximPasi); Writeln; Writeln('Datele de intrare au fost introduse. Apasati tasta ENTER.'); Readln; end; procedure InmultireMatrici; { Procedura inmulteste matricea Intrare cu vectorul Ponderi, rezultatul fiind depus in matricea Iesire. } var contor1,contor2:byte; begin for contor1:=1 to NrSeturiDate do iesire[contor1]:=0; for contor1:=1 to NrSeturiDate do for contor2:=1 to 2 do iesire[contor1]:=iesire[contor1]+intrare[contor2,contor1]*

pondere[contor2];

Page 132: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

132

end; procedure CalculVectorIesire; { Procedura calculeaza vectorul de iesire dupa urmatorul algoritm: yi = a1i*w1+a2iw2 unde a1i, a2i, i=1 ... NrSeturiDate sunt

intrarile pentru lotul i, iar w1 si w2 sunt ponderile celor 2 intrari

daca yi<-t atunci iesirea este egala cu zero daca yi>-t atunci iesirea este egala cu unu Pentru efectuarea acestui calcul se apeleaza procedura de inmultire a doua matrici InmultireMatrici. } var contor1:byte; begin InmultireMatrici; for contor1:=1 to NrSeturiDate do if Iesire[contor1] >= -Prag then Iesire[contor1]:=1 else Iesire[contor1]:=0; end; procedure TestTerminareInvatare; { Testul de terminare a invatarii compara vectorul Iesire cu vectorul Tinta. Daca cei doi vectori sunt egali, element cu element atunci procesul de invatare s-a incheiat. Terminarea procesului de invatare este semnalata prin variabila logica Invatare care capata valoarea logica TRUE. } var contor1:byte; begin for contor1:=1 to NrSeturiDate do if Tinta[contor1]=Iesire[contor1] then Invatare:=true else begin Invatare:=false; exit; end; end; procedure ModificarePonderi; { Procedura modifica ponderile intrarilor perceptronului si a valoarea de prag. Pentru modificarea ponderilor intrarilor se utilizeaza relatia: intrarea 1 Pondere(1) = Pondere(1) + + a11*(tinta(1)-iesire(1)) +

Page 133: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

133

+ a12*(tinta(2)-iesire(2)) + + a13*(tinta(3)-iesire(3)) + ... intrarea 2 Pondere(2) = Pondere(2) + a21*(tinta(1)-iesire(1)) + + a22*(tinta(2)-iesire(2)) + + a23*(tinta(3)-iesire(3)) + ... unde aij sunt datele de intrare. prag = prag + + tinta(1)-iesire(1) + + tinta(2)-iesire(2) + + tinta(3)-iesire(3) + ... } var contor1,contor2:byte; begin for contor1:=1 to 2 do for contor2:=1 to NrSeturiDate do Pondere[contor1]:=Pondere[contor1]+Intrare[contor1,contor2]*

(Tinta[contor2] - Iesire[contor2]); for contor1:=1 to NrSeturiDate do Prag:=Prag+(Tinta[contor1] - Iesire[contor1]); end; { Programul principal } begin Invatare:=false; ContorPasi:=0; StergeEcran; IntroducereDate; repeat CalculVectorIesire; TestTerminareInvatare; if not(Invatare) then begin ModificarePonderi; Inc(ContorPasi); end; until (ContorPasi > NumarMaximPasi) or Invatare; StergeEcran; Writeln('=============== REZULTAT ==================='); Writeln; Writeln; if Invatare then begin Writeln('Procesul de invatare a reusit.'); Writeln('Invatarea s-a facut in ',ContorPasi,' pasi.');

Page 134: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

134

Writeln; Writeln('Ponderile obtinute sunt:'); Writeln(' - ponderea intrarii 1: ',Pondere[1]:3:4); Writeln(' - ponderea intrarii 2: ',Pondere[2]:3:4); Writeln; Writeln('Pragul obtinut: ',Prag:3:4); Writeln; end else begin Writeln; Writeln('Invatarea a esuat.'); Writeln; end; Writeln('Apasati tasta ENTER.'); Readln; end. În lucrarea de laborator studenţii vor efectua următoarele activităţi:

1. Realizarea schemei logice sau pseudocodul algoritmului de instruire a perceptronului pe baza descrierii din referatul de laborator şi a programului.

2. Execuţia programului pentru valorile furnizate ca exemplu şi explicarea modului în care s-a obţinut rezultatul.

3. Introducerea unor valori iniţiale diferite de cele de exemplu, inclusiv valori limita de tipul 0, 0, 0, … sau 1, 1, 1, … şi explicarea celor constatate.

4. Realizarea unui tabel cu numărul de paşi necesari instruirii perceptronului în funcţie de valorile alese.

Lucrările de laborator vor conţine: descrierea algoritmului de instruire

realizat cu ajutorul schemelor logice sau a pseudocodului, modelul perceptronului instruit cu valorile obţinute pentru ponderi şi valorile de prag, realizarea unei reţele nurale pentru împărţirea planului în trei domenii neconexe. Laborator 10, 11, 12, 13, 14.

Lucrul cu mediul CLIPS Activitatea 1. Să se realizeze un program în CLIPS care să găsească toate aranjamentele posibile a patru culori (rosu, albastru, galben, verde) luate câte trei. Rezolvare Rezolvarea acestei probleme cu ajutorul limbajelor procedurale cunoscute (Pascal, C, Java etc.) presupune realizarea unui program relativ complex. Avantajul limbajului CLIPS constă în motorul de inferenţă bazat pe un algoritm foarte performant.

Page 135: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

Din acest motiv sintaxa acestuia permite definirea foarte succintă a unor căutări după modele foarte complexe. Un exemplu îl constituie şi problema de faţă. Programul pentru rezolvarea problemei se scrie cu ajutorul unui editor de text (eventual cel oferit de mediul de programare CLIPS) şi se scrie pe disc în directorul: C\CLIPS\PROG cu numele ex1.clp. Conţinutul fişierului este: (deffacts obiecte (obiect rosu) (obiect galben) (obiect albastru) (obiect verde) ) (defrule aranjamente (obiect ?o1) (obiect ?o2 &~?o1) (obiect ?o3 &~?o2 &~?o1) => (printout t "(" ?o1 " " ?o2 " " ?o3 ")" crlf) ) După ce programul a fost scris, se încarcă în mediul de programare CLIPS:

CLIPS> (load “c:\\clips\\prog\\ex1.clp”) şi după ce se apasă tasta ENTER, programul afişează:

Defining deffacts: obiecte Defining defrule: aranjamente +j+j+j TRUE

Ceea ce semnifică faptul că programul s-a încărcat cu succes. Lansarea în execuţie se face astfel: CLIPS> (reset) CLIPS> (run) Programul afişează rezultatul execuţiei, aranjamentele posibile a patru culori în grupe de câte trei, ca în figura de mai jos:

Referatele de laborator vor conţine: - explicarea sintaxei şi a rolului

constructorului defrule; - explicarea sintaxei şi a rolului comenzii

printout; - explicarea modului de definire a

constructorului defrule pentru găsirea aranjamentelor posibile;

- explicarea modului de definire a comenzii printout pentru afişarea aranjamentelor;

- listingul programului şi rezultatele obţinute.

Notă: explicaţiile se vor baza pe materialul prezentat în curs (pag. 27-51) şi pe informaţiile luate din reţeaua Internet (cu specificarea sursei).

135

Page 136: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

136

Activitatea 2. Să se iniţializeze o bază de cunoştinţe cu numele şi prenumele unor persoane,

apoi să se afişeze persoanele cu un anumit nume de familie.

Rezolvare: Se editează programul cu ajutorul editorului CLIPS (File -> New) sau cu un alt editor de text.

Se defineşte structura (template-ul) pentru persoană: (deftemplate persoana

(slot nume) (slot prenume)

) Se iniţializează baza de cunoştinţe (se introduc datele iniţiale ale problemei): (deffacts init (persoana (nume Popescu) (prenume Ion)) (persoana (nume Ionescu) (prenume Vasile)) (persoana (nume Pop) (prenume Carmen)) Se defineşte regula pentru afişarea persoanelor cu numele dorit: (defrule Popescu (persoana (nume Popescu) (prenume ?p)) => (printout t ?p " Popescu " crlf) ) Se salvează fişierul cu numele ex2.clp în directorul C\CLIPS\PROG. Comenzile pentru încărcarea şi execuţia programului: CLIPS> (clear) se şterg eventualele fapte din execuţiile anterioare

CLIPS> (load “c:\\clips\\prog\\ex2.clp”) se încarcă programul CLIPS> (reset) se activează faptele iniţiale şi regulile corespunzătoare pentru începerea execuţiei CLIPS> (run) se lansează în execuţie. Referatele de laborator vor conţine explicarea programului, introducerea încă unui nume de persoana „Popescu”, modul de modificare pentru căutarea numelui altei persoane, introducerea interactivă a numelui şi listingul programului. Activitatea 3. Să se realizeze o stivă cu operaţiile elementare cunoscute (push = depunere în stivă, pop = extragere din stiva, top = afişarea vârfului stivei). Rezolvare Listingul programului este: (deffacts init (push 5) (pop)

Page 137: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

137

(push abc) (push 12) (top) (pop) (top) ) (defrule stack_init

; nu avem nicio conditie LHS (Left-Hand Side); regula se executa la inceputul ;programului

=> ; se initializeaza stiva cu un fapt vid ; celelalte reguli nu se vor aprinde decit daca exista un fapt stack (assert (stack)) ) (defrule stack_push ?f1 <- (push ?element) ?f2 <- (stack $?stacklist) => ; o regula se aplica o singura data pentru aceeasi conditie ; in acest caz se sterge f1 pentru ca se schimba f2 si deci se schimba LHS ca intreg (retract ?f1 ?f2) ; se introduce elementul in stiva (assert (stack ?element $?stacklist)) (printout t "Push: " ?element crlf) ) (defrule stack_pop ?f1 <- (pop) ?f2 <- (stack ?element $?stacklist) => (retract ?f1 ?f2) ; se scoate elementul din stiva (assert (stack $?stacklist)) (printout t "Pop: " ?element crlf) ) (defrule stack_top (top) (stack ?element $?stacklist) => (printout t "Top: " ?element crlf) ; aici nu avem nevoie sa stergem fapte, LHS ramine neschimbata ) Notă: deşi faptele sunt definite într-o anumită ordine: push, pop, push, top, pop, top), execuţia programului nu ţine seama de această ordine: Push: 5 Push: abc

Page 138: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

138

Push: 12 Pop: 12 Top: abc De asemenea, pop şi top se execută o singură dată deoarece CLIPS admite numai fapte unice în lista de fapte. Lucrările de laborator vor conţine: listingul programului, explicarea programului, rezultatele afişate. Se va arăta de asemenea, considerând listingul prezentat aici, cum se poate face ca pop şi top să se execute de mai multe ori. Se vor face propuneri de îmbunătăţire a programului. Activitatea 4. Să se realizeze un program CLIPS care să permită identificarea unei cărţi într-o bibliotecă. Rezolvare Indicaţie: Se va folosi o structură de tipul: (deftemplate carte (multislot prenume_autor) (slot nume_autor) (multislot titlu) ) O varianta posibilă a programului este: ;******++++++******++++++*******+++++++********+++++++++********%%%%%% ; PROGRAM GESTIONARE BIBLIOTECA PERSONALA ;******++++++******++++++*******+++++++********+++++++++********%%%%%% (deftemplate autor (slot nume) (slot prenume) (slot titlu)) (defrule deschidere_fisier => (open "bibl.txt" b "r+") (bind ?nr_carti 0) (bind $?linie (readline b)) (while (neq $?linie EOF) (bind ?nr_carti (+ ?nr_carti 1)) (bind $?linie (explode$ $?linie)) (assert (autor (nume (nth$ 1 $?linie)) (prenume (nth$ 2 $?linie)) (titlu (nth$ 3 $?linie)) )) (bind $?linie (readline b)) )

Page 139: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

139

(assert (nr_carti ?nr_carti)) ) (defrule meniu-de-optiuni => (printout t t "Optiuni:" crlf) (printout t "1. Cautare carte dupa nume autor" crlf) (printout t "2. Cautare carte dupa prenume autor" crlf) (printout t "3. Cautare carte dupa titlu" crlf) (printout t "4. Introducere carte noua in baza de date" crlf) (printout t "5. Afisare numar de carti din biblioteca" crlf) (printout t "Alegeti una din optiuni (1-5): ") (assert (optiune (read))) ) (defrule optiune_incorecta ?f <- (optiune ?c & ~1 & ~2 & ~3 & ~4 & ~5) => (retract ?f) (printout t "Alegeti una din optiuni (1-5): ") (assert (optiune (read))) ) (defrule introducere_nume (optiune 1 | 4) => (printout t t "Introduceti numele autorului: ") (bind ?n (read)) (while (or (not (symbolp ?n)) (< (str-length (str-cat ?n)) 3)) (printout t "Introduceti numele autorului: ") (bind ?n (read)) ) (assert (nume ?n)) ) (defrule introducere_prenume (optiune 2 | 4) => (printout t "Introduceti prenumele autorului: ") (bind ?p (read)) (while (or (not (symbolp ?p)) (< (str-length (str-cat ?p)) 3)) (printout t "Introduceti prenumele autorului: ") (bind ?p (read)) ) (assert (prenume ?p)) ) (defrule introducere_titlu

Page 140: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

140

(optiune 3 | 4) => (printout t "Introduceti titlul cartii: ") (bind ?t (readline)) (while (not (stringp ?t)) (printout t "Introduceti titlul cartii: ") (bind ?t (readline)) ) (assert (titlu ?t)) ) (defrule cautare_dupa_nume (optiune 1) (nume ?x) (autor (nume ?n) (prenume ?p) (titlu ?t) ) (test (eq (lowcase ?x) (lowcase ?n))) => (printout t ?n " " ?p " -- " ?t crlf) ) (defrule cautare_dupa_prenume (optiune 2) (prenume ?x) (autor (nume ?n) (prenume ?p) (titlu ?t) ) (test (eq (lowcase ?x) (lowcase ?p))) => (printout t ?n " " ?p " -- " ?t crlf) ) (defrule cautare_dupa_titlu (optiune 3) (titlu ?x) (autor (nume ?n) (prenume ?p) (titlu ?t) ) (test (str-index (lowcase ?x) (lowcase ?t))) => (printout t ?n " " ?p " -- " ?t crlf) ) (defrule introducere_inregistrare ?f1 <- (nume ?n) ?f2 <- (prenume ?p) ?f3 <- (titlu ?t) ?f4 <- (nr_carti ?nr) (not (autor (nume ?n) (prenume ?p) (titlu ?t))) => (retract ?f1 ?f2 ?f3 ?f4) (assert (autor (nume ?n) (prenume ?p) (titlu ?t) ) (nr_carti (+ ?nr 1)) )

Page 141: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

141

(printout b ?n " " ?p " \"" ?t "\"" crlf) ) (defrule afisare_numar_carti (optiune 5) (nr_carti ?n) => (printout t t "In aceasta baza de date sunt " ?n " volume." crlf) ) (defrule stergere_date (declare (salience -5)) (or ?f <- (nume ?) ?f <- (prenume ?) ?f <- (titlu ?) ) => (retract ?f) ) (defrule alta_optiune (declare (salience -5)) ?f <- (optiune ?) => (retract ?f) (printout t t "Doriti o alta optiune (Y/y)? ") (bind ?raspuns (readline)) (if (or (eq ?raspuns "y") (eq ?raspuns "Y")) then (refresh meniu-de-optiuni) ) ) (defrule inchidere_fisier (declare (salience -10)) => (close) ) Referatele de laborator vor conţine programul realizat, explicarea funcţionării acestuia, baza de date, rezultatele obţinute, propuneri de îmbunătăţire a programului. Activitatea 5. Să se construiască un sistem expert care să identifice un animal pe baza caracteristicilor acestuia. Rezolvare Exemplul unui astfel de program este prezentat în continuare.

Page 142: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

142

;;;====================================================== ;;; Sistem expert de identificare a unui animal ;;; ;;; Acest program reprezinta un sistem expert simplu ;;; care incearca sa determine un animal pe baza ;;; caracteristicilor sale. ;;; Baza de cunostinte este o colectie de fapte ;;; ce reprezinta un lant de regulibackward. ;;; Lantul CLIPS de reguli forward este folosit ;;; pentru a simula o masina de inferenta backward ;;; ;;; Exemplu pentru CLIPS Version 6.0 ;;; ;;; Pentru executie: load, reset si run. ;;; Raspunsul la intrebari este da sau nu. ;;;====================================================== ;;;*************************** ;;;* DEFTEMPLATE DEFINITIONS * ;;;*************************** (deftemplate rule (multislot if) (multislot then)) ;;;************************** ;;;* INFERENCE ENGINE RULES * ;;;************************** (defrule propagate-goal "" (goal is ?goal) (rule (if ?variable $?) (then ?goal ? ?value)) => (assert (goal is ?variable))) (defrule goal-satified "" (declare (salience 30)) ?f <- (goal is ?goal) (variable ?goal ?value) (answer ? ?text ?goal) => (retract ?f) (format t "%s%s%n" ?text ?value)) (defrule remove-rule-no-match "" (declare (salience 20))

Page 143: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

143

(variable ?variable ?value) ?f <- (rule (if ?variable ? ~?value $?)) => (retract ?f)) (defrule modify-rule-match "" (declare (salience 20)) (variable ?variable ?value) ?f <- (rule (if ?variable ? ?value and $?rest)) => (modify ?f (if ?rest))) (defrule rule-satisfied "" (declare (salience 20)) (variable ?variable ?value) ?f <- (rule (if ?variable ? ?value) (then ?goal ? ?goal-value)) => (retract ?f) (assert (variable ?goal ?goal-value))) (defrule ask-question-no-legalvalues "" (declare (salience 10)) (not (legalanswers $?)) ?f1 <- (goal is ?variable) ?f2 <- (question ?variable ? ?text) => (retract ?f1 ?f2) (format t "%s " ?text) (assert (variable ?variable (read)))) (defrule ask-question-legalvalues "" (declare (salience 10)) (legalanswers ? $?answers) ?f1 <- (goal is ?variable) ?f2 <- (question ?variable ? ?text) => (retract ?f1) (format t "%s " ?text) (printout t ?answers " ") (bind ?reply (read)) (if (member (lowcase ?reply) ?answers) then (assert (variable ?variable ?reply)) (retract ?f2) else (assert (goal is ?variable)))) ;;;*************************** ;;;* DEFFACTS KNOWLEDGE BASE *

Page 144: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

144

;;;*************************** (deffacts knowledge-base (goal is type.animal) (legalanswers are da nu) (rule (if backbone is da) (then superphylum is backbone)) (rule (if backbone is nu) (then superphylum is jellyback)) (question backbone is "Animalul are sira spinarii?") (rule (if superphylum is backbone and warm.blooded is da) (then phylum is warm)) (rule (if superphylum is backbone and warm.blooded is nu) (then phylum is cold)) (question warm.blooded is "Animalul are singe cald?") (rule (if superphylum is jellyback and live.prime.in.soil is da) (then phylum is soil)) (rule (if superphylum is jellyback and live.prime.in.soil is nu) (then phylum is elsewhere)) (question live.prime.in.soil is "Animalul traieste in pamint?") (rule (if phylum is warm and has.breasts is da) (then class is breasts)) (rule (if phylum is warm and has.breasts is nu) (then type.animal is pasare/pinguin)) (question has.breasts is "Femela alapteaza puiul?") (rule (if phylum is cold and always.in.water is da) (then class is water)) (rule (if phylum is cold and always.in.water is nu) (then class is dry)) (question always.in.water is "Animalul traieste permanent in apa?") (rule (if phylum is soil and flat.bodied is da) (then type.animal is vierme_plat)) (rule (if phylum is soil and flat.bodied is nu) (then type.animal is vierme/lipitoare)) (question flat.bodied is "Animalul are un corp plat?") (rule (if phylum is elsewhere and body.in.segments is da) (then class is segments))

Page 145: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

145

(rule (if phylum is elsewhere and body.in.segments is nu) (then class is unified)) (question body.in.segments is "Animalul are corpul format din segmente?") (rule (if class is breasts and can.eat.meat is da) (then order is meat)) (rule (if class is breasts and can.eat.meat is nu) (then order is vegy)) (question can.eat.meat is "Animalul este carnivor?") (rule (if class is water and boney is da) (then type.animal is peste)) (rule (if class is water and boney is nu) (then type.animal is rechin/calcan)) (question boney is "Animalul are sistem osos?") (rule (if class is dry and scally is da) (then order is scales)) (rule (if class is dry and scally is nu) (then order is soft)) (question scally is "Animalul are solzi?") (rule (if class is segments and shell is da) (then order is shell)) (rule (if class is segments and shell is nu) (then type.animal is centiped/milliped/insecta)) (question shell is "Animalul are o cochilie?") (rule (if class is unified and digest.cells is da) (then order is cells)) (rule (if class is unified and digest.cells is nu) (then order is stomach)) (question digest.cells is "Animalul are mai multe camere in stomac?") (rule (if order is meat and fly is da) (then type.animal is liliac)) (rule (if order is meat and fly is nu) (then family is nowings)) (question fly is "Animalul poate sa zboare?") (rule (if order is vegy and hooves is da)

Page 146: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

146

(then family is hooves)) (rule (if order is vegy and hooves is nu) (then family is feet)) (question hooves is "Animalul are copite?") (rule (if order is scales and rounded.shell is da) (then type.animal is broasca_testoasa)) (rule (if order is scales and rounded.shell is nu) (then family is noshell)) (question rounded.shell is "Animalul are o cochilie inchisa?") (rule (if order is soft and jump is da) (then type.animal is broasca)) (rule (if order is soft and jump is nu) (then type.animal is salamandra)) (question jump is "Animalul executa salturi?") (rule (if order is shell and tail is da) (then type.animal is homar)) (rule (if order is shell and tail is nu) (then type.animal is crab)) (question tail is "Animalul are coada?") (rule (if order is cells and stationary is da) (then family is stationary)) (rule (if order is cells and stationary is nu) (then type.animal is meduza)) (question stationary is "Animalul este permanent atasat unui obiect?") (rule (if order is stomach and multicelled is da) (then family is multicelled)) (rule (if order is stomach and multicelled is nu) (then type.animal is protozor)) (question multicelled is "Animalul este alcatuit din mai multe celule?") (rule (if family is nowings and opposing.thumb is da) (then genus is thumb)) (rule (if family is nowings and opposing.thumb is nu) (then genus is nothumb)) (question opposing.thumb is "Animalul are degetul mare opozabil?") (rule (if family is hooves and

Page 147: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

147

two.toes is da) (then genus is twotoes)) (rule (if family is hooves and two.toes is nu) (then genus is onetoe)) (question two.toes is "Animalul are doua copite la picior?") (rule (if family is feet and live.in.water is da) (then genus is water)) (rule (if family is feet and live.in.water is nu) (then genus is dry)) (question live.in.water is "Animalul traieste in apa?") (rule (if family is noshell and limbs is da) (then type.animal is crocodil/aligator)) (rule (if family is noshell and limbs is nu) (then type.animal is sarpe)) (question limbs is "Animalul are picioare?") (rule (if family is stationary and spikes is da) (then type.animal is anemona)) (rule (if family is stationary and spikes is nu) (then type.animal is coral/burete)) (question spikes is "Animalul are tepi?") (rule (if family is multicelled and spiral.shell is da) (then type.animal is melc)) (rule (if family is multicelled and spiral.shell is nu) (then genus is noshell)) (question spiral.shell is "Animalul are cochilia in forma de spirala?") (rule (if genus is thumb and prehensile.tail is da) (then type.animal is maimuta)) (rule (if genus is thumb and prehensile.tail is nu) (then species is notail)) (question prehensile.tail is "Animalul se poate agata cu coada?") (rule (if genus is nothumb and over.400 is da) (then species is 400)) (rule (if genus is nothumb and over.400 is nu) (then species is under400)) (question over.400 is "Animalul la maturitate are peste 180 de kilograme?")

Page 148: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

148

(rule (if genus is twotoes and horns is da) (then species is horns)) (rule (if genus is twotoes and horns is nu) (then species is nohorns)) (question horns is "Animalul are coarne?") (rule (if genus is onetoe and plating is da) (then type.animal is rinocer)) (rule (if genus is onetoe and plating is nu) (then type.animal is cal/zebra)) (question plating is "Animalul este acoperit cu folie protectoare?") (rule (if genus is water and hunted is da) (then type.animal is balena)) (rule (if genus is water and hunted is nu) (then type.animal is delfin/porc_de_mare)) (question hunted is "Animalul este vinat pentru comercializare?") (rule (if genus is dry and front.teeth is da) (then species is teeth)) (rule (if genus is dry and front.teeth is nu) (then species is noteeth)) (question front.teeth is "Animalul are dinti mari in fata?") (rule (if genus is noshell and bivalve is da) (then type.animal is scoica/stridie)) (rule (if genus is noshell and bivalve is nu) (then type.animal is calmar/caracatita)) (question bivalve is "Animalul este protejat de cochilie din doua bucati?") (rule (if species is notail and nearly.hairless is da) (then type.animal is om)) (rule (if species is notail and nearly.hairless is nu) (then subspecies is hair)) (question nearly.hairless is "Animalul este aproape plesuv?") (rule (if species is 400 and land.based is da) (then type.animal is urs/tigru/leu)) (rule (if species is 400 and land.based is nu) (then type.animal is morsa))

Page 149: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

149

(question land.based is "Animalul traieste pe uscat?") (rule (if species is under400 and thintail is da) (then type.animal is pisica)) (rule (if species is under400 and thintail is nu) (then type.animal is coiot/lup/vulpe/caine)) (question thintail is "Animalul are o coada scurta?") (rule (if species is horns and one.horn is da) (then type.animal is hipopotam)) (rule (if species is horns and one.horn is nu) (then subspecies is nohorn)) (question one.horn is "Animalul are un singur corn?") (rule (if species is nohorns and lives.in.desert is da) (then type.animal is camila)) (rule (if species is nohorns and lives.in.desert is nu) (then type.animal is girafa)) (question lives.in.desert is "Animalul traieste in desert?") (rule (if species is teeth and large.ears is da) (then type.animal is iepure)) (rule (if species is teeth and large.ears is nu the type.animal is sobolan/soarece/veverita/castor/porc_spinos)) (question large.ears is "Animalul are urechi mari?") (rule (if species is noteeth and pouch is da) (then type.animal is "cangar/urs coala")) (rule (if species is noteeth and pouch is nu) (then type.animal is cirtita/scorpie/elefant)) (question pouch is "Animalul are o punga?") (rule (if subspecies is hair and long.powerful.arms is da) (then type.animal is urangutan/gorila/cimpanzeu)) (rule (if subspecies is hair and long.powerful.arms is nu) (then type.animal is babun)) (question long.powerful.arms is "Animalul are brate lungi si puternice?") (rule (if subspecies is nohorn and fleece is da) (then type.animal is berbec/capra)) (rule (if subspecies is nohorn and fleece is nu) (then subsubspecies is nofleece))

Page 150: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

150

(question fleece is "Animalul are blana?") (rule (if subsubspecies is nofleece and domesticated is da) (then type.animal is vaca)) (rule (if subsubspecies is nofleece and domesticated is nu) (then type.animal is caprioara/elan/antilopa)) (question domesticated is "Animalul este domestic?") (answer is "Cred ca animalul este un(o) " type.animal)) Referatele de laborator vor conţine: explicarea modului de funcţionare a programului, exemple de utilizare. Pe baza acestui model se va realiza un sistem expert pentru un alt domeniu, de exemplu arhitectura calculatoarelor. Se va compara funcţionarea programului realizat cu programul prezentat la lucrarea de laborator 4,5,6. Lucrările de laborator vor conţine de asemenea: listingul programului realizat, explicarea funcţionării acestuia şi exemple de utilizare.

Page 151: INTELIGENŢĂ ARTIFICIALĂ - cadredidactice.ub.rocadredidactice.ub.ro/rotardan/files/2012/04/inteligenta-artificial... · Indrumar de laborator ... SISTEME EXPERT 24 3.1. Sisteme

151

BIBLIOGRAFIE 1. Aur Dorian, Aur Liviu – Modelări neuronale în inteligenţa artificială, Editura

Grigore Tabacaru, Bacău, 1997 2. Dumitraşcu Liviu, s.a. - Elemente de inteligenţă artificială pentru conducerea

operativă a producţiei, Editura Academiei, Bucureşti 1983 3. Hristev Ryurick Marius - Introducere în: Prolog, un limbaj al inteligenţei artificiale,

Editura APH, Bucureşti 1992 4. Malita Mihaela, Malita Mircea - Bazele inteligenţei artificiale. Logici

propoziţionale, Editura Tehnică, Bucureşti, 1987 5. Streinu Ileana - LISP. Limbajul de programare al inteligenţei artificiale, Editura

Ştiinţifică şi enciclopedică, Bucureşti 1986 6. Becheanu M., s.a. – Logică matematică şi teoria mulţimilor, Editura Didactică şi

pedagogică, Bucureşti 1972 7. Dumitraş Adriana - Proiectarea reţelelor neuronale artificiale, Editura ODEON,

Bucuresti, 1997 8. Dumitrescu D. Costin Hariton – Reţele neuronale. Teorie şi aplicaţii. Editura

TEORA, Bucureşti, 1996 9. Flondor Paul, Ionescu Cezar - Introducere în algoritmi genetici, ALL, Bucureşti,

1999 10. Chiorean Ioana - Calculul paralel. Fundamente. Editura Microinformatica, Cluj,

1995 11. H.N. Teodorescu, M. Zbancioc, Oana Voroneanu – „Sisteme bazate pe cunoştinţe.

Aplicaţii”. Editura Performantica, Iaşi, ISBN-973-730-014-9, 2004 12. H.N. Teodorescu - Program Design (ediţia a-II-a), Pro-Copy, Tampa, USA, 2000 13. H.N. Teodorescu - Tehnici de programare avansată, Note de curs, UT Iaşi, 2001 14. A.Brezulianu – Sisteme Fuzzy şi Aplicaţii, Ed. Tehnici şi Tehnologii, Iaşi, 2002 15. D. Cristea – Programarea bazată pe reguli (Rule-Based Programming), Romanian

Academy Publishing House, 2002, Bucharest. 16. D. Galea, Mihaela Costin, M. Zbancioc „Programarea în CLIPS prin exemple”,

Tehnopress Publishing House, 2001, ISBN 973-8048-45-1, pag.146 17. D. Galea, Mihaela Costin, M. Zbancioc „Aplicaţii de Inteligenţă Artificială în

CLIPS”, Tehnopress Publishing House, 2001, ISBN 973-8048-51-6. pag. 152