Sunteți pe pagina 1din 6

Universitatea Tehnică a Moldovei

Facultatea Calculatoare Informatică şi Microelectronică


Departamentul Informatică şi Ingineria Sistemelor

Lucrare de laborator №2
La Sisteme Expert
Tema:Sisteme expert – recomandarea trupelor muzicale în baza
răspunsurilor utilizatorului

Chisinău 2020
Cuprins
1. Tema (universul problemei)..................................................................................................................3
2. Idea principală a temei (universul problemei)....................................................................................3
3.Scopul / Obiectivele LL..........................................................................................................................3
4.Formularea condiției / condițiilor taskurilor pentru soluționarea problemelor................................3
5.Codul programului și comentarii relevante în el..................................................................................3
6/7. Interogările posibile...........................................................................................................................5
Concluzie....................................................................................................................................................6
1. Tema (universul problemei)
Sisteme expert – recomandarea trupelor muzicale în baza răspunsurilor utilizatorului.

2. Idea principală a temei (universul problemei)


Elaborarea în limbajul Prolog a unui program care ar recomanda trupe muzicale,înregistrate baza
de cunoștințe,în baza răspunsurilor și preferințelor utilizatorului.

3.Scopul / Obiectivele LL
 Cercetarea specificului entităților necesare pentru elaborarea programului.
 Efectuarea bazei de cunoștințe.
 Elaborarea și testarea aplicației.
 Efectuarea prezentării și raportului.

4.Formularea condiției / condițiilor taskurilor pentru soluționarea


problemelor
I. Sistemul trebuie sa fie capabil să ofere recomadări în baza răspunsurilor uilizatorului.
II. Sistemul va fi bazat pe o bază de cunoștințe care va conține caracteristicile fiecărei
trupe,în formă de reguli:band(megadeth):-
music(vocal),vocals(male),genre(rock),sub_genre(heavy_metal),subsub_genre(thras
h),activity(active).
III. Sistemul va printa întrebările cu ajutorul predicatului dicontinuu menuask/3.
IV. Sistemul va memoriza răspunsurile folosind predicatul dynamic known/3.
V. Sistemul va verifica răspunsul utilizatorului folosind predicatul check_val,care verifică
prezența răspunsului în lista de variante de răspuns.
VI. În cazul unui răspuns invalid,sistemul va avertiza utilizatorului și va solicita repetarea
întroducirii răspunsului.

5.Codul programului și comentarii relevante în el


% Baza de cunoștințe a sistemului care este scrisă în formă de
reguli,cu maximum 6 fapte: music,vocals,genre,sub_genre,subsub_genre
și activity.
band(megadeth):- music(vocal),vocals(male),

genre(rock),sub_genre(heavy_metal),subsub_genre(thrash),activity(act
ive).
band(pantera):- music(vocal),vocals(male),

genre(rock),sub_genre(heavy_metal),subsub_genre(groove),activity(dis
banded).
band(dio):- music(vocal),vocals(male),
genre(rock),sub_genre(heavy_metal),activity(disbanded).
band(ewf):- music(vocal),vocals(male),
genre(pop),sub_genre(dance_pop),activity(active).
band(dethklok):-
music(vocal),vocals(male),genre(rock),sub_genre(heavy_metal),
subsub_genre(death_metal),activity(disbanded).
band(nightwish):- music(vocal),vocals(female),genre(rock),

sub_genre(heavy_metal),subsub_genre(power_metal),activity(active).
band(animals_as_leaders):-
music(instrumental),genre(rock),sub_genre(heavy_metal),
subsub_genre(progressive_metal),activity(active).

% Predicatul dinamic known,care reține în memorie răspunsurile


oferite de utilizator
:- dynamic(known/3).

% Predicatul discontinu menuask care va oferi întrebări


utilizatorului și o listă de răspunsuri posibile în conformitate cu
caracteristica carei aceaastă întrebare aparține
:- discontiguous menuask/3.

