Documente Academic
Documente Profesional
Documente Cultură
-1-
a) Fapte
Faptele sunt predicate de ordinul nti de aritate n cnsiderate adevrate (reprezinta cea mai simpla forma de predicat din Prolog). Ele stabilesc relaii ntre obiectele universului problemei. Numrul de argumente ale faptelor este dat de aritatea (numrul de argumente) corespunztoare a predicatelor. Exemple: Fapt: cine(bobi). place(in, ioana). place(in, ana). frumoas(ana). 1 bun(daniel). deplaseaz(cub, camera1, camera2). Aritate: 1 2 2 1 3
Interpretarea particular a predicatului i a argumentelor acestuia depinde de programator. Ordinea argumentelor, odat fixat, este important -2-
b) Scopuri
Obinerea cnsecinelor sau a rezultatului unui program Prolog se face prin fixarea unor scopuri care pot fi adevrate sau false, n funcie de cninutul bazei de cunotine. Scopurile sunt predicate pentru care se dorete aflarea valorii de adevr n cntextul faptelor existente n baza de cunotine. Cum scopurile pot fi vzute ca ntrebri, rezultatul unui program Prolog este rspunsul la o ntrebare (sau la o cnjuncie de ntrebri). Acest rspuns poate fi afirmativ, yes, sau negativ, no. Un program Prolog, n cazul unui rspuns afirmativ la o ntrebare, poate furniza i alte informaii din baza de cunotine. Exemplu: Cnsidernd baza de cunotine specificat anterior, se pot pune diverse ntrebri, cum ar fi: ?- place(in, ioana). Yes % deoarece acest fapt exist n baza de cunotine ?- caine(bobi). Yes % deoarece i acest fapt exist n baza de cunotine ?- papagal(in). No % deoarece acest fapt nu exist n baza de cunotine ?- bun(robert). No % deoarece acest fapt nu exist n baza de cunotine n exemplele prezentate pn acum, argumentele faptelor i ntrebrilor au fost obiecte particulare, numite i cnstante sau atomi simbolici. Predicatele Prolog, ca orice predicate n logica cu predicate de ordinul I, admit ca argumente i obiecte generice numite variabile. n Prolog, prin cnvenie, numele argumentelor variabile ncepe cu liter mare iar numele cnstantelor simbolice ncepe cu liter mic. O variabil poate fi instaniat (legat) dac exist un obiect asociat acestei variabile, sau neinstaniat (liber) dac nu se tie nc ce obiect va desemna variabila. La fixarea unui scop Prolog care cnine variabile, acestea sunt neinstaniate, iar sistemul ncearc satisfacerea acestui scop cutnd printre faptele din baza de cunotine un fapt care se poate identifica cu scopul, printr-o instaniere adecvat a variabilelor din scopul dat. Este vorba de fapt
-3-
c) Reguli
O regul Prolog exprim un fapt care depinde de alte fapte i este de forma: S :- S1, S 2, S n. cu semnificaia prezentat la nceputul acestui laborator. Fiecare S , i = i 1,n i S au forma faptelor Prolog, deci sunt predicate, cu argumente cnstante, variabile sau structuri. Faptul S care definete regula, se numete antet de regul, iar S , S , S 1 2 n formeaz corpul regulii i reprezint cnjuncia de scopuri care trebuie satisfcute pentru ca antetul regulii s fie satisfcut. Fie urmtoarea baz de cunotine Prolog: Ana este frumoas. frumoasa(ana). % Ipoteza 1 In este bun. bun(in). % Ipoteza 2 In o cunoate pe Maria. cunoaste(in, maria). % Ipoteza 3 In o cunoate pe Ana. cunoaste(in, ana). % Ipoteza 4 Mihai o place pe Maria. place(mihai, maria). % Ipoteza 5 Dac dou persoane X i Y se cunosc i persoana X este bun i persoana Y este frumoas, atunci cele dou persoane, X i Y, se plac. place(X, Y) :% Ipoteza 6 bun(X), cunoaste(X, Y), frumoasa(Y). Enunul de la iptoteza 6 definete o regul Prolog. Relaia place(Cine, PeCine), fiind definit att printr-un fapt (Ipoteza 5) ct i printr-o regul (Ipoteza 6). n cndiiile existenei regulilor n baza de cunotine Prolog, satisfacerea unui scop se face printr-un procedeu similar cu cel prezentat n seciunea b), dar unificarea scopului se ncearc att cu fapte din baza de cunotine, ct i cu antetul regulilor din baz. La unificarea unui scop cu antetul unei reguli, pentru a putea satisface acest scop trebuie satisfcut regula. Aceasta revine la a satisface toate faptele din corpul regulii, deci cnjuncia de scopuri. Scopurile din corpul regulii devin subscopuri a cror satisfacere se va ncerca printr-un mecanism similar cu cel al satisfacerii scopului iniial. Pentru baza de cunotine descris mai sus, satisfacerea scopului ?- place(in, ana). -5-
-6-
La ncercarea de resatisfacere a scopului place(X, Y), printr-un mecanism similar, se observ c nu mai exist alte solutii. n cncluzie, fiind dat baza de cunotine Prolog anterioar, rspunsul sistemului Prolog la ntrebarea place(X, Y) este: ?- place(X, Y). X = mihai, Y = maria; X = in, Y = ana; no
Observaii:
-7-
Daniel
Elena
Bogdan
Maria
Gabriel
Inel
Adriana
Gheorghe
Magda
Mihai
Robert
Anda
Adelina
Laurentiu
Silviu
Cleopatra
Toma
Mai departe, utiliznd predicatul cuplucasatorit, vom identifica membrii arborelui genealogic care sunt cstorii.
Observaie: faptele cnstruite cu acelai numede relaie (cum ar fi: cuplucasatorit) se afl unul lng altul n fiierul surs. Aceste fapte formeaz definiia relaiei respective. Urmtorul pas cnst n identificarea relaiilor dintre oameni. Singura relaie necesar este reprezentarea prinilor pentru fiecare individ. De aici, vom putea deduce alte relaii, cum ar fi bunici, nepoi,etc.
-9-
Introducei acest program folosind editorul SWI Prolog (prezentat n figura 3) i salvai-l ntr-un fiier cu extensia pl, de exemplu familie.pl. Compilai aplicaia (tasta F9). Realizai aceast compilare ori de cte ori modificai ceva n program.
- 10 -
n acest moment putem formula ntrebri ce forma: este Mihai tatl lui Silviu? sau este Robert tatl lui Gheorghe? (figura 3). ?- tata(mihai,silviu). Sistemul va cnsulta baza de fapte de care dispune i va rspunde cu YES. La ntrebarea: ?- tata(robert,gheorghe)., s istemul va rspunde cu NO, deoarece n baza de cunotine nu exist nici un fapt care s corespund acestei ntrebri. - 11 -
Lucrarea 1 Bazele inteligenei artificiale Dac dorim s aflm care sunt copii lui Mihai, trebuie s introducem noiunea de variabil. O variabil poate fi vzut ca o locaie de memorie care primete n timpul procesului de rainament o valoare. Odat asignat, valoarea unei variabile nu mai poate fi schimbat. n Prolog, numele unei variabile ncepe ntotdeauna cu liter mare. Variabilele pot s apar i n cadrul faptelor dintr-un program pentru a desemna adevruri general valabile. Spre exemplu, dac adugm la exemplul nostru faptul place(Persna, handbal), aceasta nseamn c tuturor persoanelor le place s joace handbal. Cu alte cuvinte, oricare ar fi Persoana, are loc relaia place(Persna, handbal). ?- tata(mihai,Copil). Copil reprezint o variabil. Sistemul va cuta n baza de cunotine un fapt care s corespund interogrii i se va opri la tata(mihai, adelina). Pentru a obine toi copiii lui mihai, vom cnstrui o interogare mai complicat: ?- tata(mihai,Copil), writeln(Copil),fail. n aceast interogare, virgula desemneaz operatorul SI logic, writeln afieaz valoarea din parantez i trece la linia urmtoare, iar fail este o relaie (predicat) predefinit care eueaz ntotdeauna determinnd cutarea de noi soluii. Rspunsul la interogarea de mai sus va fi: adelina, laurentiu, silviu, cleopatra, toma,No. Pn acum am definit relaiile ca mulimi de fapte. O relaie poate fi definit i n funcie de alte relaii existente n program. Pentru aceasta vom folosi cnstrucii sintactice mai complicate numite reguli. n general, o regul are urmtoarea sintax: numerel(arg1, , argN) :- numerel1(), , numerelM(). Exemplu: putem defini predicatul sot astfel Barbat este sot dac este barbat i este casatorit cu o femeie (Femeie). Aceast definiie va fi codificat prin urmtoarea regul care va fi adugat la programul prezentat mai sus. Operatorul :- are semnificaia dac. Partea sin stnga operatorului :- este numit capul regulii (head), iar cea din dreapta corpul regulii (body). Observaii: Un fapt poate fi vzut ca o regul fr corp (fr cndiie). Regulile i faptele care definesc aceeai relaie (au acelai nume de relaie n cap) trebuie grupate n sursa programului. n Prolog, relaiile sunt numite de obicei predicate.
sot(Barbat, Femeie):barbat(Barbat), cuplucasatorit(Barbat, Femeie).
Similar,
- 12 -
Lucrarea 1 Bazele inteligenei artificiale Dup adugarea celor dou introducei interogarea: reguli, recompilai programul i
?- sot(Barbat,Femeie), writeln(Barbat),fail.
Rspunsul va fi: in, andrei, gheorghe, gabriel, mihai, robert. Pentru a putea urmri modul n care este rezolvat interogarea anterioar se introduce comanda ?- trace. i apoi se repet interogarea precedent. Pe ecran vor apare diferite subscopuri care trebuie rezolvate de programul Prolog pentru a obine rspunsul al interogare. Pentru a trece de la un subscop la altul se apas tasta ENTER. Urmtoarea regul definete dac o persoan este printele unui copil. n aceast regul, punctul i virgula (;) desemneaz operatorul logic SAU.
parinte(Parinte,Copil):tata(Parinte,Copil); mama(Parinte,Copil).
Mai departe putem utiliza regula parinte pentru a crea o nou regul ce testeaz dac o persoan este copilul unei persoane date.
copil(Copil,Parinte):parinte(Parinte,Copil).
Pn acum am definit reguli focalizate pe relaii directe dintre persoanele ce alctuiesc baza de cunotine. n continuare vom defini dou reguli care prezint relaii indirecte ntre persoanele din baza de cunotine. Vom defini regula bunic i regula nepot utiliznd relaiile prezentate n figura 4.
Figura 4. Graful pentru relaiile bunic, nepot utiliznd relaii deja definite
Pentru a afla bunicul Z unei persoane X procedm astfel: Cine este printele lui X? (presupunem c este Y). Cine este printele lui Y? (presupunem c este Z). Deci, Z va fi bunicul lui X. - 13 -
Z parinte parinte
X femeie
sora
Algoritmul este urmtorul: Pentru orice X i Y, X este sora lui Y dac (1) X i Y au acelai printe, i (2) X este femeie. O posibil implementare n Prolog a algoritmului prezentat mai sus este urmtoarea:
sora(X,Y):parinte(Z,X), parinte(Z,Y), femeie(X), X\=Y.
Meninm faptul c modalitatea n care X i Y au acelai printe a fost prezentat anterior. n Prolog, operatorul\= are sensul de diferit. 2. Simulare funcinare circuite hardware digitale. Presupunem urmtoarea schem digital electrnic:
- 14 -
Baza de cunotine Prolog va trebui s cuprind predicate care s modeleze blocurile operainale logice ale circuitelor cu una, respectiv dou intrri i o ieire, avnd argumente de tip binar. Codul surs (SWI-Prolog) al aplicaiei este urmtorul:
- 15 -
Baza de cunotine, n acest caz, cnstituie clauzele (faptele) specifice sistemului , formate din strile (cunoscute) pe care acesta le poate avea. 3. n acest program ne propunem s determinm dac dou persoane de sunt parteneri n afaceri. Vom defini regulile de aa natur nct s eliminm situaia n care o persoan este partener cu el nsui. n acest scop vom utiliza operatorul \=. Prezentm mai jos premisele (ipotezele) de la care se pleac: Robert este corect. Andrei nu este partener cu Robert. Dac dou persoane X i Y sunt corecte, atunci X este partener cu Y. Dac Andrei nu este corect, atunci In este corect. Dac o persoan X este partener cu Y, atunci i Y este partener cu X. Codul surs (SWI-Prolog) al aplicaiei este urmtorul:
% Premisa 1 corect(robert). % Premisa 2 notpartener(andrei, robert). % Premisa 3 partener(X, Y) :- corect(X), corect(Y), X \= Y. % Premisa 4, se folosete i ipoteza 3, inversat cnform principiului reducerii la absurd: formula p q este echivalent cu !q!p. corect(in) :- notcorect(andrei). % din premisa 3 avem: notcorect(X) :- notambiicorecti(X, Y), corect(Y). notambiicorecti(X, Y) :- notpartener(X, Y). % Premisa 5, este prezentat n premisa 3 (definiia pentru partener) care include i simetria.
- 16 -
- 17 -
Desfaurarea lucrrii:
1. Se va citi breviarul teoretic. Se atrage atenia asupra faptului c toate cunotinele din aceast lucrare vor fi necesare i n derularea celorlalte lucrri. 2. Se vor studia problemele rezolvate (problemele prezentate pe parcursul acestui laborator , ncercnd gsirea altor posibiliti de soluinare a acestora. Utilizai i alte scopuri (interogri) pentru a testa definiiile predicatelor introduse 3. S se completeze aplicaia 1 cu enunurile de mai jos i s se urmreasc execuia corect a acestora. Modificai regula sora pentru a obine regula pentru relaia Definii relaiile soacra, cumnat, ginere. Definii relaia nepot utiliznd relaia parinte Definii relaia fericit, tiind c oricine are minim doi copii este fericit. Cnstruii o interogare prin intermediul creia s afiai toate mamele. Definii relaia matusa(X,Y) utiliznd relaiile parinte i sora. 4. S se elaboreze un Prolog program care descrie relaiile existente n familiea proprie D-sr i permite cercetarea relaiilor prin utilizarea acopului extern. Arbore genealogic elaborat trebuie s cnim cel puin trei nivele. 5. Pentru cercetarea relaiilor existente n familie sa fie utilizate nu mai puin de ase scopuri.
Bibliografie
Carti A. Florea, A. Boangiu. Elemente de Ineligena Artificial. A. Florea. Bazele logice ale Inteligentei Artificiale. Cap. 4, 6. A. Florea, B. Dorohonceanu, C. Francu. Programare in Prolog. Articole on-line "Computing Machinery and Intelligence", Turing, A.M. Mind, 59, 1950, 433-460. "AI's Greatest Trends and Controversies", IEEE Intelligent Systems January/February 2000.
"A Framework for Representing Knowledge", Marvin Minsky, MIT-AI Laboratory Memo 306, June, 1974.
. .