Sunteți pe pagina 1din 19

Lucrarea 1 Bazele inteligenei artificiale

Limbajul PROLOG. Obiectivele lucrrii


nceputul programrii logice poate fi atribuit lui R. Kowalski i A. Colmerauer i se situeaz la nceputul anilor '70. Kowalski a plecat de la o formul logic de tipul:

S1 S2 ... Sn S
care are, n logica cu predicate de ordinul nti semnificaia declarativ conform creia S1 S2 ... Sn implic S, adic dac S1 i S2 ... i Sn sunt fiecare adevrate atunci i S este adevrat, i a propus o interpretare procedural asociat. Conform acestei interpretri, formula de mai sus poate fi scris sub forma:

S dac S1 i S2 ... i Sn
i poate fi executat ca o procedur a unui limbaj de programare recursiv, unde S este antetul procedurii i S1, S2, ... Sn corpul acesteia. Deci, pe lng interpretarea declarativ, logic, a unei astfel de formule, formula poate fi interpretat procedural astfel: pentru a executa S se execut S1 i S2 ... i Sn. Cuvntul PROLOG vine de la PROgraming in LOGic. Prologul este un limbaj declarativ, aceasta nsemnnd ca un program nu descrie cum se calculeaza o solutie, ci consta din o multime de fapte si legaturi logice (reguli) care descriu relatiile pe care se bazeaza aplicatia de rezolvat. n Prolog, pentru obtinerea unei solutii, utilizatorul pune mai degraba o ntrebare dect sa ruleze programul. Cnd se pune o ntrebare, sistemul cauta n baza de fapte si reguli pentru a gasi, prin deductie logica, raspunsul. Limbajul Prolog a fost creat in anul 1972 de catre Alain Colmerauer si Robert Kowalski ca un concurent pentru LISP. De atunci i pn n prezent, limbajul Prolog s-a impus ca cel mai important limbaj de programare logic i s-au dezvoltat numeroase implementri, att ale unor interpretoare ct i ale unor compilatoare ale limbajului. Limbajul Prolog este un limbaj declarativ susinut de o component procedural. Spre deosebire de limbajele procedurale, cum ar fi C sau Pascal, n care rezolvarea problemei este specificat printr-o serie de pai de execuie sau aciuni, ntr-un limbaj declarativ problema este specificat prin descrierea universului problemei i a relaiilor sau funciilor existente ntre -1-

Lucrarea 1 Bazele inteligenei artificiale obiecte din acest univers. Exemple de astfel de limbaje sunt cele funcionale, de exemplu LISP, Scheme, ML, i cele logice, de exemplu Prolog. Dei iniial a fost gndit pentru un set restrns de probleme, Prolog a devenit cu timpul un limbaj de uz general, fiind o unealt important n aplicaiile de inteligen artificial. Pentru multe probleme, un program Prolog are cam de 10 ori mai puine linii dect echivalentul lui n Pascal.

Lansare mediu PROLOG


Pentru dezvoltarea programelor, vom folosi implementarea SWIPROLOG. Lansarea acestuia se face apsnd butonul Start si efectund selectiile Programs -> SWI Prolog -> SWI Prolog. Pe ecran va apare fereastra aplicatiei si prompterul ? care arata ca programul asteapta comenzi. Comenzi uzuale: ? pwd. Afiseaza directorul curent. ?-ls. Afiseaza fisierele din directorul curent. ?-cd(cale). Schimba directorul curent. Exemplu: ?-cd("C:\\BIA\\Prolog"). Directorul curent devine c:\BIA\Prolog. ?-consult(numeFisier.pl). Fiierul cu numele numeFisier.pl este ncrcat n memorie. ?-halt. Aceasta comanda ncheie sesiunea de lucru curenta n SWIProlog. Pentru a se afisa informatii cu privire la o comanda, apelam: ?-help(nume_comanda). Exemplu: ?-help(halt). Important: 1. Extensia implicit a unui fiier construit cu SWI-Prolog este .pl. 2. Fiecare enun n Prolog se termina cu caracterul punct (.). 3. Enunurile (ntrebrile) se introduc la prompterul ?- i cele mai simple au structura sintactic identic cu cea a unui fapt. -2-

Lucrarea 1 Bazele inteligenei artificiale

Entitile limbajului PROLOG