% Regulile ce conțin lista de răspunsuri posibile corespunzând


fiecărei caracteristi
music(X):- menuask(music,X,[vocal,instrumental]).
vocals(X):- menuask(vocals,X,[male,female]).
genre(X):- menuask(genre,X,[rock,pop]).
sub_genre(X):- menuask(sub_genre,X,[heavy_metal,dance_pop]).
subsub_genre(X):- menuask(subsub_genre,X,
[thrash,groove,death_metal,power_metal,progressive_metal]).
activity(X):- menuask(activity,X,[active,disbanded]).

% Memorizarea răspunsului de tip corect


menuask(Attr, Val, _) :- known(yes, Attr, Val), !.

% Memorizarea unui răspuns incorect


menuask(Attr, Val, _) :- known(_, Attr, Val), !, fail.

% Memorizarea faptului că o întrebare are deja un răspuns,prevenirea


unui ciclu de aceleași întrebări
menuask(Attr, Val, _) :- known(yes, Attr, V), V \== Val, !, fail.

% Funcția care printează întrebarea.Meniul printeaza întrebarea


precum și lista de răspunsuri posibile.După ce utilizatorul
răspunde,răspunsul este verificate de predicat check_val.În cazul în
care răspunsul este prezent în listă,meniul trece la următoarea
întrebare.În caz contrar,funcția printeaza un mesaj unde solicită o
introducere repetată,deoarece răspunsul nu este cunoscut.
menuask(Attr, Val, List) :-
write('What is the value for '),
write(Attr), write('? '), nl,
write(List), nl,
read(Ans),
check_val(Ans, Attr, Val, List),
asserta(known(yes, Attr, Ans)),
Ans == Val.
check_val(Ans, _, _, List) :- member(Ans, List), !.
check_val(Ans, Attr, Val, List) :-
write(Ans), write(' is not a known
answer, please try again.'), nl,
menuask(Attr, Val, List).

% Predicatul go care pornește programul și la sfârșit printează


recomandarea sistemului.
go :- band(Band), write('I will suggest you the following band(s):
'), write(Band), nl.

6/7. Interogările posibile


În figura 1 putem observa o interogare unde utilizatorul răspunde corect la întrebările sistemului
și primește o interogare.

Figura 1 : Interogare standard


În figura 2 putem observa un caz particular în care utilizatorul introduce un răspuns care nu este
prezent în lista de răspunsuri posibile,astfel programul solicitând reântroducerea unui nou
răspuns.

Figura 2 : Răspuns greșit

În figura 3 putem observa un caz în care utilizatorul răspunde corect la toate întrebările
sistemului dar nu primește o recomandare,asta dat fiind faptului că baza de cunoștințe nu conține
o recomandare care ar corespunde cerințelor utilizatorului.
Figura 3 : Lipsa unei recomandări

Concluzie
În această lucrare de laborator am creat un sistem expert care are scopul de a recomanda trupe
muzicale în baza răspunsurilor utilizatorului.Sistemul conține o bază de cunoștințe,unde fiecare
trupă are un set de caracteristici,numărul maxim a cărora este 6.Programul oferă întrebări
utilizatorului și le verifică corectitudinea,adică existența lor în listă.
În final,sistemul oferă o recomandare,în cazul în care,baza sa de cunoștințe conține o trupă care
ar avea caracteristicile solicitate de utilizator.
Mai jos,este prezentat un tabel care conține statistica aferentă a entităților prezente în sistemul
creat:
Nr. Denumirea entităților din prototip Cantitatea entităților
1 Fapte 0
2 Predicate și ordinul acestora 12
3 Predicatele cu o anumită aritate predicatelor 0
4 Relații dintre obiecte 0
5 Reguli despre obiecte 17
6 Relații dintre reguli despre obiecte care permit 0
deducerea unor fapte deja cunoscute
7 Scopuri despre obiecte 6
8 Scopuri despre relațiile dintre obiecte 0
9 Interogări adresate programului,comentată cu explicații 3ss

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