Sunteți pe pagina 1din 8

Fa

MINISTERUL EDUCAŢIEI AL REPUBLICII MOLDOVA


UNIVERSITATEA TEHNICĂ A MOLDOVEI
ll 0
Facultatea Calculatoare Informatica si Microelectronica
Catedra - Automatica și Tehnologii Informaționale 8

Raport

Lucrare de laborator nr. 3


la disciplina ,,Programarea Logică și Inteligența Artificială”

Tema: Sistem Expert.

A efectuat:
A verificat: Lazu Victoria

Chişinău 2015

INTRODUCERE
Sistemul expert (SE) este un program (pachet de programe), care simulează într-o oarecare măsură
activitatea unui expert uman într-un anumit domeniu. Mai mult decât atât, acest domeniu este strict limitat.
Principalul scop al SE este de a consulta în domeniul pentru care acest SE este proiectat.
Un SE este format din trei componente principale:
1) Baza de cunoştinţe (BC). BC este partea centrală a sistemului expert. Aceasta conţine o colecţie
de fapte şi de cunoştinţe (regulile) pentru extragerea altor cunoştinţe. Informaţiile conţinute în baza de
cunoştinţe sunt folosite de către SE pentru determinarea răspunsului în timpul consultării. De obicei, BC
sunt separate de programul principal sau stocate pe alte mijloace fixe.
2) Mecanismul (motorul) de inferenţă. MI conţine descrieri ale modului de aplicare a cunoştinţelor
cuprinse în baza de cunoştinţe. În timpul consultării, MI iniţiază SE să înceapă procesările, îndeplinind
regulile determină admisibilitatea soluţiei găsite şi transmite rezultatele la Interfaţa sistemului (System User
Interface).
3) Interfaţa sistemului utilizatorului (ISU) este parte a SE, care interacţionează cu utilizatorul.
Funcţiile ISU includ: primirea informaţiilor de la utilizator, transferul rezultatelor în forma cea mai
convenabilă utilizatorului, explicarea rezultatelor primite de SE (oferă informaţii cu privire la atingerea
rezultatelor).

Figura 1 - Structura generală a SE


În funcţie de metoda de clasificare şi plasare a informaţiei există mai multe tipuri de Baze de

2
cunoştinţe: de producţie, de reţea şi de cadru (frame-uri) modele de reprezentare a cunoştinţelor.
Modelul de reţea se bazează pe reprezentarea cunoştinţelor în forma unei reţele ale cărei noduri
corespund conceptelor iar arcele relaţiilor dintre ele.
La baza modelului pe cadre (frame-uri) se află o grupare logică de atribute a obiectului, precum şi
depozitarea şi prelucrarea grupurilor logice care sunt descrise în cadre.
Modelul de producţie se bazează pe regulile de forma "dacă-atunci" şi permite introducerea
fragmentelor de cunoştinţe faptice în regulile limbajului Prolog. Anume astfel sunt construite SE bazate pe
reguli.

3
MERSUL LUCRĂRII

1.1 Crearea bazei de cunoștințe pentru sistemul expert

Codul program pentru baza de cunoștințe:


rule(1, "pizza", "Margarita", [1, 2]).
rule(2, "pizza", "Palermo", [1, 2, 4, 9]).
rule(3, "pizza", "Fagotta", [1, 3, 9]).
rule(4, "pizza", "Capricioasa", [5, 6, 11]).
rule(5, "pizza", "Tuna", [2, 8]).
rule(6, "pizza", "Diablo", [2, 7, 8, 13]).
rule(10, "pizza", "Pepperoni", [2, 13]).
rule(11, "pizza", "Suprem", [2, 5, 7, 12]).
rule(9, "pizza", "Rancho", [2, 3, 6, 11]).
rule(7, "pizza", "Primavera", [2, 10, 11]).
rule(8, "pizza", "Neapolitana", [2, 5, 8, 9, 11]).
rule(12, "pizza", "Ester", [2, 5, 11]).

cond(1, "pizza", "mozzarella").


cond(2, "pizza", "sos de pizza").
cond(3, "pizza", "piept de pui").
cond(4, "pizza", "pastrama").
cond(5, "pizza", "sunca").

4
cond(6, "pizza", "maioneza").
cond(7, "pizza", "saliame").
cond(8, "pizza", "olive").
cond(9, "pizza", "masline").
cond(10, "pizza", "spanac").
cond(11, "pizza", "ciuperci").
cond(12, "pizza", "tocana de porc").
cond(13, "pizza", "ardei iute").
cond(14, "pizza", "ton").

topic("pizza").

1.2 Mecanismul de inferență pentru Sistemul Expert

Figura 2 – Diagrama structurală a Sistemului Expert


Codul program:
:-dynamic answer/2.
 
expert(Topic):-
rule(K, Topic, Goal, QList),
ask(K, QList),
correct(QList),
!,
format("Rezultat: ~s - ~s.", [Topic, Goal]).
expert(Topic):-
format("Nu ajung date pentru: ~s.", [Topic]).
 
ask(_, [N | _]):-
answer(N, 0),
!,
fail.
ask(K, [N | QList]):-

5
answer(N, 1),
!,
ask(K, QList).
ask(K, [N | QList]):-
cond(N, X, Y),
format("Are ~s - ~s? (da/nu/?): > ", [X, Y]),
getAnswer(A),
!,
ask(A, K, [N | QList]).
ask(_, []).
 
ask(2, K, QList):- !,
explanation(K),
ask(K, QList).
 
ask(A, _, [N | _]):-
assert(answer(N, A)),
fail.
 
ask(1, K, [_ | QList]):-
ask(K, QList).
 
correct(QList):-
answer(N, 1),
not(member(N, QList)),
!,
fail;
succeed.
 
getAnswer(A):-
read(N),
matchInputToAnswer(N, A).
 
matchInputToAnswer(da, 1):-!.
matchInputToAnswer(_, 0).

delete_db:-
retractall(answer(_, _)).

run:-
delete_db,
topic(Topic),
expert(Topic),
!,
succeed.
 
succeed:-true.

6
1.3 Mecanismul de determinare a răspunsului
Sistemul Expert are o baza de cunoștințe și condiții pentru satisfacea anumitor reguli. Folosind
motorul de inferență se încearcă satisfacerea tuturor condițiilor pentru a demonstra o anumită regulă. Se
încearcă demonstrarea lor pe rînd, spre exemplu primul apel al predicatului expert extrage prima regulă din
baza de cunoștințe, aceasta fiind: rule(1, "pizza", "Margarita", [1, 2]).este lista de condiții
care trebuie să fie adevărate pentru ca regula să fie adevărată, deci se verifică dacă soluția căutată este
"Margarita". Verificarea condițiilor este încredințată predicatului ask, care interoghează utilizatorul dacă
condițiile sunt adevărate, în caz că una din condiții este falsă nu are rost să fie întrebate și alte condiții pentru
această regulă și se trece la următoarea.
Dacă a fost primit răspuns la toate condițiile pentru o anumită regulă se încearcă verificarea dacă toate
răspunsurile au fost da, aceasta este realizat în predicatul correct(QList), și se afișează răspunsul găsit.
În cazul cînd eșuează predicatul correct(QList) d se trece la următoare definiție a predicatului
care afișează răspunsul de eșec și anume: “Nu ajung date pentru: pizza.”.

7
CONCLUZII

În cadrul acestei lucrări de laborator am implementat un sistem expert în domeniul recunoașterii


dispotivelor mobile. Am căpătat experiență practică în aplicarea principiilor de funcționare a sistemelor de
intelegență artificială în limbajul pe programare Prolog.