Prolog este un limbaj logic, descriptiv, care permite specificarea problemei de rezolvat n termenii unor fapte cunoscute despre obiectele universului problemei i a relaiilor existente ntre aceste obiecte. Execuia unui program Prolog const n deducerea implicaiilor acestor fapte i relaii, programul definind astfel o mulime de consecine ce reprezint nelesul sau semnificaia declarativ a programului. Un program Prolog conine urmtoarele entiti: fapte despre obiecte i relaiile existente ntre aceste obiecte; reguli despre obiecte i relaiile dintre ele, care permit deducerea (inferarea) de noi fapte pe baza celor cunoscute; ntrebri, numite i scopuri, despre obiecte i relaiile dintre ele, la care programul rspunde pe baza faptelor i regulilor existente.

a) Fapte
Faptele sunt predicate de ordinul nti adevrate (reprezinta cea mai simpla forma de stabilesc relaii ntre obiectele universului argumente ale faptelor este dat de aritatea corespunztoare a predicatelor. Exemple: Fapt: cine(bobi). place(ion, ioana). place(ion, ana). frumoas(ana). bun(daniel). deplaseaz(cub, camera1, camera2). de aritate n considerate predicat din Prolog). Ele problemei. Numrul de (numrul de argumente)

Aritate: 1 2 2 1 1 3

-3-

Lucrarea 1 Bazele inteligenei artificiale Interpretarea particular a predicatului i a argumentelor acestuia depinde de programator. Ordinea argumentelor, odat fixat, este important i trebuie pstrat la orice alt utilizare a faptului, cu aceeai semnificaie. Mulimea faptelor unui program Prolog formeaz baza de cunotine Prolog. Asa cum vom arata in cele ce urmeaza, n baza de cunotinte a unui program Prolog sunt incluse i regulile Prolog.

b) Scopuri
Obinerea consecinelor sau a rezultatului unui program Prolog se face prin fixarea unor scopuri care pot fi adevrate sau false, n funcie de coninutul bazei de cunotine. Scopurile sunt predicate pentru care se dorete aflarea valorii de adevr n contextul 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 conjuncie 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: Considernd baza de cunotine specificat anterior, se pot pune diverse ntrebri, cum ar fi: ?- place(ion, ioana). Yes % deoarece acest fapt exist n baza de cunotine ?- caine(bobi). Yes % deoarece i acest fapt exist n baza de cunotine ?- papagal(ion). 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 constante 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 convenie, numele argumentelor variabile ncepe cu liter mare iar numele constantelor 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 conine 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, -4-

Lucrarea 1 Bazele inteligenei artificiale printr-o instaniere adecvat a variabilelor din scopul dat. Este vorba de fapt de un proces de unificare a predicatului scop cu unul din predicatele fapte existente n baza de cunotine. La ncercarea de satisfacere a scopului, cutarea se face ntotdeauna pornind de la nceputul bazei de cunotine. Dac se ntlnete un fapt cu un simbol predicativ identic cu cel al scopului, variabilele din scop se instaniaz conform algoritmului de unificare i valorile variabilelor astfel obinute sunt afiate ca rspuns la satisfacerea acestui scop. Exemple: ?- caine(CineEste). CineEste = bobi ?- deplaseaza(Ce, DeUnde, Unde). Ce = cub, DeUnde = camera1, Unde = camera2 ?- deplaseaza(Ce, Aici, Aici). no n cazul n care exist mai multe fapte n baza de cunotine care unific cu ntrebarea pus, deci exist mai multe rspunsuri la ntrebare, corespunznd mai multor soluii ale scopului fixat, limbajul Prolog procedeaz astfel. Prima soluie este dat de prima unificare i exist attea soluii cte unificri diferite exist. La realizarea primei unificri se marcheaz faptul care a unificat i care reprezint prima soluie. La obinerea urmtoarei soluii, cutarea este reluat de la marcaj n jos n baza de cunotine. Obinerea primei soluii este de obicei numit satisfacerea scopului iar obinerea altor soluii, resatisfacerea scopului. La satisfacera unui scop cutarea se face ntotdeauna de la nceputul bazei de cunotine. La resatisfacerea unui scop, cutarea se face ncepnd de la marcajul stabilit de satisfacerea anterioar a acelui scop. Sistemul Prolog, fiind un sistem interactiv, permite utilizatorului obinerea fie a primului rspuns, fie a tuturor rspunsurilor. n cazul n care, dup afiarea tuturor rspunsurilor, un scop nu mai poate fi resatisfcut, sistemul rspunde no. Exemple: ?- place(ion, X). X = ioana; % cerem o nou soluie tastnd caracterul ; i Enter X = ana; no ?- place(Cine, PeCine). Cine = mihai, PeCine = maria; Cine = mihai, PeCine = ana; -5-

