Labor at or 1
Transcript of Labor at or 1
-
8/6/2019 Labor at or 1
1/9
MINISTERUL EDUCAIEI I TINERETULUI AL REPUBLICIIMOLDOVA
Universitatea Liber Internaional din Moldova
Facultatea Informatic i Inginerie
LUCRARE DE LABORATOR Nr.1
La obiectul: Inteligenta artificiala
Tema: Arborele Genealogic
Lector: Obad Olesea
Realizat: studentul gr. TI-31
Malancea Denis
Chiinu 2011
1
-
8/6/2019 Labor at or 1
2/9
LUCRARE DE LABORATOR Nr.1
Tema:Arborele Genealogic
Scopul lucrarii:Realizarea arborelui genealogic al familei noastre in limbajul
de programare Prolog.
Aspecte teoretice:
Limbajul de programare Prologeste cel mai raspindit limbaj de programare astazipentru aplicatia Inteligentei Artificiale.Prolog (programming in logic) in 1972 aaparut ca limbaj de programare, produs al unei scolii franceze de informatica de laUniversitatea Marselle. Initial limbajul Prolog a fost utilizat in special decercetatori din domeniul procesarii limbajului natural.
Facilitari ale limbajului Prolog:
O gama larga standart de predicate pentru operatii string, fisiere, grafica,meniuri.
Interfete cu alte limbaje de programare.
Artimetica in virgula fixa si mobile.
Posibilitatea proiectarii bazei de date dinamice si baze de date externe.
In Prolog sunt doua tipuri de legaturi:
Legaturi unare : negatia;
Legaturi binare:
conjunctiva;
disjunctia;implicatia;
echivalenta.
Principiile programarii logice:
Disjunct vid - ;
Strategii de cautare;
Principiul de rezolutie;
Principiul de unificare;
Back tracking.Disjunct vid (se noteaza - ) nu dispune de nici o litera, este unic din multimeadisjunctiilor care este indentificat prin fals.Strategii de cautare a solutiilor:
cautarea in adincime (de sus in jos, de la stinga la dreapta);
cautarea in latime (pe orizontala, de la stinga la dreapta);Principiul de rezolutie metoda de inferenta si poate fi defenit astfel: p q si p r, de unde rezulta p r (p r rezolventa). Exemplu: Toti oamenii sunt muritori.
Denis este om.Denis este muritor.
2
-
8/6/2019 Labor at or 1
3/9
Principiul de unificare pentru a aplica principiul de rezolutie asupra predicateloreste necesar ca ele in prealabil sa fie unite. Unificatorul a doi termeni numim osubstitutie care transforma acesti termeni in termeni autentici.Exemplu: predicat(mama, copil)
parinte(ina, lena)In limbaj natural: Care este copilul lui ina?
In limbajul Prolog: ?parinte(ina, X).Daca o variabila cu valoare se intilneste cu alta variabila care are valoare senumeste comparatie.
Termenul 1 Termenul 2 Rezultat
Variabila are valoare Variabila are valoare Comparatite
Variabila are valoare Variabila n-are valoare Unificare
Variabila n-are valoare Variabila are valoare Unificare
Intitatile limbajului Prolog:Sintaxa are doua aspecte:
descrierea terminologiei; descrierea componentelor.
Limbajul Prolog deosebeste patru categorii de simboluri:
minuscule (ex:a, b, c);
majuscule (ex:A, B, C);
cifre (ex:1, 2, 3);
caractere speciale (ex:-, +, &, @, ?).Termenii se divid in simpli si compusi.
Termen
Simpla Compusa
Constante Variabile
Atom Numere
Atom se formeaza din combinatia celor patru categorii de simboluri; se incep cu
litere minuscule, apoi urmata de alti atomi (ex: aTom1).Varialiba se incepe cu litere majuscule (ex:Variabila).
Constanta descrierea dintre obiecte.In limbajul Prolog sunt trei componente (disjunctii lui Horn):
fapte(clauze\conditii);
intrebari(scop);
reguli.
Partea practica:
1. Fapte exprima relatii intre obiecte.Exemplu: In limbajul natural: Ciinele latra.
In limbajul Prolog: latra(ciinele).Unde sirul de simboluri latra este numele de relatii, care se numeste nume de
predicatsaufunctor, iar ciinele este obiectulantrenat in aceasta relatie. Predicatul3
-
8/6/2019 Labor at or 1
4/9
-
8/6/2019 Labor at or 1
5/9
Goal-aici se scriu intrebarile. Goal este de doua tipuri: intern si extern. 2. Intrebari se mai numesc si scopuri; se deosebesc de unele sisteme prinsimboluri: :-, ?-.A raspunde la o intrebare pusa in program consta in determinarea daca ea poate fidedusa de program utilizind principiul de deductie. Daca programul contine un faptce coincide cu intrebarea, atunci raspunsul va fi YES, in caz contrar ne va afisa
NO.Exemplu: ?-parinte(maia, zinaida).\\raspunsul v-a fi:YES;
?-parinte(eugenia, ana).\\raspunsul v-a fi:NO.
Raspunsul NO semnifica numai ca faptul nu este in baza de date.Reguli relatii dintre fapte.Prologul permite de-a formula reguli de tipul: un fapt A este adevarat, daca un faptB sau C sunt adevarate.Exemplu: sora(X, Y):- A
parinte(Z, X), Bparinte(Z, Y),femeie(X), XY. C
O regula este alcatuita din: cap mama(X, Y):-corp parinte(X, Y),
femeie(X).Tipuri de intrebari:
?-bunica(nume, X)
?-bunica(X, nume)
?-bunica(nume, nume)
?-bunica(X, Y)
5
-
8/6/2019 Labor at or 1
6/9
Listingul programului:
predicates
parinte(symbol,symbol).
bunel(symbol,symbol).bunica(symbol,symbol).
femeie(symbol).sora(symbol,symbol).
mama(symbol,symbol).tata(symbol,symbol).
casatorit(symbol,symbol).
surori(symbol,symbol).frate(symbol,symbol).
frati(symbol,symbol).unchi(symbol,symbol).
matusa(symbol,symbol).verisor(symbol,symbol).
verisoara(symbol,symbol).ginere(symbol,symbol).
nora(symbol,symbol).soacra(symbol,symbol).
socru(symbol,symbol).
cumnat(symbol,symbol).cumnata(symbol,symbol).
cuscri(symbol,symbol).
mama(X, Y):-
parinte(X, Y),femeie(X).
tata(X, Y):-parinte(X, Y),
not(femeie(X)).sora(X, Y):-
mama(Z, X),mama(Z, Y),
femeie(X),XY.
surori(X, Y):-parinte(Z, X),
parinte(Z, Y),
femeie(X),femeie(Y),
XY.frate(X, Y):-
tata(Z, X),
tata(Z, Y),not(femeie(X)),
XY.frati(X, Y):-
parinte(Z, X),parinte(Z, Y),
not(femeie(X)),not(femeie(Y)),
XY.unchi(X, Y):-
frate(X, Z),parinte(Z, Y).
matusa(X,Y):-sora(X,Z),
6
-
8/6/2019 Labor at or 1
7/9
parinte(Z, Y).
bunel(X,Y):-
parinte(X, Z),parinte(Z, Y),
not(femeie(X)).
bunica(X, Y):-parinte(X, Z),
parinte(Z, Y),
femeie(X).verisoara(X, Y):-parinte(Z, X),
parinte(W, Y),frate(Z, W),
femeie(X).
verisor(X, Y):-parinte(Z, X),
parinte(W, Y),frate(Z, W),
not(femeie(X)).
ginere(X, Y):-
parinte(Y, Z),
casatorit(X, Z),
not(femeie(X)).nora(X, Y):-
parinte(Y, Z),casatorit(X, Z),
femeie(X).soacra(X,Y):-
mama(X, Z),casatorit(Z, Y),
femeie(X).
socru(X, Y):-tata(X, Z),casatorit(Z, Y),
not(femeie(X)).cumnat(X, Y):-
casatorit(X, Z),sora(Z, Y),
not(femeie(X)).cumnata(X, Y):-
casatorit(X, Z),
frate(Z, Y),femeie(X).
cuscri(X, Y):-
parinte(X, Z),parinte(Y, W),
casatorit(Z, W).
7
-
8/6/2019 Labor at or 1
8/9
Arborele Genealogic:
8
-
8/6/2019 Labor at or 1
9/9
Concluzie:
Realizind lucrarea de laborator numarul 1, cu tema Arborele Genealogic. Undetrebuia sa realizam arborele genealogic al familei noastre in limbajul de
programare Prolog si sa determinam gradul de rudenie cu ajutorul intrebarilor.Am creat si am verificat cu certitudine ca intradevar arborele functioneazatotalmente dupa cerintele necesare.
9