Lucrarea 1 Bazele inteligenei artificiale no Aadar, exist dou soluii pentru scopul place(ion, X) i tot dou soluii pentru scopul place(Cine, PeCine), considernd tot baza de cunotine prezentat n seciunea a).

c) Reguli
O regul Prolog exprim un fapt care depinde de alte fapte i este de forma: S :- S1, S2, Sn. cu semnificaia prezentat la nceputul acestui laborator. Fiecare Si, i = 1,n i S au forma faptelor Prolog, deci sunt predicate, cu argumente constante, variabile sau structuri. Faptul S care definete regula, se numete antet de regul, iar S1, S2, Sn formeaz corpul regulii i reprezint conjuncia 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 Ion este bun. bun(ion). % Ipoteza 2 Ion o cunoate pe Maria. cunoaste(ion, maria). % Ipoteza 3 Ion o cunoate pe Ana. cunoaste(ion, 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 condiiile 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 conjuncia 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(ion, ana). -6-

Lucrarea 1 Bazele inteligenei artificiale se va astfel: scopul unific cu antetul regulii (6) i duce la instanierea variabilelor din regula (6): X = ion i Y = ana. Pentru ca acest scop s fie ndeplinit, trebuie ndeplinit regula, deci fiecare subscop din corpul acesteia. Aceasta revine la ndeplinirea scopurilor bun(ion), care reuete prin unificare cu faptul (2), cunoaste(ion, ana), care reuete prin unificare cu faptul (4), i a scopului frumoasa(ana), care reuete prin unificare cu faptul (1). n consecin, regula a fost ndeplinit, deci i ntrebarea iniial este adevarat, iar sistemul rspunde yes. Mai departe s vedem ce se ntmpl dac se pune ntrebarea: ?- place(X, Y). Prima soluie a acestui scop este dat de unificarea cu faptul (5), iar rspunsul este: X = mihai, Y = maria Sistemul Prolog va pune un marcaj n dreptul faptului (5) care a satisfcut scopul. Urmtoarea soluie a scopului place(X, Y) se obine ncepnd cutarea de la acest marcaj n continuare n baza de cunotine. Scopul unific cu antetul regulii (6) i se vor fixa trei noi subscopuri de ndeplinit, bun(X), cunoaste(X, Y) i frumoasa(Y). Scopul bun(X) este satisfcut de faptul (2) i variabila X este instaniat cu valoarea ion, X=ion. Se ncearc acum satisfacerea scopului cunoaste(ion, Y), care este satisfcut de faptul (3) i determin instanierea Y = maria. Se introduce n baza de cunotine un marcaj asociat scopului cunoaste(ion, Y), care a fost satisfcut de faptul (3). Se ncearc apoi satisfacerea scopului frumoasa(maria). Acesta eueaz. n acest moment sistemul intr ntr-un proces de backtracking n care se ncearc resatisfacerea scopului anterior satisfcut, cunoaste(ion, Y), n sperana c o noua soluie a acestui scop va putea satisface i scopul curent care a euat, frumoasa(Y). Resatisfacerea scopului cunoaste(ion, Y) se face pornind cutarea de la marcajul asociat scopului n jos, deci de la faptul (3) n jos. O nou soluie (resatisfacere) a scopului cunoaste(ion, Y) este dat de faptul (4) care determin instanierea Y = ana. n acest moment se ncearc satisfacerea scopului frumoasa(ana). Cum este vorba de un nou scop, cutarea se face de la nceputul bazei de cunotine i scopul frumoasa(ana) este satisfcut de faptul (1). n consecin a doua soluie a scopului place(X, Y) este obinut i sistemul rspunde: X = ion, Y = ana, urmnd un mecanism de backtracking, descris intuitiv n figura 1 prin prezentarea arborilor de deducie construii de sistemul Prolog.

-7-

Lucrarea 1 Bazele inteligenei artificiale

Figura 1 Algoritmul de satisfacere a scopurilor n Prolog

La ncercarea de resatisfacere a scopului place(X, Y), printr-un mecanism similar, se observ c nu mai exist alte solutii. n concluzie, fiind dat baza de cunotine Prolog anterioar, rspunsul sistemului Prolog la ntrebarea place(X, Y) este: ?- place(X, Y). X = mihai, Y = maria; X = ion, Y = ana; no

Observaii:
-8-

Lucrarea 1 Bazele inteligenei artificiale La satisfacerea unei conjuncii de scopuri n Prolog, se ncearc satisfacerea fiecrui scop pe rnd, de la stnga la dreapta. Prima satisfacere a unui scop determin plasarea unui marcaj n baza de cunotine n dreptul faptului sau regulii care a determinat satisfacerea scopului. Dac un scop nu poate fi satisfcut (eueaz), sistemul Prolog se ntoarce i ncearc resatisfacerea scopului din stnga, pornind cutarea n baza de cunotine de la marcaj n jos. nainte de resatisfacerea unui scop se elimin toate instanierile de variabile determinate de ultima satisfacere a acestuia. Dac cel mai din stnga scop din conjuncia de scopuri nu poate fi satisfcut, ntreaga conjuncie de scopuri eueaz. Aceast comportare a sistemului Prolog n care se ncearc n mod repetat satisfacerea i resatisfacerea scopurilor din conjunciile de scopuri se numete backtracking. Aplicatii in Prolog: 1. n cele ce urmeaz prezentm un program Prolog care descrie relaiile existente ntr-o familie. Spre exemplu, alegem trei predicate de baz: brbat, femeie, parinte i n funcie de acestea vom descrie relaiile din familia prezentat n figura 2.
Ion Ioana Andrei Andreea

Daniel

Elena

Bogdan

Maria

Gabriel

Ionel

Adriana

Gheorghe

Magda

Mihai

Robert

Anda

Adelina

Laurentiu

Silviu

Cleopatra

Toma

Figura 2 Exemplu de familie (arbore genealogic)

Codul surs (SWI-Prolog) al aplicaiei este urmtorul:

-9-

Lucrarea 1 Bazele inteligenei artificiale

Mai departe, utiliznd predicatul cuplu_casatorit, vom identifica membrii arborelui genealogic care sunt cstorii.

Observaie: faptele construite cu acelai numede relaie (cum ar fi: cuplu_casatorit) se afl unul lng altul n fiierul surs. Aceste fapte formeaz definiia relaiei respective. Urmtorul pas const 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.

- 10 -

Lucrarea 1 Bazele inteligenei artificiale

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.

- 11 -

Lucrarea 1 Bazele inteligenei artificiale

Figura 3 Editorul SWI Prolog

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 consulta baza de fapte de care dispune i va rspunde cu YES. La ntrebarea: ?- tata(robert,gheorghe)., sistemul va rspunde cu NO, deoarece n baza de cunotine nu exist nici un fapt care s corespund acestei ntrebri. - 12 -

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 raionament 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(Persona, handbal), aceasta nseamn c tuturor persoanelor le place s joace handbal. Cu alte cuvinte, oricare ar fi Persoana, are loc relaia place(Persona, 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 construi 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 construcii sintactice mai complicate numite reguli. n general, o regul are urmtoarea sintax: nume_rel(arg1, , argN) :- nume_rel_1(), , nume_rel_M(). 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 condiie). 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), cuplu_casatorit(Barbat, Femeie).

Similar,
sotie(Femeie, Barbat):femeie(Femeie), cuplu_casatorit(Barbat, Femeie).

- 13 -

Lucrarea 1 Bazele inteligenei artificiale Dup adugarea celor dou reguli, recompilai programul i introducei interogarea:
?- sot(Barbat,Femeie), writeln(Barbat),fail.

Rspunsul va fi: ion, 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. - 14 -

Lucrarea 1 Bazele inteligenei artificiale Interogarea n Prolog va fi:


bunic(X,Z):parinte(X,Y),parinte(Y,Z).

Similar se construiete interogarea pentru nepot.


nepot(X, Z):bunic(Z,X).

n figura 5 prezentm relaia sora.

Z parinte X femeie parinte Y

sora

Figura 5 Definirea relaiei 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.

Menionm faptul c modalitatea n care X i Y au acelai printe a fost prezentat anterior. n Prolog, operatorul \= are sensul de diferit. 2. Simulare funcionare circuite hardware digitale. Presupunem urmtoarea schem digital electronic:

Figura 6 Circuite electronice digitale

- 15 -

Lucrarea 1 Bazele inteligenei artificiale Circuitele fundamentale (porile logice) se descriu uzual prin tabela de adevr. De exemplu, pentru circuitele din figura 6, se folosesc pentru modelare funcii logice de tip AND, respectiv NOT, corespunztoare porilor logice elementare care l compun. Funciile globale, corespunztoare celor dou circuite din figura 6, sunt urmtoarele: X Y Z W 0 0 0 1 0 1 0 1 1 0 0 1 1 1 1 0 A 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 B C D E 0 0 0 0 0 0 1 0 0 1 0 0 0 1 1 0 1 0 0 0 1 0 1 0 1 1 0 0 1 1 1 0 0 0 0 1 0 0 1 1 0 1 0 1 0 1 1 0 1 0 0 1 1 0 1 1 1 1 0 1 1 1 1 1 F G H 0 0 1 0 0 1 0 0 1 1 0 1 0 0 1 0 0 1 0 0 1 1 0 1 0 0 1 0 0 1 0 0 1 1 0 1 0 0 1 0 0 1 0 0 1 1 1 0

Baza de cunotine Prolog va trebui s cuprind predicate care s modeleze blocurile operaionale logice ale circuitelor cu una, respectiv dou intrri i o ieire, avnd argumente de tip binar. Codul surs (SWI-Prolog) al aplicaiei este urmtorul:

- 16 -

Lucrarea 1 Bazele inteligenei artificiale

Baza de cunotine, n acest caz, constituie 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 Ion 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 not_partener(andrei, robert). % Premisa 3 partener(X, Y) :- corect(X), corect(Y), X \= Y. % Premisa 4, se folosete i ipoteza 3, inversat conform principiului reducerii la absurd: formula pq este echivalent cu !q!p. corect(ion) :- not_corect(andrei). % din premisa 3 avem: not_corect(X) :- not_ambii_corecti(X, Y), corect(Y). not_ambii_corecti(X, Y) :- not_partener(X, Y). % Premisa 5, este prezentat n premisa 3 (definiia pentru partener) care include i simetria.

- 17 -

Lucrarea 1 Bazele inteligenei artificiale

Figura 7 Problema parteneriatului

Desfurarea 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 precum i cele oferite ca exemple n kitul SWI-Prolog), ncercnd gsirea altor posibiliti de soluionare a acestora. Utilizai i alte scopuri (interogri) pentru a testa definiiile predicatelor introduse. 3. S se scrie ipotezele de mai jos sub form de clauze Prolog i s se demonstreze concluziile prin formularea de interogri. Ipoteze: Ion are mere. Ana are mere i iepuri. Dan are prune. Cerine: Cine are mere? Ce are Ana? - 18 -

Lucrarea 1 Bazele inteligenei artificiale Cine nu are fructe (not fruct(X))? Cine are la fel ca Ion? Are cineva mere ( _ )? Are Dan ceva? Ce are Ana i nu este fruct? Cine are ce? 4. S se descrie n Prolog circuitele electronice de baz utilizate pentru modelarea operatorilor logici: INVERSOR(NOT), SI (AND), SI-NU (NAND), SAU(OR), SAU-NU(NOR), SAU EXCLUSIV(XOR), SAU EXCLUSIV NEGAT(XNOR). 5. S se completeze aplicaia 1 cu enunurile de mai jos i s se urmreasc execuia corect a acestora. Definii relaiile fiu i fiica. Modificai regula sora pentru a obine regula pentru relaia frate. Definii relaiile soacra, cumnat, ginere. S se afieze numele familiilor fr copii. Construii o interogare prin intermediul creia s afiai toate mamele. Construii o interogare prin intermediul creia s afiai prinii lui Ionel. S se afieze toi nepoii (fete) care provin de la fetele lui Andrei. Definii relaia nepot utiliznd relaia parinte. Definii relaia matusa(X,Y) utiliznd relaiile parinte i sora. Definii relaia fericit, tiind c oricine are minim doi copii este fericit. Pentru orice X, dac X are un copil ce are o sor, atunci X are doi copii (introducei relaia aredoicopii).

- 19 -

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

  • L3 Bia
    L3 Bia
    Document15 pagini
    L3 Bia
    Dragos Neata
    Încă nu există evaluări
  • L2 Bia
    L2 Bia
    Document11 pagini
    L2 Bia
    Dragos Neata
    Încă nu există evaluări
  • Biometrie
    Biometrie
    Document64 pagini
    Biometrie
    Dragos Neata
    Încă nu există evaluări
  • Punctaj Ae TCM 4
    Punctaj Ae TCM 4
    Document2 pagini
    Punctaj Ae TCM 4
    Dragos Neata
    Încă nu există evaluări