Sunteți pe pagina 1din 74

UNIVERSITATEA DE VEST VASILE GOLDI DIN ARAD

FACULTATEA DE TIINELE NATURII, INGINERIE I


INFORMATIC
MASTER: TEHNOLOGII PENTRU DEZVOLTARE WEB

PLATFORM WEB
EDUCAIONAL
DE
CONSTRUCIE A SISTEMELOR
EXPERT

NDRUMTOR TIINIFIC,

Prof. COCIUBA NICA


ABSOLVENT,

eredan Pavel
ARAD
2012

CUPRINS
PLATFORM WEB EDUCAIONAL
DE

CONSTRUCIE A SISTEMELOR EXPERT


Introducere..3
CAPITOLUL I. DESPRE SOCIETATEA CUNOATERII

.......4

1.1. Societatea cunoaterii.....................................................................4


1.2. Inteligena Artificial i Sisteme Expert ............5
1.3. Invarea pe tot parcursul vieii (LLL)...............................6
1.4. Creterea Exponential

.....7

1.5 Platforma de Fuzionare a Cunoaterii KFP............................................................8


CAPITOLUL AL II-LEA. LIMBAJUL PROLOG

.......10

2.1. Evoluia principalelor limbaje de programare ....................................10


2.2. Limbajul Prolog ..............................................................................11
2.3 Principalele caracteristici ale Prolog ului ..................................................11
2.4. Fundamentele Prolog ului (fapte, reguli) .........................................................12
2.5 Unificare i backtraking.........................................................................................19
CAPITOLUL AL III-LEA. CONSTRUCIA UNUI SISTEM EXPERT N LIMBAJUL
PROLOG ..............................................................................................................................28
3.1. Construcia unui sistem expert mic..................................28
3.2. Utilizarea Visual Prolog 5.2 Lansarea sistemului expert ...................................32
CAPITOLUL AL IV-LEA. INTRODUCERE N EXSYSCORVID ..............................33
CAPITOLUL AL V-LEA. CONSTRUCIA UNUI SISTEM EXPERT N EXSYS
CORVID ...............................................................................................................................49

CAPITOLUL AL VI-LEA. PLATFORM WEB EDUCAIONAL


WWW.KFP.RO PROIECTE EDUCAIONALE- DE CONSTRUCIE
A SISTEMELOR EXPERT.....67
Concluzii................................................................................................................................73
Bibliografie............................................................................................................................74
Anexe ....................................................................................................................................75

Introducere
n ultimul deceniu, tehnica computaional a luat un avnt deosebit i este influenat
foarte mult de progresele deosebite ale Internetului, ale tehnicii media, ale telefonului, avnd
un impact major n toate aspectele vieii economice i sociale. La fiecare jumtate de an apar
schimbri importante nct este imposibil de prevzut unde se va ajunge n viitor. n prezent,
se poate vorbi de o adevrat revoluie care are loc domeniul computerelor

i n

telecomunicaii.
Deja sunt prezente telefoanele inteligente cu conectare foarte puternic la Internet cu
posibiliti de computaie n calculatorul nor (CLOUD COMPUTING), cu camere foto i
video de nalt fidelitate, cu posibiliti de preluare emai-uri, de navigare pe net etc..
Practic tendina actual este de construcie a unor dispozitive foarte simple i uor
portabile, mannevrabile care s aibe facilitile calculatoarelor telefoanelor i televizoarelor
dar nu numai.....n domeniul video apar dispozitivele holografice care permit n idea expus
mai sus o interaciune prin IMERSIE i TELEPREZEN care poate merge foarte departe.
De altfel sunt deja cunoscute concerte realizate cu persoane care au trait cindva (
Elvis Presly i Celine Dion) sau cel care se pregatete acum (Queen's diamond jubilee) care
prevestesc vremuri n care realitatea virtual va fi prezent peste tot.
Nu numai echipamentele computeristice se schimb ntr-o direciue uneori
neprevzut dar i softul tinde tot mai mult s se apropie de procesarea limbajului natural de
posibilitatea de construcie a unor sisteme expert care s fie capabile s nmagazineze
experien uman complex i valoroas.
Proiectul de fa i propune s iniieze pe doritorii de ai construi un sistem expert
pornind de la bazele conceptuale prezentate ntr-un sistem expert didactic realizat n Prolog ca
apoi aceeai problematic s fie realizat ntr-o unealt profesional i anume n Corvid care
este un sistem expert de scriere de sisteme expert promovat de compania american EXSYS.
Lucrarea va prezenta gradual noiuni legate de Societatea Cunoaterii, de Inteligen
Artificiala, de necesitatea de a nva pe tot parcursul vieii, de cretere exponenial.
Proiectul propriu - zis va consta n trei pari:
-

Realizarea unui sistem expert n Prolog

Realizarea aceluiai sistem expert in Corvid

Realizarea pe Platforma de Fuzionare a Cunoaterii ( KFP ) n cadrul Proiectelor


educaionale a unei Platforme web educaionale de construcie a sitemelor expert.

CAPITOLUL I.
NOIUNI INTRODUCTIVE
1.1.

Societatea cunoaterii

Cultura i societatea cunoaterii Mihai Draganescu


As access to electronic information resources increased at the beginning of the 21st century, special
attention was extended from the information society to the knowledge society. An analysis by the Irish
government stated, "The capacity to manipulate, store and transmit large quantities of information
cheaply has increased at a staggering rate over recent years. The digitisation of information and the
associated pervasiveness of the Internet are facilitating a new intensity in the application of knowledge
to economic activity, to the extent that it has become the predominant factor in the creation of wealth.
As much as 70 to 80 percent of economic growth is now said to be due to new and better knowledge."

http://en.wikipedia.org/wiki/Society#Knowledge_society

Societatea Cunoaterii n care ne gsim i noi este caracterizat deci de fenomenul


creterii Inteligenei Artificiale implementat n computerele de Generaia V de calculatoare,
de apariie a unor Sisteme Expert profesionale care acoper domenii din ce n ce mai
complexe n care se nmagazineaz experiena planetar.

1.2.

Inteligen Artificial i Sisteme Expert .

O definiie a inteligenei nu putem da nc, doar o putem exemplifica prin enumerarea


unor caracteristici a acesteia . De exemplu despre cineva care se descurc uor in situaii
complexe limit spunem c este inteligent. Deasemenea cel care rezolv probleme pe care nu
le-a mai rezolvat cineva este inteligent. ofatul n condiii extreme este o activitate care cere
inteligen . Dac am putea da o definiie complet inteligenei asta ar nsemna c am pute-o
formaliza i reproduce. Deocamdata nu putem s implementm numai anumite mecanisme ale
inteligenei n maini.
Contiina este iar un aspect inteligent care deocamdata nu poate fi implementat cu
nivelul tehnologic atins pin acum n Inteligena Artificial. Putem spune c inteligena nu
este o caracteristic numai oamenilor dar i animalelor.
Proiectul generatiei a V de calculatoare i-a propus implementarea inteligenei n
maini care astzi nu mai computeaz ci infereaz adic sunt capabile s fac deducii logice
foarte proifunde. Au aprut de la mainriile - animalele inteligente Aibo pn la roboii
umanoizi ca Honda i Asimo care sunt capabili de a se ntreine i conversa perfect cu
oamenii a cror experien i deprinderi le-au ctigat.
Deci Testul lui Turing a fost trecut i putem spune ca aceste maini au un
comportament inteligent i uman, sociabil aa cum s-a realizat la M.I.T. experimentul cu
maina sociabila KISMET unde discuia ntre cercettorul Rich i robotul Kismit atinge
valene absolut umane de netgduit. Aa cum se vede n siteul :
http://www.ai.mit.edu/projects/sociable/baby-bits.html
Artificial intelligence (AI) is the intelligence of machines and the branch of computer science that
aims to create it. AI textbooks define the field as "the study and design of intelligent agents"

[1]

where

an intelligent agent is a system that perceives its environment and takes actions that maximize its
chances of success.

[2]

John McCarthy, who coined the term in 1955,

[3]

defines it as "the science and

engineering of making intelligent machines."

http://en.wikipedia.org/wiki/Artificial_intelligence

In artificial intelligence, an expert system is a computer system that emulates the decision-making
[1]

ability of a human expert. Expert systems are designed to solve complex problems by reasoning
about knowledge, like an expert, and not by following the procedure of a developer as is the case in
[2][3][4]
conventional programming.
The first expert systems were created in the 1970s and then
[5]
proliferated in the 1980s. Expert systems were among the first truly successful forms
[6][7][8][9][10][11]
of AI software.

Experiena celor de la EXSYS de a oferi un instrument care se ridic la nivelul de


sistem expert , de a scrie un sistem expert ne duce la afirmaia ca avem deja un sistem expert
de scriere de sisteme expert.
Deoarece acest produs este putin cunoscut l voi utiliza pentru a scrie un sistem expert
pe care l-am dezvoltat i n Prolog oferind astfel pe Platforma de Fuzionare a Cunoaterii
(www.kfp.ro) la seciunea Proiecte educaionale posibilitatea de a nva i exersa acest
instrument.
An expert system has a unique structure, different from traditional programs. It is divided into two
parts, one fixed, independent of the expert system: the inference engine, and one variable: the
knowledge base. To run an expert system, the engine reasons about the knowledge base like a
[12]
[13]
human. In the 80s a third part appeared: a dialog interface to communicate with users. This ability
[14][15]
to conduct a conversation with users was later called "conversational".

http://en.wikipedia.org/wiki/Expert_system
Limbajul Prolog este un limbaj de PROgramare LOGic. n acest limbaj s-au realizat
o serie de sisteme expert printre care i cel prezentat n Lucrarea mea de disertaie sistemul
expert cu determinarea animalelor dup caracteristici ale acestora , sistem cu un puternic
character didactic.
Prolog is a general purpose logic programming language associated with artificial
[1][2][3]
intelligence and computational linguistics.
Prolog has its roots in first-order logic, a formal logic, and unlike many other programming languages,
Prolog isdeclarative: the program logic is expressed in terms of relations, represented as facts
[4]
and rules. A computation is initiated by running a query over these relations.
The language was first conceived by a group around Alain Colmerauer in Marseille, France, in the
early 1970s and the first Prolog system was developed in 1972 by Colmerauer with Philippe
[5][6]
Roussel.
[7]

Prolog was one of the first logic programming languages, and remains among the most popular such
languages today, with many free and commercial implementations available. While initially aimed
at natural language processing, the language has since then stretched far into other areas
[8]
[9]
like theorem proving, expert systems, games, automated answering systems, ontologies and
sophisticated control systems. Modern Prolog environments support creating graphical user
interfaces, as well as administrative and networked applications.

http://en.wikipedia.org/wiki/Prolog

1.3.

nvarea pe tot parcursul vieii (LLL) .

Deasemenea avnd n vedere rapiditatea apariiei de cunotine noi, de tehnologii noi,


de deprinderi noi n manevrarea i manipularea unor aparate i unelte noi, apare necesitatea

updatrii continuie a cunoaterii i aptitudinilor, fenomen cunoscut la nivel planetar sub


denumirea : lifelong learning LLL
[1]

Lifelong learning, also known as LLL, is the "lifelong, voluntary, and self-motivated" pursuit of
knowledge for either personal or professional reasons. As such, it not only enhances social inclusion,
[2]
active citizenship and personal development, but also competitiveness and employability.
The term recognises that learning is not confined to childhood or the classroom, but takes place
throughout life and in a range of situations. During the last fifty years, constant scientific and
technological innovation and change has had a profound effect on learning needs and styles. Learning
can no longer be divided into a place and time to acquire knowledge (school) and a place and time to
[3]
apply the knowledge acquired (the workplace). Instead, learning can be seen as something that
takes place on an on-going basis from our daily interactions with others and with the world around us.

http://en.wikipedia.org/wiki/Lifelong_learning

1.4.

Creterea Exponenial .

Caracteristica cea mai important a Societii Cunoaterii este legat de fenomenul


creterii exponeniale . Pentru a inelege acest fenomen vom exemplifica cu urmtoarea
ntmplare petrecut nu de mult odat cu startarea unuia dintre cele mai mari proiecte ale
omenirii i anume Proiectul Genomului Uman.
Proiectul "Genomul uman" (PGU, engl. Human Genome Project) a fost lansat n toamna
anului 1990 cu scopul de a identifica prin secvenare succesiunea celor peste 3 miliarde de
perechi de baze azotate ce constituie genomul uman, precum i a identifica cele aproximativ
25000 de gene din genomul uman att din punct de vedere fizic, ct i funcional.
Proiectul a fost finalizat n 2003 prin publicarea secvenei genomului uman. Secvena
obinut este considerat ca un bun al ntregii umaniti i a fost depus n baza de
date Genbank a NCBI (U.S. National Center for Biotechnology Information) fiind liber
disponibil.

http://ro.wikipedia.org/wiki/Proiectul_%E2%80%9EGenomul_uman%E2%80%9D
Complexitatea extraordinara a proiectului face necesara participarea cercetatorilor din
domenii variate:biologie,informatica,chimie,matematica,fizica,inginerie aplicata,etc.
Una din noile metode de cercetare o constituie studiul comparat al genotipurilor.
Functiile genelor umane si a altor zone ale ADN-ului sunt deseori puse in evidenta prin
studiul comparat al secventelor corespunzatoare la alte specii.Pentru asemenea
comparatii,cercetatorii au obtinut secvente complete pentru speciile Escherichia coli ,
Saccharomyces cerevisiae si Caenorhabditis elegans .

http://www.e-scoala.ro/referate/biologie_genom.html
Fenomenul Creterii Exponeniale a dus la realizarea Proiectului Genomului Uman i
a bancii de date GenBank la posibilitatea de clonare a animalelor (oaia Dolly) i oamenilor.
Un exemplu clar a ce nseamna creterea exponenial voi prezenta n continuare prin
dezvoltarea tehnicii de calcul i a puterii de computaie a acestora. Astfel puterea de
computaie a calculatoarelor este astzi comparabil cu puterea unui creier de oarece iar la
nivelul anilor 2050 acestea vor ajunge la puterea de computaie a tururor creierelor umane aa
cum se vede i n graficul de mai joi.

Am pornit deja pe un drum al realitii augumentate spre descoperiri care ne vor


schimba n urmtorul interval de timp viaa. In acest sens sunt elocvente articolele de pe
siteul: http://www.descopera.ro/lumea-digitala/4944145-top-10-tehnologii-care-ne-vor-

schimba-viata

1.5.

Platforma de Fuzionare a Cunoaterii


Knowledge Fusion Platform

www.kfp.ro .

Platforma de Fuzionare a Cunoaterii este o iniiativ startat de ing.Cociuba Nica


legat de Societatea Cunoaterii iniiativ ce se dorete a se concretiza ntr-o Platform a
Cunoaterii n Euroregiunea DKMT, care s depoziteze cunoaterea din aceast zon, care s
fuzioneze ntr-un mod synergetic aceast cunoatere i care s ofere informaii i cunoatere.
Iniiativa s-a concretizat pn n prezent prin realizarea unor conferine legate de
Fuzzy Logic mpreun cu profesorul Lotfi Zadeh de la Berkley Univeristy Statele Unite.,o
somitate n domeniul Teoriei Sistemelor i a Inteligenei Artificiale .
8

n domeniul Renovrii i Restaurrii a organizat workshop-uri mpreun cu


Universitatea din Trento Italia cu prof. Caceagera i cu arh. Roberto Bresciani .
Deasemenea n domeniul GIS Solution conferine i startarea unui proiect european
legat de GIS n regiunea V Vest.
Etc...
----oooOOOOooo---In cadrul site-ului ww.kfp.ro alturi de o serie de activitti i de documente se gsete
i seciunea de Proiecte educaionale unde am creat pe aceast platform o posibilitate de
cunoatere a modului de construcie a Sistemelor Expert utiliznd Prologul i Corvidul.
n cele ce urmeaz voi face o prezentare a Limbajului Prolog i a Sistemului Expert de
scriere de sisteme expert Corvid.

Am colaborat cu echipa acestui site i doresc s pun la dispozie cunoaterea mea care
am acumulat-o legat de Inteligena Artificial, Sistemele Expert i modul de construcie a
acestor Sisteme Expert.
Fiind dascl la Liceul din Ineu a dori s introduc aceste cunotine elevilor mei care
s ia un contact mai rapid cu aceste instrumente de mare perspectiv.

CAPITOLUL AL II-LEA
INTRODUCERE N LIMBAJUL PROLOG
2.1.

Evoluia principalelor limbaje de programare .

Creatoarea primelor programe pentru calculatoare (1840) este Ada Augusta de


Lovelace.
Limbajul Assembler a aprut n 1947.
Istoria limbajelor de programare ncepe cu Fortran-ul n 1956.
Caracteristicile Fortran-ului sunt: calcule la nivel avansat, nlocuirea blocurilor de
instruciuni printr-o denumire (folosirea procedurilor, lucrul cu vectorii).
n paralel cu Fortran-ul a aprut limbajul Cobol ale crui caracteristici sunt: folosirea
intensiv a fiierelor (suport magnetic stabil sau optic n care se depun date; fiierul nu este un
obiect unitar; pot fi cu acces direct, secvenial etc.).
n anul 1959 a aprut limbajul Lisp List Processing (prelucrarea listelor). n cadrul
unei liste componentele nu sunt omogene. Lista poate fi liniar cu o serie de calcule, avea un
cap. Se efectuau operaii de concatenare i prelucrri simbolice.
n anul 1960 a aprut limbajul Algol60 (Algorithm Language), urma direct al
Fortran-ului. El aduce ca noutate folosirea recursivitii care implic folosirea stivei, de
exemplu calculul factorialului.
S-a ncercat n 1966 a se realiza o unificare a limbajelor Cobol i Fortran numit
Programming Language I (PLI), o caracteristic fiind universalitatea.
A aprut apoi ca i urma al lui Algol60 i ca printe a Pascal-ului Algol68.
Limbajul Pascal (1971) aduce ca nou programarea structurat (cele trei structuri logice
de baz, prin combinaia lor se obine rezolvarea multor tipuri de probleme). Programele
trebuie sa fie formate din module care sunt ierarhizate arborescent.
n paralel cu PLI a aprut un limbaj care nu s-a mai dezvoltat, continuare al lui
Algol60: Simula (aici apare noiunea de clas ca model abstract de obiecte, apare ideea de
eveniment).
Urmaul lui Simula a fost SMALL TALK, care aduce noutatea de programe orientate
pe obiecte (POO).
Ca descendent al lui Algol68 a aprut C-ul n anul 1976, care la fel ca i Pascalul
folosesc programarea structurat i apoi n 1984 a luat fiin C++ -ul care folosete POO.
n 1992 apare limbajul JAVA care aduce ca nou conceptul de portabilitate. A aprut
de asemenea i Word Wide Web care reprezint o parte a Internetului n care este recunoscut
protocolul http.
Ca i continuare a Pascal-ului este ADA (1978), dar i urma al lui Simula, folosesc
ideea de concurenialitate.
LISP a avut ca i urma pe COMMONLISP care permitea calculul simbolic (funciile
pot fi considerate ca valori).
n 1985 apare CLIPS, iar n 1991 apare FUZZY CLIPS care ne aduce ca noutatea
posibilitatea de a lucra cu mulimi vagi.

10

2.2.

Limbajul Prolog .

n 1976 a aprut PROLOG -ul, continuat cu ceea ce se numete sistem expert. Prologul lucreaz la nivel semantic (ncercarea de implementare n programele de calcul a
nelesurilor cunotinelor umane).
Una din principalele idei ale programrii logice este aceea c un algoritm este
constituit din dou elemente disjuncte: logic si control. Componenta logic corespunde
definiiei problemei ce trebuie soluionat, n timp ce componenta control stabilete cum poate
fi obinut soluia. Un programator trebuie s descrie numai componenta logic a unui
algoritm, lsnd controlul executrii sa fie exercitat de sistemul de programare logic utilizat.
Cu alte cuvinte, sarcina programatorului este specificarea problemei ce trebuie soluionat
Astfel limbajul logic poate fi conceput simultan ca limbaj de descriere, specificare formal a
problemei si ca un limbaj de programare a calculatoarelor.
Limbajul Prolog este doar un caz particular de abordare a programrii logice.
Limbajul Prolog ( PROgrammation en LOGique) a fost creat la Marsilia la nceputul
anilor
70,
inventatorii
fiind
Alain
Colmeraurer
si
Philippe
Roussel.
Fundamentele teoretice se gsesc n metoda demonstrrii automate dezvoltat ncepnd
cu 1965 dup metoda rezoluiei dat de Julian Robinson. Un rol important l-a avut si R.
Kowalski prin demonstrarea faptului c se poate programa folosind logica. n limbajul Prolog
se poate face orice ca i n alte limbaje de programare. ns Prolog-ul are avantaje distincte
precum i dezavantaje. Prelucrarea rapid a datelor numerice este un punct vulnerabil al lui.
Prolog-ul poate mnui numere, ns nu aa de eficient ca un limbaj special destinat acestui
lucru. Prolog-ul, ns, marcheaz cnd este vorba de manipularea simbolurilor. Ori
manipularea simbolurilor este inima a ceea ce a devenit astzi cunoscut sub numele de
Inteligen Artificial.

2.3.

Principalele caracteristici ale Prolog ului .

1.
Este
un
limbaj
de
programare
logic
centrat
pe
date.
Se deosebete de Pascal, C care sunt limbaje imperative, centrate pe proces. Paradigma
fundamental a programrii logice este cea de programare declarativ. Focusul programrii
logice este identificarea noiunii de calcul i noiunii de deducie. Mai exact, sistemele de
programare logica reduc executarea unui program la cutarea prin respingere a clauzelor
programului mpreuna cu negaia propoziiei ce exprim ntrebarea. Aici se urmeaz regula: o
respingere e o deducie de la contrariu. Se bazeaz pe deducia liniar folosind clauze Horn.
Se folosete pentru a exprima relaii intre obiecte si a obine informaii relativ la obiecte si
relaiile dintre ele.
2. Este un limbaj descriptiv. A scrie un program pentru calculator nseamn dou
lucruri:
<
CE
>:
specificarea
exact
a
rezultatelor
dorite;
< CUM >: proiectarea metodei prin care se obin aceste rezultate.
Un limbaj este descriptiv dac accentul cade pe primul aspect (CE), alegerea metodei fiind
lsat pe seama calculatorului. Un limbaj procedural este unul n care trebuie proiectat i
metoda de obinere a rezultatelor.
3. Este folosit n:
- programarea unor aplicaii n Inteligen Artificial;
- dezvoltarea sistemelor expert;
- procesarea limbajului natural (inclusiv traducere automat);
- robotic;
- teoria jocurilor;
11

- procesri de natur logic.


Un mediu de lucru care poate fi utilizat la Facultate l constituie Visual Prolog 5.2.
Fereastra de lucru VP5.2 conine: bara de titlu, meniul (File, Edit, ), bara de butoane, zona
de lucru.

2.4.

Fundamentele Prolog ului (fapte, reguli) .

Un program Prolog este o colecie de clauze. Acestea pot fi de dou tipuri: fapte sau
reguli.
2.4.1. Fapte Prolog
Un fapt precizeaz o proprietate a unui obiect sau exprim o relaie dintre mai multe
obiecte. De exemplu proprietatea florilor de a fi frumoase se poate exprima in Prolog prin
urmtorul fapt:
frumoase(flori).
iar preferina pe care o are Adi pentru Roxana se poate exprima prin:
place(adi,roxana).
Forma general prin care pot fi descrise faptele este:
relatie(obiect_1,obiect_2,...,obiect_n).
unde 'relatie' reprezint un nume pentru relaia dintre obiectele 'obiect_1,...,obiect_n'.
Programatorul este cel care stabilete numele relaiei, precum si semnificaia ei. Astfel faptul
ca Adi o place pe Roxana se poate exprima i prin place(roxana,adi).
Observaie: faptele introduse n program sunt considerate a fi adevrate, adic
informaia pe care o furnizeaz este cunoscut de sistem, fr ca acesta s verifice dac este o
relaie real.
De exemplu, faptul verde(zapada). este corect din punct de vedere sintactic, dar nu
exprima o proprietate reala a zpezii.
Numele pentru relaii i obiecte trebuie s satisfac urmtoarele reguli:
a) numele de relaie trebuie s nceap cu o liter urmat de orice combinaie de litere cifre
sau _. Este recomandat ca primul simbol s fie liter mic, iar numele s fie ales astfel nct s
sugereze relaia reprezentat;
b) numele de obiecte trebuie sa nceap cu liter mic, urmat de oricte caractere.
Colecia de fapte se mai numete baz de date (database).
Exemple:
Pentru
reprezentarea
proprietilor
Iarba este verde.
Ioana este studenta.
Dan are maina.
Ionu este fiul lui Dan si al Mariei.
se pot declara urmtoarele fapte:
verde(iarba).
student(ioana).

12

relaiilor

de

mai

jos

are(dan,masina).
fiu(ionut,dan,maria).
2.4.2 Reguli Prolog
O regul Prolog exprim o relaie de dependen ntre fapte i permite obinerea unor
informaii noi pe baza celor deja cunoscute.
Forma
general
prin
care
poate
fi
descris
o
regul
este:
Capul_regulii if Corpul_regulii
sau
relatie(obiect,obiect,...,obiect) if
relatie(obiect,obiect,...,obiect) and
....
relatie(obiect,obiect,...,obiect).
semnificaia fiind c dac toate relaiile din corpul regulii sunt adevarate atunci este
adevarata si relaia din capul regulii.
De exemplu cunoscnd c Maria le place pe Elena i pe Ioana, iar lui Dan i place tot
ce-i place i Mariei, atunci putem scrie faptele:
place(maria,elena).
place(maria,ioana).
i urmtoarea regula:
place(dan,Cineva) if place(maria,Cineva).
n corpul regulii putem avea i relaii legate prin disjuncie (or) cu semnificaia ca
relaia din capul regulii este adevarat dac este adevarat una din relaiile din corpul regulii.
De exemplu fraza: 'Lui Dan i plac lucrurile scumpe sau i place tot ce-i place Mariei'
se poate exprima prin:
place(dan,Ceva) if scump(Ceva) or place(maria,Ceva).
Regula de mai sus se mai poate scrie i astfel:
place(dan,Ceva) if scump(Ceva).
place(dan,Ceva) if place(maria,Ceva).
Observaie:
Urmatoarele simboluri sunt echivalente:
if :and ,
or ;
2.4.3. Variabile, variabile anonime.
n VP numele de variabile trebuie s nceap cu majuscul sau _, urmate de oricte
litere, cifre sau _. De exemplu: Cineva, PERSOANA, Un_om, X.
O variabil care nu are valoare se numete liber; valoarea o poate primi prin
unificare, devenind variabil legat (ATENIE: variabilele nu pot fi folosite pentru stocarea
informaiei!).
Variabila anomim (reprezentata prin _) se folosete atunci cnd valoarea la care se
leag nu este folosit.
2.4.4. Constante

13

n VP sunt constante numele de obiecte si numerele (ntregi sau reale). Exemplu:


ioana, logan, 17, 68.5.
2.4.5. Scopuri
n limbaj natural, ntrebm:
i place lui Dan cafeaua?
n sintaxa Prolog, ntrebm Prolog-ul:
place(dan,cafeaua).
Dac vom da acest scop Prolog-ului spre evalulare, el va rspunde yes sau no, depinde
de regulile i faptele definite.
2.4.6. Punerea regulilor, faptelor i scopurilor mpreun
S presupunem c avem urmtoarele fapte i reguli:
O main rapid nseamn distracie.
O main mare este frumoas.
O main mic este practic.
Gigi iubete o main dac aceasta nseamn distracie.
n timp ce citeti aceste fapte, poi deduce c lui Gigi i place o main rapid. n
aproape acelai fel Prolog-ul va ajunge la aceai concluzie. Dac nici un fapt nu este dat
despre o main rapid, atunci nu vom putea logic deduce ce fel de main iubete Gigi. Vei
putea ghici despre ce fel de main poate fi vorba, dar Prolog-ul tie doar ce i spui; Prolog-ul
nu ghicete.
Un program scris n Prolog are mai multe seciuni:
Seciunea de clauze (the clauses section) unde se pun toate faptele i regulile
programului. Clauzele pentru un predicat dat trebuie plasate mpreun n
seciunea de clauze. O secven de clauze care definesc un predicat poart
numele de procedur. n ncercarea de satisfacere a scopului VP va ncepe cu
prima clauz scris n seciunea clauses uitndu-se apoi la fiecare fapt i
regul din program cutnd o potrivire (match). Odat ce VP-ul merge n jos
n seciunea de clauze, el plaseaz pointeri interni lng fiecare clauz care se
potrivete cu subgoal-ul curent. Dac aceast clauz nu face parte dintr-o cale
logic care s conduc la o soluie, atunci VP-ul se ntoarce la pointer-ul
poziionat i caut o alt potrivire (match). Acest procedeu poart numele de
backtracking.
Seciunea de predicate (the predicates section) . Dac vom defini un predicat
personal n seciunea de clauze, atunci trebuie obligatoriu declarat n seciunea
de predicate, altfel VP nu va tii despre ce este vorba. Cnd se declar un
predicat i se spune VP-ului crui domeniu i aparin argumentele unui
predicat. Seciunea de predicate este doar o nlnuire a numelor predicatelor
mpreun cu lista de argumente de diferite tipuri ale acestora. Numele unui
predicat trebuie s nceap cu o liter, urmat de o secven de litere, cifre sau
underscore -uri (_). Numele de predicate nu pot depi 250 de caractere.
S dm cteva exemple de nume de predicate (corecte i respectiv
incorecte legal and illegal predicate names):

14

Legal Predicate Names

Illegal Predicate Names

fact

[fact]

is_a

*is_a*

has_a

has/a

patternCheckList

pattern-Check-List

choose_Menu_Item

choose Menu Item

predicateName

predicate<Name>

first_in_10

>first_in_10

Argumentele pedicatelor trebuie s aparin unui domeniu predefinit al


VP-ului. Un domeniu poate fi un domeniu standard , sau poate fi unul care
dumneavoastr l declarai n seciunea de domenii (domains section).
Exemplu:
domains
nume = symbol
numar = integer
predicates
predicatul_meu(nume,numr)

Seciunea de domenii (the domains section) ne permite s dm nume


distincte la diferite tipuri de date.
Un alt exemplu sugestiv:
domains
nume, sex = symbol
varsta = integer
predicates
persoan(nume,vrst,sex)

Seciunea de scopuri (the goal section) . n esen secinea aceasta este la fel
ca i corpul unei reguli, este pur i simplu o list de subgoals. Exist dou
diferene ntre goal section i corpul unei reguli:
- cuvntul cheie goal nu este urmat de :- VP-ul execut automat scopul (the goal) cnd programul ruleaz.
Apoi VP-ul ncearc satisfacerea scopului. Dac subscopurile din
seciunea de scopuri sunt toate satisfcute atunci programul se ncheie cu
succes, altfel dac cel puin unul din subscopuri nu este satisfcut atunci
programul eueaz.
Iat cum ar arta aadar un program n VP:

15

DOMAINS
/* ...
domain declarations
... */
PREDICATES
/* ...
predicate declarations
... */
CLAUSES
/* ...
clauses (rules and facts)
... */
GOAL
/* ...
subgoal_1,
subgoal_2,
etc. */

S considerm un exemplu de implementare a unei probleme n VP5.2:


predicates
likes(symbol,symbol) - nondeterm (i,i)
clauses
likes(ellen,tennis).
likes(john,football).
likes(tom,baseball).
likes(eric,swimming).
likes(mark,tennis).
likes(bill,Activity):likes(tom, Activity).
goal
likes(bill,baseball).
Ultima linie din seciunea de clauses este o regul:
likes(bill,Activity):-likes(tom,Activity).
Aceast regul se traduce n limbaj natural astfel:
Lui Bill i place o activitate daca lui Tom i place acea activitate.
n aceast regul, capul este: likes(bill,Activity) i corpul este: likes(tom,Activity).
Observai c nu exist nici un fapt n acest exemplu care s spun c Bill iubete baseball-ul.
Pentru ca Prolog-ul s descpore dac lui Bill i place baseball-ul, poi da scopul:
likes(bill,baseball).
Sistemul va rspunde n fereastra de dialog la rularea programului de mai sus: yes.
Trebuie combinat regula:
likes(bill,Activity):-likes(tom,Activity).
cu faptul:
likes(tom,baseball).
pentru a decide c:
likes(bill,baseball).
ncercai de asemenea scopul:
16

likes(bill,tennis).
Sistemul va rspunde: no.
2.4.7. Exemple
Se propun urmtoarele exemple pentru a fi rulate i a se comenta rezultatul obinut. De
asemenea s se realizeze o traducere n limbaj natural al lor.
Exemplul 1: Preferine
predicates
place(symbol,symbol) % primul l place pe al doilea
clauses
place(dorel,programare).
place(adi,fotbal).
place(nico,not).
place(cosmina,baschet).
place(ovidiu,handbal).
goal
place(cosmina,baschet).
Exemplul 2: Cumprare main
predicates
can_buy(symbol,symbol) - nondeterm (o,o)
person(symbol) - nondeterm (o)
car(symbol) - nondeterm (o)
likes(symbol,symbol) - nondeterm (i,i)
for_sale(symbol) - nondeterm (i)
clauses
can_buy(X,Y):person(X),
car(Y),
likes(X,Y),
for_sale(Y).
person(kelly).
person(judy).
person(ellen).
person(mark).
car(lemon).
car(hot_rod).
likes(kelly, hot_rod).
likes(judy, pizza).
likes(ellen, tennis).
likes(mark, tennis).

17

for_sale(pizza).
for_sale(lemon).
for_sale(hot_rod).
goal
can_buy(Who,What).
Exemplul 3: Legarea variabilelor.
predicates
likes(symbol,symbol) - nondeterm (o,i), nondeterm (i,i)
clauses
likes(ellen,reading).
likes(john,computers).
likes(john,badminton).
likes(leonard,badminton).
likes(eric,swimming).
likes(eric,reading).
goal
likes(Person,reading),
likes(Person,swimming).
Exemplul 4: Variabile anonime.
predicates
male(symbol) - nondeterm (o)
female(symbol) - nondeterm (o)
parent(symbol,symbol) - nondeterm (o,o)
clauses
male(bill).
male(joe).
female(sue).
female(tammy).
parent(bill,joe).
parent(sue,joe).
parent(joe,tammy).
goal
parent(Parent,_).
2.4.8 Probleme propuse
1. Se dau urmtoarele predicate:
tata(X,Y) % X este tata lui Y
18

mama(X,Y) % X este mama lui Y


masc(X) % X este de sex masculin
fem(X) % X este de sex feminin
Sa se scrie reguli Prolog pentru urmtoarele relaii:
parinte(X,Y) % X este un printe al lui Y
este_mama(X) % X este mam
este_tata(X) % X este tat
este_fiu(X)
% X este fiu
sora(X,Y)
% X este sora lui Y
bunic(X,Y)
% X este bunicul lui Y
matusa(X,Y)
% X este mtua lui Y
2. Explicai funcionarea urmtorului program:
predicates
car(symbol,long,integer,symbol,long) - nondeterm (o,o,o,o,i)
truck(symbol,long,integer,symbol,long) - nondeterm (o,o,o,o,i)
vehicle(symbol,long,integer,symbol,long) - nondeterm (o,o,o,o,i)
clauses
car(chrysler,130000,3,red,12000).
car(ford,90000,4,gray,25000).
car(datsun,8000,1,red,30000).
truck(ford,80000,6,blue,8000).
truck(datsun,50000,5,orange,20000).
truck(toyota,25000,2,black,25000).
vehicle(Make,Odometer,Age,Color,Price):car(Make,Odometer,Age,Color,Price);
truck(Make,Odometer,Age,Color,Price).
goal
car(Make,Odometer,Years_on_road,Body,25000).

2.5. Unificarea i backtracking-ul


2.5.1. Unificarea
Unificarea este procesul de 'potrivire' a doua predicate prin asignarea de valori unor
variabile astfel ncat cele doua predicate s devin identice.
Acest proces are 3 etape:
- compararea numelor (identice/nu);
- compararea aritilor (identice/nu);
- asignarea de valori pentru variabile libere (legarea variabilelor libere);

19

Exist o list de variabile libere (care conine iniial variabila anonim _) i o list a
varibilelor legate care este iniial vid.
Caracteristicile principale ale unificrii n Prolog:
a) Cnd Prolog-ul ncearc s satisfac un scop, caut o potrivire ncepnd cu prima clauz a
programului.
b) Cnd se face un nou apel, cutarea unei potriviri ncepe ntotdeauna de la nceputul
programului.
c) Cnd un apel a gsit o potrivire, spunem c a reuit i se va ncerca satisfacerea urmtorului
subscop.
d) Dac o variabil se leag la o valoare ntr-o clauz, singurul mod n care se poate dezlega
este prin backtracking.
S considerm urmtorul exemplu:
DOMAINS

title,author = symbol
pages
= unsigned

PREDICATES
book(title, pages)
nondeterm written_by(author, title)
nondeterm long_novel(title)
CLAUSES
written_by(fleming, "DR NO").
written_by(melville, "MOBY DICK").
book("MOBY DICK", 250).
book("DR NO", 310).
long_novel(Title):written_by(_, Title),
book(Title, Length),
Length > 300.
S presupunem c am da urmtorul scop: written_by(X,Y).
Cnd VP-ul va ncerca satisfacerea scopului written_by(X,Y). , trebuie s testeze
fiecare clauz written_by din program pentru o eventual potrivire (match). Va ncerca
potrivirea argumentelor X i Y cu argumentele gsite n fiecare clauz written_by din
program. Acest lucru se va face ncepnd cu prima clauz din program, continund pn la
ultima (from top to bottom of the program). Cnd va gsi o clauz care se potrivete cu
scopul, d valori variabilelor libere (aceste devenind legate astfel), astfel nct clauza i scopul
devin identice; scopul se spune c s-a unificat cu aceast clauz. Aceast operaie de potrivire
(match) se numete unificare (unification).
Atta timp ct X i Y sunt variabile libere n scop, i o variabil liber poate fi
unificat cu oricare alt argument (chiar cu o alt variabil liber), apelul (scopul) poate fi
unificat cu prima clauz written_by din program, aa cum se arat aici:
written_by( X , Y ).
|
|
written_by(fleming, "DR NO").
Prolog-ul face o potrivire, X se va lega de fleming, i Y de DR.NO . n acest
punct VP-ul va afia:

20

X=fleming, Y=DR.NO
Atta timp ct VP-ul va cuta toate soluiile, cnd vei folosi un scop extern, scopul
este de asemenea unificat cu cea de-a doua clauz written_by:
written_by(melville,"MOBY DICK").
i VP-ul va afia cea de-a doua soluie:
X=melville, Y=MOBY DICK
2 Solutions.
Dac, n schimb, da-i Prolog-ului urmtorul scop:
written_by(X, "MOBY DICK").
Visual Prolog-ul va gsi o potrivire cu prima clauz written_by:
written_by( X ,"MOBY DICK").
|
|
written_by(fleming,"DR NO").
De ndat ce "MOBY DICK" i ,"DR NO" nu se potrivesc, ncercarea de unificare
eueaz. Astfel VP-ul va ncerca urmtoarea clauz din program:
written_by(melville, "MOBY DICK").
Aici reuete unificarea, X devenind legat de melville.
S vedem cum VP-ul va executa urmtorul scop:
long_novel(X).
Cnd VP-ul ncearc s satisfac un scop, cerceteaz dac sau nu apelul se
potrivete cu un fapt sau cu capul unei reguli. n acest caz, potrivirea este cu:
long_novel(Title)
VP-ul se uit la clauza pentru long_novel , ncercnd s ncheie potrivirea unificnd
argumentele. Atta timp ct X nu este legat n scop, variabila liber X poate fi unificat cu
orice alt argument. Title este de asemenea liber n capul clauzei long_novel. Scopul potrivete
capul regulei i unificarea este fcut. VP-ul va ncerca acum satisfacerea subscopurilor
regulei.
long_novel(Title):written_by(_, Title),
book(Title, Length),
Length>300.
n ncercarea de satisfacere a corpului regulei, VP-ul va apela primul subscop din
corpul regulei: written_by(_, Title). Fi-i ateni c, atta timp ct autorul crii nu conteaz,
variabila anonim (_) va aprea n poziia argumentului author. Apelul written_by(_, Title).
devine subscopul curent, i Prolog-ul caut o soluie la acest apel.
VP-ul caut o potrivire pentru acest subscop de la nceputul programului pn la
sfritul acestuia. n aceast ncercare, realizeaz unificarea cu primul fapt pentru written_by
dup cum urmeaz:
written_by( _ ,
Title),
|
|
written_by(fleming,"DR NO").
Variabila Title se va lega de "DR NO" i urmtorul subscop, book(Title, Length) ,
este apelat cu aceast legare.
VP-ul ncepe acum urmtoarea cutare, ncercnd s gseasc o potrivire cu apelul
pentru book. De ndat ce Title este legat de "DR NO", apelul actual reprezint book("DR
NO", Length). Din nou cutarea ncepe de la captul programului. Observai c prima
21

ncercare de potrivire cu clauza book("MOBY DICK", 250) va eua, i VP-ul va avansa la a


doua clauz book n cutarea de potrivire. Aici, titlul crii ntlnete subscopul i VP-ul leag
variabila Length de valoarea 310.
Cea de-a treia clauz din corpul regulei long_novel devine acum subscopul curent:
Length > 300.
VP-ul face comparaia i ncepe; 310 este mai mare dect 300. n acest punct, toate
subscopurile din corpul regulii au reuit i astfel apelul long_novel(X) a reuit. De ndat ce
variabila X din apel a fost unificat cu variabila Title din regul, valoarea de care Title este
legat cnd regula reuete este returnat la apel i unificat cu variabila X. Title are valoarea
"DR NO", cnd regula reuete, astfel Visual Prolog ul va da la ieire:
X=DR.NO
1 Solution.

2.5.2. Backtracking-ul
Backtracking-ul este mecanismul prin care Prolog-ul caut (sistematic) soluia
printre faptele i regulile din program.
Principiile de baza ale backtrackingului sunt:
a) Subscopurile trebuie satisfcute n ordine.
b) Clauzele sunt testate n ordinea n care apar n program.
c) Cnd un subscop se unific cu capul unei reguli, corpul ei se va adauga la mulimea de
subscopuri care trebuiesc satisfcute.
d) Un scop este satisfcut atunci cnd sunt satisfcute toate subscopurile sale.
Observaie: al treilea mecanism care este logic este o regul de raionament: rezoluia.
Odat ce VP-ul ncepe cutarea unei soluii pentru o problem (goal), s-ar putea s
trebuie o decizie ntre 2 cazuri posibile. Astfel, va pune un pointer (semn - marker) i va
ncerca satisfacerea primului subscop. Dac acest subscop eueaz, VP-ul se va ntoarce la
acel pointer i va ncerca satifacerea urmtorului subscop.
S considerm urmtorul exemplu:
predicates
nondeterm likes(symbol,symbol)
tastes(symbol,symbol)
nondeterm food(symbol)
clauses
likes(bill,X):food(X),
tastes(X,good).
tastes(pizza,good).
tastes(brussels_sprouts,bad).
food(brussels_sprouts).
food(pizza).

22

Acest mic program este alctuit din dou seturi de fapte i o regul. Regula,
reprezentat de relaia likes , pur i simplu ne spune c Bill iubete mncrile gustoase.
Pentru a vedea cum funcioneaz backtracking-ul, s-i dm Prolog-ului urmtorul
scop pentru a-l rezolva:
likes(bill,What).
Cnd Prolog-ul ncepe ncercarea de satisfacere a unui scop, pornete de la nceputul
programului n cutarea unei potriviri.
n acest caz va ncepe cutarea unei soluii uitndu-se de la nceputul programului
pentru potrivire (match) a subscopului likes(bill,What).
Gsete o potrivire cu prima clauz a programului, i variabila What se va lega de
variabila X. Potrivirea cu capul reguli face ca Prolog-ul s ncerce satisfacerea acestei reguli.
n acest timp realizeaz mutarea n corpul reguli i cheam primul subscop ntlnit aici:
food(X).
Cnd un nou apel este realizat, o cutare de potrivire pentru acest apel ncepe de
asemenea de la captul programului.
n ncercarea de satifacere a acestui prim subscop, VP-ul pornete de la nceputul
programului, cutnd o potrivire (match) cu orice fapt sau cap al unei reguli, parcurgnd
programul n jos.
Gsete o potrivire cu apelul la primul fapt (fact) reprezentnd relaia food. Aici
variabila X este legat de valoarea brussels_sprouts . De ndat ce exist posibilitatea a mai
mult de un rspuns la apelul (call) food(X), VP-ul poziioneaz un backtracking point lng
faptul food(brussels_sprouts). Acest punct va indica Prologului de unde s nceap cutarea
pentru o alt eventual potrivire a lui food(X).
Cnd un apel a gsit o potrivire cu succes, apelul se spune c a reuit, i urmtorul
subscop poate fi ncercat.
Cu X legat de brussels_sprouts, urmtorul apel fcut este:
tastes(brussels_sprouts,good).
i VP-ul ncepe cutarea de ncercare de satisfacere a acestui apel, din nou pornind
de la nceputul programului. De ndat ce nici o clauz nu se potrivete, apelul eueaz i VPul intr n mecanismul de backtracking. Cnd backtracking-ul pornete, Prolog-ul se ntoarce
la ultimul backtracking point poziionat. n acest caz Prolog-ul se ntoarce la faptul:
food(brussels_sprouts).
Odat ce o variabil a fost legat ntr-o clauz, singura modalitate de a o elibera este
prin backtracking.
Cnd Prolog-ul se ntoarce la punctul de backtracking (backtracking point),
elibereaz toate variabilele legate dup poziionarea acestui punct, i ncearc gsirea unei alte
soluii pentru apelul iniial.
Apelul a fost food(X) , aa c variabila X se elibereaz de valoarea brussels_sprouts.
Prolog-ul ncearc s rezolve din nou acest apel, ncepnd de la locul de unde a renunat.
Gsete o potrivire cu faptul food(pizza) i se rentoarce, de aceast dat cu variabila X legat
de valoarea pizza.

23

Prolog-ul se mut acum la urmtorul subscop n regul, cu noua valoare a variabilei


legate. Un nou apel este fcut, tastes(pizza,good). , i cutarea ncepe de la captul
programului. De aceeast dat o potrivire este gsit i scopul a reuit cu succes.
Odat ce variabila What din scop este unificat cu variabila X din regula likes , i
variabila X este legat de valoarea pizza , variabila What este acum legat de valoarea pizza i
VP-ul ne d urmtoarea soluie:
What = pizza
1 solution.
2.5.3. Controlul soluiilor
Sistemul Prolog intr automat ntr-un proces de backtraking dac acest lucru este
necesar pentru satisfacerea unui scop. Acest comportament poate fi n unele situaii deosebit
de util, dar poate deveni foarte ineficient n alte situaii. Pentru a controla cautarea soluiilor,
avem la dispoziie 3 predicate: fail, not, cut.
Predicatul fail eueaza ntotdeauna i are ca efect forarea backtracking-ului. Se
folosete atunci cnd se dorete gsirea tuturor soluiilor. (Obs: orice alt predicat plasat ntr-o
conjuncie dup fail nu va fi niciodata evaluat!).
Predicatul not reuete atunci cnd subscopul nu poate fi dovedit. Nu putem avea
variabile libere ntr-un subscop negat. Putem n schimb folosi variabile anonime.
Predicatul cut reuete ntotdeauna (ntoarce ntotdeauna TRUE) i are ca efect
prevenirea backtrackingului. Odat trecut peste un cut, nu se mai poate reveni la punctele de
backtracking dinaintea lui (i deci nici la alte definiii ale predicatului ce-l contine).
Efecte secundare: nltur toate punctele de backtracking cuprinse ntre clauza
printe (cea care are ! n corpul ei) i pn n momentul n care apare !.
2.5.4. Exemple
2.5.4.1. Cri i autori
domains
titlu, autor = symbol
nr_pagini = integer
predicates
carte(titlu, nr_pagini)
scrisa_de(autor, titlu)
roman_fluviu(titlu)

% titlul si numrul de pagini


% autorul si titlul unei cari
% romane foarte mari

clauses
scrisa_de(sadoveanu, "Fratii Jderi"). % 1
scrisa_de(melville, "Moby Dick"). % 2
carte("Moby Dick", 250).
carte("Fratii Jderi", 1300).

%3
%4

24

roman_fluviu(Titlu) :scrisa_de(_, Titlu),


carte(Titlu, Nr_pag),
Nr_pag > 1000.

%5

2.5.4.2. Mncruri preferate


predicates
place(symbol,symbol) % primului i place al doilea
gust(symbol,symbol) % gustul pe care l are primul
mancare(symbol)
% este de mncare
clauses
place(dan, X) :- % 1
mancare(X),
gust(X, bun).
gust(pizza, bun). % 2
gust(conopida, rau). % 3
mancare(conopida). % 4
mancare(pizza). % 5
*Observaie: Seciunea de goal se lasa la latitudinea studentului n a o completa. De
pild, pentru exemplul 3.4.2 se poate da ca scop place(dan,pizza). Ce soluie va afia Prologul? Bineneles,
yes
1 Solution
2.5.4.3. Juctori.
domains
copil = symbol
varsta = integer
predicates
jucator(copil, varsta)
joaca(copil,copil)
clauses
jucator(gheorghe, 9). % 1
jucator(petru, 10).
%2
jucator(maria, 9). % 3
jucator(sorina, 9).
%4
joaca(Pers1,Pers2):jucator(Pers1,9),
jucator(Pers2,9),
Pers1 <> Pers2. % 5

25

2.5.4.4. Folosirea predicatului fail. Program cu afiarea tuturor prinilor.


predicates
masc(symbol)
fem(symbol)
parinte(symbol, symbol) % primul este printe pentru al doilea
afisare
% predicat pentru afiarea prinilor
clauses
masc(dorel).
masc(adi).
fem(nicoleta).
fem(cristina).
parinte(dorel, adi).
parinte(nicoleta, adi).
parinte(adi, cristina).
afisare :- parinte(Parinte,Copil),
write(Parinte," este parinte pentru ",Copil),nl,
fail.
afisare.
goal
makewindow(1,7,7,"Parinti si copii",2,10,15,60),
afisare.
2.5.4.5. Folosirea predicatului not.
predicates
likes_shopping(symbol)
has_credit_card(symbol, symbol)
bottomed_out(symbol, symbol)
clauses
likes_shopping(Who) :has_credit_card(Who, Card),
not (bottomed_out(Who, Card) ) ,
write(Who, " can shop with the ",Card, " credit card.\n").
has_credit_card(chris, visa).
has_credit_card(chris, diners).
has_credit_card(joe, shell).
has_credit_card(sam, mastercard).
has_credit_card(sam, citibank).
bottomed_out(chris, diners).
26

bottomed_out(sam, mastercard).
bottomed_out(chris, visa).
2.5.4.6. Probleme propuse:
1. (Enigma politista)
S se scrie un program Prolog pentru rezolvarea urmtoarei enigme politiste:
Jean a fost omort mari. Singurii suspeci sunt Luc, Paul, Alain, Bernard si Louis. Se tie c:
- asasinul este cineva care dorete s-l omoare pe Jean, are arm, i n-are un alibi valabil
pentru marti;
- un alibi furnizat de o persoana dubioas nu este valabil;
- cineva poate dori s-l omoare pe Jean dac are acest interes sau dac dorete s se rzbune;
- cineva are interesul s-l omoare pe Jean dac i motenete averea, i datoreaz bani sau Jean
l-a surprins comind o crim.
Ancheta a stabilit urmtoarele:
- Luc are un alibi furnizat de Bernard pentru mari;
- Paul are un alibi furnizat de Bernard pentru mari;
- Louis are un alibi furnizat de Luc pentru mari;
- Alain are un alibi furnizat de Luc pentru joi;
- Alain este o persoan dubioas;
- Paul vrea s se rzbune pe Jean;
- Luc vrea s se rzbune pe Jean;
- Bernard este motenitorul lui Jean;
- Jean este motenitorul lui Louis;
- Louis i datoreaz bani lui Jean;
- Luc i datoreaz bani lui Jean;
- Jean l-a vzut pe Alain comind o crim;
- Luc are o arm;
- Louis are o arm;
- Alain are o arm.
ntrebare: Cine este asasinul?
2. Fie urmatoarea baz de cunotine Prolog (mulimea faptelor i regulilor unui program
Prolog formeaz baza de cunotine Prolog):
%1
frumoasa(ioana).
%2
bun(adi).
%3
cunoaste(adi, maria).
%4
cunoaste(adi,ioana).
%5
iubeste(bogdan, maria).
%6
iubeste(X, Y) :bun(X),
cunoaste(X, Y),
frumoasa(Y).
ncercai implementarea n Prolog a acestei baze de date i explicai apoi
funcionarea mecanismelor de unificare i backtracking.

27

CAPITOLUL AL III-LEA
CONSTRUCIA UNUI SISTEM EXPERT N LIMBAJUL
PROLOG
3.1. Construirea unui sistem expert mic.
n acest exemplu, v voi arta cum s se construiasc un mic expert sistem, cu apte
animale. Sistemul expert va pronostica animalul n funcie de ntrebrile pe care ni le pune
sistemul i la care raspundem noi, ntrebri care fac apoi deduceri logice din rspunsurile date.
Acest exemplu demonstreaz algoritmul de backtraking de potrivire (maching) - cu fapte - i
cum s utilizeze n mod eficient, negatia - nu.
Cele 7 animale cu caracteristicile lor sunt date in Anexa 1
Schema logica este dat in Anexa 2
Un dialog utilizator tipic cu acest sistem expert ar putea fi:
has it hair?
yes
does it eat meat?
yes
has it a fawn color?
yes
has it dark spots?
Yes
Animalul tau poate fi un ghepard!

Visual Prolog are capacitatea de a verifica faptele i regulile i va oferi programul cu


capacitile de gndire, de inferare ca la un sistem expert.
Primul pas este de a oferi cunotine cu care sistemul poate lucra, infera , acest lucru este
cunoscut ca motor de inferen i este prezentat n sistemul : animal expert system.pro
. /* Program animal expert system.pro */
DATABASE
xpositive(symbol,symbol)
xnegative(symbol,symbol)

28

PREDICATES
nondeterm animal_is(symbol)
nondeterm it_is(symbol)
ask(symbol,symbol,symbol)
remember(symbol,symbol,symbol)
positive(symbol,symbol)
negative(symbol,symbol)
clear_facts
run
CLAUSES
animal_is(cheetah):it_is(mammal),
it_is(carnivore),
positive(has,tawny_color),
positive(has,dark_spots).
animal_is(tiger):it_is(mammal),
it_is(carnivore),
positive(has, tawny_color),
positive(has, black_stripes).
animal_is(giraffe):it_is(ungulate),
positive(has,long_neck),
positive(has,long_legs),
positive(has, dark_spots).
animal_is(zebra):it_is(ungulate),
positive(has,black_stripes).
animal_is(ostrich):it_is(bird),
negative(does,fly),
positive(has,long_neck),
positive(has,long_legs),
positive(has, black_and_white_color).
animal_is(penguin):it_is(bird),
negative(does,fly),
positive(does,swim),
positive(has,black_and_white_color).
animal_is(albatross):it_is(bird),positive(does,fly_well).
it_is(mammal):positive(has,hair).
it_is(mammal):positive(does,give_milk).
it_is(bird):positive(has,feathers).
it_is(bird):positive(does,fly),
positive(does,lay_eggs).
it_is(carnivore):positive(does,eat_meat).

29

it_is(carnivore):positive(has,pointed_teeth),
positive(has, claws),
positive(has,forward_eyes).
it_is(ungulate):it_is(mammal),
positive(has,hooves).
it_is(ungulate):it_is(mammal),
positive(does,chew_cud).
positive(X,Y):xpositive(X,Y),!.
positive(X,Y):not(xnegative(X,Y)),
ask(X,Y,yes).
negative(X,Y):xnegative(X,Y),!.
negative(X,Y):not(xpositive(X,Y)),
ask(X,Y,no).
ask(X,Y,yes):!,
write(X," it ",Y,'\n'),
readln(Reply),nl,
frontchar(Reply,'y',_),
remember(X,Y,yes).
ask(X,Y,no):!,
write(X," it ",Y,'\n'),
readln(Reply),nl,
frontchar(Reply,'n',_),
remember(X,Y,no).
remember(X,Y,yes):assertz(xpositive(X,Y)).
remember(X,Y,no):assertz(xnegative(X,Y)).
clear_facts:write("\n\nPlease press the space bar to exit\n"),
retractall(_,dbasedom),readchar(_).
run:animal_is(X),!,
write("\nYour animal may be a (an) ",X),
nl,nl,clear_facts.
run :write("\nUnable to determine what"),
write("your animal is.\n\n"),
clear_facts.
GOAL
run.

30

Fiecare animal este descris de un numr de atribute pe care le are (sau nu are). Aceste
ntrebri pe care utilizatorul le pune vor primi posibilitatea de a rspunde sunt cele
positive(X,Y)i negative(X,Y).Sistemul, prin urmare, ar putea cere ceva de
genul:
Does it have hair?
Dup ce a primit un rspuns la o astfel de ntrebare, pe care dorii s fie n msur s
adauge rspunsul la baza de date, astfel nct sistemul va fi capabil s utilizeze informaiile
culese anterior, atunci cnd raioneaz sau infereaz. *
Pentru simplitate, acest program exemplu, va lua n considerare doar rspunsurile pozitive
i negative, aa c folosete o baz de date care conine dou predicate:
DATABASE
xpositive(symbol, symbol)
xnegative(symbol, symbol)
Faptul c animalul nu are parul este reprezentat de
xnegative(has,hair).
Normele, regulile de pozitiv i negativ, vor fi verificate pentru a vedea dac rspunsul este
deja cunoscut, nainte de a cere utilizatorului ntrebarea urmtoare
positive(X,Y) :xpositive(X,Y), !.
positive(X,Y) :not(xnegative(X,Y)),
ask(X,Y,yes).
negative(X,Y) :xnegative(X,Y), !.
negative(X,Y) :not(xpositive(X,Y)),
ask(X,Y,no).
Observai c regula doua, att pozitive ct i negative, care asigur o contradicie nu va
aprea nainte de a cere utilizatorului.
Predicatul ask pune ntrebrile i organizeaz rspunsurile amintite. Dac un rspuns
ncepe cu litera Y, sistemul presupune raspunsul este Da, n cazul n care ncepe cu N,
rspunsul este Nu
/* Asking Questions and Remembering Answers */
ask(X, Y, yes) :- !, write(X, " it ", Y, '\n'),
readln(Reply),
frontchar(Reply, 'y', _),
remember(X, Y, yes).
ask(X, Y, no) :- !, write(X, " it ", Y, '\n'),
readln(Reply),
frontchar(Reply, 'n', _),
remember(X, Y, no).
remember(X, Y, yes) :- assertz(xpositive(X, Y)).
remember(X, Y, no) :- assertz(xnegative(X, Y)).

31

/* Clearing Out Old Facts */


clear_facts :- write("\n\nPlease press the space bar to
exit\n"),
retractall(_,dbasedom), readchar(_).
For practice, type in the preceding inference engine and knowledge clauses. Add appropriate
declarations to make a complete program, and then try out the result. The completed animal expert
system is provided as chError! Bookmark not defined.e01.pro.

Pentru practica, tastai n motorul de inferenta precedent i clauze de cunotine. Adauga


declaraiile necesare pentru a face un program complet, iar apoi ncercai
rezultat.Complet sistemul expert de animale este prevzut ca animal expert system.pro.

3.2. Utilizarea Visual Prolog 5.2 Lansarea Sistemului expert.


A se vedea anexele:
- Anexa 1 Animalele i caracteristicile lor
- Anexa 2 Schema logica a Sistemului expert
- Anexa 3 Lansasrea Sistemului Expert
- Anexa 4. Sistemul Expert
-Anexa 5. Sistemul Expert
- Anexa 6.Soluia data de Sistemul Expert.

32

CAPITOLUL AL IV-LEA
INTRODUCERE N EXSYS CORVID
Exsys Corvid este destinat pentru a va ajuta sa descrieti etapele logice ntr-un proces
de luare a unei decizii ntr-un mod care permite transmiterea cunostiintelor catre altii ca si
cum acestia ar dialoga cu un expert uman. Practic acest lucru este similar modului n care
cineva ar explica 11111l1124l altei persoane cum sa rezolve o anumita problema.
Primul pas n crearea unei aplicatii Corvid este de a alege o problema care sa poata fi
descompusa n etape logice. Pe masura ce va creste experiente dumnavoastra n lucrul cu
Corvid veti nvata sa utilizati metode avansate de abordare a unor probleme complexe. Pentru
nceput nsa vom selecta o problema simpla, care poate fi descrisa doar cu cteva reguli.
Problema trebuie sa poata fi rezolvata utiliznd o logica ce se bazeaza pe propozitii de
forma:
" Daca......... atunci......"
" n caz ca......... stiu ca......"
Partea de IF poate contine mai multe conditii compuse. De exemplu:
1.
2.

Daca masina nu porneste si indicatorul


gol Atunci masina nu are combustibil.

de

combustibil

este

pe

n caz ca e duminica si e vreme buna stiu ca Alex probabil joaca fotbal.

Dupa cum se va vedea sistemele Corvid poseda mai multe tehnici de tratare a
probabilitatii.
Una dintre cele mai bune utilizari ale lui Exsys Corvid este pentru rezolvarea
problemelor care implica selectarea celei mai bune solutii atunci cnd exista mai multe solutii
posibile.
Exemplu demonstrativ simplu dar care va demonstra multe dintre caracteristicile
fundamentale ale lui Exsys Corvid:
- problema de a decide pe care drum sa se mearga la serviciu cu masina de acasa spre
serviciu :
1.

pe autostrada - este drumul cel mai rapid atta timp ct pe autostrada nu sunt
probleme de trafic. Daca sunt astfel de probleme, acest drum devine ngrozitor
de ncet. De asemenea nu exista benzina pe autostrada.

2.

pe strazile orasului - este un drum ncet dar sigur. Exista foarte multe
benzinarii deschise non-stop. Chiar daca exista probleme de trafic, sunt attea
strazi alternative nct acest drum este ntotdeauna sigur.

33

3.

4.

pe drumul de coasta - este un drum spendid de-a lungul coastei pe vreme


buna, dar dificil pe vreme proasta si noaptea. Dureaza cam la fel de mult ca si
drumul pe strazile orasului. Nu are nsa benzinarii. Cnd e posibil este drumul
perfect.
Transpunerea pasilor de rezolvare n reguli IF:

1. Daca n rezervor sunt sub 20 l de benzina,


Atunci strazile orasului sunt singura varianta.
2. Daca conditiile de drum sunt rele
Atunci sa nu se aleaga drumul de coasta.
3. Daca trebuie sa ajungeti repede la serviciu
si nu sunt probleme de trafic pe autostrada
Atunci mergeti pe autostrada.
4. Daca trebuie sa ajungeti repede la serviciu
si nu sunt probleme de trafic pe autostrada
Atunci nu mergeti pe autostrada.
5. Daca nu trebuie sa ajungeti repede la serviciu
Atunci drumul de coasta se prefera.
Variabile Corvid
Toata
logica
n Corvid este
definita
prin
utilizarea variabilelor Corvid. Variabilele sunt componentele pe care Corvid le utilizeaza
pentru a forma reguli si a descrie logica sistemului. Cnd ruleaza o aplicatie Corvid,
variabilele care sunt utilizate n partea de IF a regulii vor trebui sa aiba asignata o valoare.
Aceste valori pot proveni din:

ntrebarea directa a utilizatorului ca acesta sa introduca valoarea

derivarea acestor valori din alte reguli

alte surse precum o baza de date

Exista sapte tipuri de variabile, dar majoritatea sistemelor pot fi proiectate utiliznd
doar trei dintre acestea:
1.

Variabile de tip Lista Statica - aceasta este o lista simpla multivaloare. Este
variabila Corvid cel mai des utilizata si este indicat sa fie utilizata orict de des
34

este posibil. Aceasta variabila este formata dintr-o propozitie si doua sau mai
multe valori posibile.
Exemplu:
Conditiile de drum sunt bune/rele
Sunt probleme de trafic pe autostrada? Da/Nu
Judetul de domiciliu este: Alba
Bihor
2.

Variabile numerice - care pot avea un domeniu de valori numerice( cu mult


prea multe valori posibile spre a fi cuprinse ntr-o lista statica).
Exemplu:
IF numarul de litri de combustibil n rezervor este mai mic dect 20
THEN strazile orasului sunt singura posibilitate

3.

Variabile de confidenta - aceste variabile sunt de obicei optiunile posibile


dintre care sistemul trebuie sa aleaga cea mai buna solutie. Lor li se poate
asigna o valoare de confidenta care arata daca respectivele solutii sunt o
recomandare adecvata sau neadecvata. O anumita variabila poata avea asignata
diferite valori prin mai multe reguli. Aceste valori sunt combinatii din toate
regulile pentru a determina o valoare de confidenta finala pentru acea
variabila. Corvid permite mai multe moduri de a combina valorile de
confidenta. Cel mai simplu mod este nsumarea lor. Va puteti nchipui valorile
ca un numar de puncte care se aduna sau scad din scorul unei solutii
posibile(sau unei recomandari). ntr-o regula, variabilelor de confidenta li se
asigneaza o valoare n partea THEN a regulii astfel:
Exemplu:
Daca conditiile de drum sunt rele
Atunci drumul_de_coasta=-100

Noduri
Logica de luare a deciziilor n Corvid este descrisa utiliznd "nodurile". Un nod poate
fi gndit ca o propozitie n partea de IF sau de THEN a unei reguli.
Exemplu:
IF trebuie sa ajungi repede la serviciu: Da
AND sunt probleme de trafic pe autostrada: Nu
35

THEN autostrada=20
Exista 2 noduri IF si un nod THEN.
Observatie:
Nodurile pot fi ncuibate, astfel nct sa se aplice tuturor nodurilor de sub ele. Astfel
rezulta o diagrama logica arborescenta, care permite o viziune de ansamblu a logicii si ajuta
sa se verifice daca sunt acoperite toate cazurile posibile.
Exemplu:

Blocuri Logice n Corvid

Blocurile logice ntr-un sistem Corvid indica modul CUM sa se faca un anumit lucru,
n timp ce blocurile de comanda indica CE sa se faca si CND.
IF
AND
ADD
THEN
VARIABLE

Blocurile de comanda Corvid

36

Blocurile de comanda pot include un control procedural foarte complex, cu bucle


repetitive si imbricate(ncuibate), dar majoritatea sistemelor au blocuri de comanda foarte
simple cu doar cteva comenzi.
Blocurile de comanda tipice spun sistemului pentru care variabile sa derive valori si
apoi sa afiseze rezultatele.
Add a new Command Block pentru a ncepe un bloc de comanda.
Exista 2 tipuri de comenzi ce pot fi adaugate unui bloc de comanda:
1)

Comenzi de control

2)

Comenzi operationale

1)

Comezile de control trateaza buclele FOR, WHILE sau IF (cu ajutorul gupului de
butoane de control din stnga-jos a ferestrei. Acestea sunt comenzi foarte puternice
pentru sisteme avansate, dar sunt rar necesare n majoritatea sistemelor.

2)

Comenzile operationale spun aplicatiei Corvid sa efectueze anumite operatii


specifice.

Exemplu:
Se da click pe butonul Add care deschide fereastra Commands(Fig.1.1), Tabul Variables, cel mai utilizat, permite construirea a trei tipuri de comenzi pentru variabile.

Fig.1.1

37

a. SET - asigneaza o valoare unei variabile. n majoritatea cazurilor acest lucru se face
mai bine n blocurile logice, astfel nct aceasta asignare de obicei nu este necesara n
sistemele simple.
b. DERIVE - utilizeaza blocurile logice si alte mijloace pentru a gasi valoarea unei
variabile. Acest tip de comanda pentru variabile este cel mai adesea utilizata pentru
executia aplicatiior Corvid. O simpla comanda DERIVE va spune motorului de
inferente Corvid sa utilizeze toate blocurile logice pentru a determina valoarea uneia
sau mai multor variabile utiliznd nlantuirea napoi(backward chaiining) daca este
necesar.
c. ASK - ntreaba utilizatorul final valoarea unei variabile, indiferent de logica
sistemului.
Corvid cere automat utilizatorului valorile unor variabile ntr-o ordine determinata de
logica sistemului. Cteodata dezvoltatorul s-ar putea sa doreasca sa forteze ca valoarea unei
variabile sa fie ceruta la un anumit moment.
Majoritatea sistemelor simple utilizeaza o singura comanda DERIVE pentru a executa
regulile.
n exemplul nostru, trebuie spus sistemului Corvid sa utilizeze regulile din blocurile
logice pentru a calcula valoarea pentru fiecare variabila de confidenta din sistem(fiecare
solutie posibila - drum spre serviciu - fiind o variabila de confidenta).
Exemplu:
Derive a value from TO BE and Logic Block
All Confidence Variables
Rezulta DERIVE CONF

Fig.1.2

38

Astfel vor fi testate toate regulile din blocurile logice care seteaza valori pentru
variabilele de confidenta. Daca sunt necesare pentru aceasta valorile altor variabile,
utilizatorul sistemului va fi ntrebat pentru a furniza acea informatie.
Mai trebuie utilizata nsa si o comanda pentru afisarea rezultatelor. Toate comenzile
sunt adaugate relativ la comanda curenta selectata.
Exemplu:
DERIVE CONF

Command
Add Below

Rezulta fereastra Command, din care se selecteaza Tab-ul


Results(Fif.1.3).

Fig.1.3

39

Se bifeaza :
Display Default Results Screen
OK

Rezulta

Vor fi derivate valori pentru toate variabilele de confidenta, utiliznd nlantuirea si


introducerea datelor necesare de catre utilizator iar n cele din urma vor fi afisate valorile
tuturor variabilelor setate n sistem.
Executia
Pentru lansarea n executie se foloseste butonul

Run.

Corvid construieste automat o pagina HTML si utilizeaza applet-ul Corvid Runtime,


care este afisat n fereastra CorvidBrowser. Se raspunde la ntrebari, se afiseaza rezultatul, se
alege butonul Back, Restart sau butonul Exit din dreapta jos pentru a ncheia executia.
Applet-ul Corvid Runtime contine motorul de inferenteCorvid. Acesta este creierul sistemului
Corvid. El verifica blocul de comanda pentru a vedea ce actiune i s-a spus sa faca si apoi
utilizeaza blocurile logice pentru a face ceea ce i s-a spus.
Exemplu implementat n Corvid:
Prima etapa:adaugarea variabilelor:
Variabile de tip Lista Statica
1)

Conditii_de_drum

2)

Ajuns_repede

3)

Trafic_pe_autostrada
Variabile numerice

1)

Cantitatea_de_combustibil
Variabile de confidenta

1)

Autostrada

2)

Drumul_de_coasta
40

3)

Strazile_orasului

Pentru adaugarea variabilelor dam click pe icon-ul variabilei:

Add/Edit Variables.

Aceasta va duce la afisarea ferestrei Variables:

Fig.1.4

Fereastra Variables are mai multe optiuni. n partea stnga gasim si selectam variabila
dorita. Pentru a adauga o variabila noua dam click pe butonul New. Aceasta actiune duce la
afisarea ferestrei de dialog New Variable:

Fig.1.5

41

n aceasta fereastra introducem numele variabilei, selectam tipul acesteia si apoi click
pe butonul Ok.
Toate variabilele au un nume si un prompt.
Numele variabilei este prescurtarea folosita ca referinta a variabilei n Blocul Logic,
formule, comenzi etc. Numele acesteia trebuie sa fie usor de identificat si de nteles.
Promptul este textul care poate fi folosit pentru a cere utilizatorului valoarea variabilei
ca n final sa o afiseze ca si rezultat. Prompt-ul se introduce n fereastraVariable la Main
Prompt. Toate variabilele au un Promp care descrie n detaliu destinatia variabilei:

Fig.1.6

Exista diferite controale care pot fi utilizate pentru a atribui valori unei variabile. Tipul
controlului poate fi selectat alegnd Tab-ul Ask With, iar de aici se selecteaza unul dintre
controalele dorite:

Fig.1.7

42

Cel mai des utilizat control este Radio Button. Exeplu de Radio Button:

Numai o valoare poate fi selectata din cadrul acestui grup n timp ce oricare alta
valoare selectata anterior se deselecteza implicit.
Checkbox-ul se aseamana cu butoanele radio, doar ca pot fi selectate mai multe valori
simultan. Exemplu de checkbox:

Daca variabila este de tip Lista Statica, vom selecta Tab-ul Static List:

Fig.1.8

Variabilele de tip Static List au o lista posibila de valori folosita pentru definirea
logica a sistemului si pe care utilizatorul o poate selecta. Definirea textului valorii este similar
cu definirea prompt-ului pentru variabile. La fel ca si n cazul prompt-ului, acesta este o
prescurtare a numelui.

43

Full Text
Full Text este textul care descrie valoarea. Acesta poate avea orice lungime. Full
Text-ul va fi afisat utilizatorului cnd sistemul cere valorile variabilei.
Short Text
Short text-ul este o valoarea unica a variabilei(Fig.1.8).
Dupa completarea valorii la Full Text se alege butonul Copy sau tasta Enter de la
tastatura pentru transcrierea valorii si la Short Text(Fig.1.8).
Variabilele numerice pot avea o limita minima(Lower Limit) si o limita
maxima(Upper Limit) n care se pot ncadra(Fig.1.9). Sunt acceptate doar valorile Integer.
Daca utilizatorul, n timpul executiei atribuie o valoare n afara limitelor aceasta nu va fi
acceptata.

Fig.1.9

Variabila de tip colectie este o lista de tip sir de puncte. Punctele pot fi adaugate sau
mutate din lista de sistem. Variabilele Collection sunt folosite adesea cu MetaBlocurile.
Variabilele de confidenta calculeaza o valoare finala de confidenta a variabilelor. O
variabila poate avea asociate mai multe valori prin mai multe reguli.
Parametrul Calculation controleaza cum pot fi combinate diferite reguli pentru a se
obtine o valoare de confidenta finala.
SUM - aduna toate valorile asignate unei variabile
AVERAGE - face media tuturor valorilor asignate unei variabile
44

MAX - returneaza valoarea maxima asignata


MIN - returneaza valoarea minima asignata, etc(Fig.1.10).

Fig.1.10

A doua etapa:adaugare Logic Block


Pentru a adauga un bloc logic se da click pe icon-ul Add a New Logic Block

Actiunea are ca efect afisarea ferestrei Logic Block:

Fig.1.11

45

n lista de tip drop down din partea de sus a ferestrei este afisat numele blocului logic,
implicit acesta este Logic Block1. Pentru schimbarea numelui se da click pe butonul Edit
Name.
Blocul logic este alcatuit din mai multe noduri IF si THEN care descriu logica
sistemului.
Pentru a adauga un nod IF alegem din grupul IF din partea de jos a ferestrei
butonul Add. Aceasta alegere are ca efect deschiderea fereastrei Add to block (fig.1.12). n
partea stnga a ferestrei sunt specificate toate variabilele active n momentul actual:
1)
2)

Selectam variabila care ne intereseaza si din fereastra dreapta tab-ul Static


List selectam valoarea dorita pentru aceasta variabila
Click Add to List

Fig.1.12

Click pe butonul Done din partea stnga jos se adauga nodul n fereastra Logic Block.
Daca exista mai multe noduri IF acestea se adauga n blocul logic astfel:
1)

Folosind butonul Below din grupul AND pentru a adauga un nod dupa nodul
selectat

2)

Folosind butonul Above din grupul AND pentru a adauga un nod naintea nodului
selectat

3)

Folosind butonul Below din grupul Same Level pentru a adauga un nod la acelasi
nivel cu cel selectat, dar pozitionarea acestuia n blocul logic va fi dupa nodul
selectat.
46

4)

Folosind butonul Above din grupul Same Level pentru a adauga un nod la acelasi
nivel cu cel selectat, dar pozitionarea acestuia n blocul logic va fi naintea nodului
selectat.
Adaugarea nodurilor THEN

Din partea de jos a ferestrei se alege din grupul THEN butonul Variable. n urma
acestei actiuni se deschide fereastra Add to Block, adaugarea nodului THEN fiind similara cu
adaugarea nodurilor IF. Logic Block1 va fi urmatorul(Fig.1.13):

Fig.1.13

Pentru exemplul nostru avem nca 2 blocuri logice, care sunt prezentate mai
jos(Fig.1.14; Fig.1.15). Construirea acestora este similara cu cea a blocului logic prezentat
mai sus.

Fig.1.14

Fig.1.15

47

A treia etapa: adaugare Command Block


Dnd click pe icon-ul Add a New Command Block
Command Block.

, se va deschide fereastra

Din partea de jos a ferestrei se alege din grupul Command butonul Add( a se vedea
explicatiile de la blocurile de comanda).
A patra etapa: lansarea n executie

Aceasta se face dnd click pe icon-ul Run

48

CAPITOLUL AL V-LEA
CONSTRUCIA UNUI SISTEM EXPERT N EXSYS CORVID
IDEEA CE ST LA BAZA PROTOTIPULUI AM GSIT-O N LIMBAJUL VISUAL
PROLOG 5.2, MAI EXACT:
SISTEM EXPERT ANIMALE
n cele ce urmeaz voi descrie cum am realizat prototipul de sistem expert, care gsete
un animal dintr-un grup de animale, definite iniial, n funcie de rspunsurile date de
utilizator la ntrebrile sistemului expert
S vedem animalele

Aceste informaii le-am aranjat ntr-o schem

49

logic

Lansm n execuie generatorul de sisteme expert


EXYS CORVID
Dup ncrcarea generatorului, din meniul File alegem New, iar
n fereastra care se deschide se alege calea i numele sistemului
expert

50

Corvid va lansa automat fereastra destinat introducerii


variabilelor sistemului

51

Dup validarea ferestrei, sistemul va reveni la fereastra ce conine


toate variabilele sistemului

52

Se introduc i urmtoarele variabile

53

Se introduce variabila OK

54

Pentru ca aplicaia s fie funcional, n EXYS CORVID, mai


trebuie s parcurgem o etap
Realizarea
BLOCULUI DE COMAND

Se poate atribui acestei ferestre un nume sugestiv

55

56

57

58

59

60

61

62

63

64

65

Inregistrarea Licentei Corvid

Sistemul expert Corvid


eredan Pavel

66

CAPITOLUL AL VI-LEA
PLATFORM WEB EDUCAIONAL
WWW.KFP.RO PROIECTE EDUCAIONALEDE CONSTRUCIE A SISTEMELOR EXPERT

Fig.1 Autentificarea in partea de administrator

67

Fig.2 Structura meniului backend - frontend

Fig.3 Articolele sitului, cotinutul.

68

Fig4. Managemtul articolelor.

Fig.5 Administrarea continutului

69

Fig.6 Administrarea continutului

Aspectul sitului

70

Joomla! este un Content Management System (CMS), premiat in nenumarate ocazii, care te
ajuta sa construiesti websiteuri si alte puternice aplicatii online. In plus, Joomla! este o solutie
Open Source disponibila tuturor, gratuit.
Joomla! poate fi folosita pentru a administra cu usurinta orice componenta a websiteului, de la
adaugarea de continut si imagini, la actualizarea unui catalog cu produse sau sondaje on-line.
Pachetul de baza Joomla! este conceput pentru a putea fi instalat cu usurinta, chiar si de nonprogramatori.Majoritatea oamenilor nu au probleme cu instalarea softului nostru, dar oferim si
foarte mult ajutor incepatorilor. Avem o comunitate activa, in crestere, atingand peste 40.000
utilizatori si dezvoltatori prietenosi pe forumul nostru, gata sa va ajute.
Odata Joomla! instalata si functionala, este foarte simplu, chiar si pentru utilizatorul nontehnic, de a adauga continut, actualizare imagini si administrarea datelor sensibile care ajuta la
functionarea optima a organizatiei sau companiei voastre. Oricine avand cunostinte primare
de MS Word poate invata cu usurinta sa administreze un site Joomla!.
Printr-o interfata web simpla, veti putea adauga foarte usor stiri, articole sau declaratii de
presa, sa administrati pagini cu detaliile angajatilor, oferta de munca, imagini cu produse si sa
creati un numar nelimitat de sectiuni sau pagini pe site. Puteti incerca demo-ul nostru aici,
pentru a vedea pe viu despre ce este vorba.
Imediat dupa instalare, Joomla! se descurca de minune cu administrarea continutului necesar
dezvoltarii site-ului vostru. Pentru multi utilizatori, insa, adevarata putere a Joomla! consta in
framework-ul care da posibilitatea miilor de programatori din intreaga lume sa creeze add-onuri si extensii extrem de puternice. Iata doar cateva exemple din sutele de extensii, oferite
gratuit prin site-ul nostru:

Constructor dinamic de forumuri


Directoare economice sau organizationale
Administrare directoare
Galerii de imagini si multimedia
Solutii e-commerce si cos de cumparaturi
Calendare
Software specific blogurilor
Servicii directoare
Stiri prin email
Instrumente de colectare si raportare a diferitelor date
Servicii de inscriere
si mult mai multe...

Puteti gasi mai multe exemple in directorul nostru cu extensii, mereu in crestere. Pregatiti-va
sa fiti uluiti de realizarile comunitatii noastre de programatori si dezvoltatori!
Multe companii si organizatii au cerinte care depasesc cu mult oferta de baza a pachetului

71

Joomla! sau extensiile gratuite.


Din fericire, Joomla! ofera un framework foarte flexibil, permitand dezvoltatorilor sa creeze
add-on-uri sofisticate si sa imbunatateasca Joomla! in nenumarate modalitati.
Folosind frameworkul, dezvoltatorii pot realiza cu usurinta:

Sisteme e-commere integrate


Sisteme de control al inventarului
Instrumente de raportare a datelor
Cataloage cu produse, personalizate
Sisteme de rezervari
Interconectari intre aplicatii
... sau orice alt tip de aplicatie potrivita nevoilor lor

Daca organizatia sau compania dumneavoastra angajeaza un dezvoltator Joomla! sau contruiti
o aplicatie in jurul frameworkului, veti avea un produs care nu va fi afectat de legile de
proprietate intelectuala sau drepturilor de autor.
Puteti afla mai multe despre dezvoltarea cu ajutorul frameworkului Joomla! in sectiunea
dedicata programatorilor. Frumusetea Joomla! consta in faptul ca puteti folosi frameworkul
nostru pentru a va personaliza aplicatiile intr-un mod cat mai familiar si flexibil.

72

CONCLUZII
Lucrarea de Disertaie PLATFORM WEB de CONSTRUCIE A
SISTEMELOR EXPERT din cadrul masterului TEHNOLOGII PENTRU
DEZVOLTARE WEBse nscrie n liniile directoare ale procesului educaional
caracteristic SOCIETII CUNOATERII i anume :
-s nvm cum s nvm
- dezvoltarea spiritului vizionar i creativ,
- cunoaterea acumulat s produc efecte educaionale, economice, etc...
Prin aceast seciune Proiecte educaionale de pe Platforma de Fuzionare a
Cunoaterii (KFP) punem la dispoziia celor ce doresc s asimileze primele noiuni
despre Inteligen Artificial, i modul de construcie a Sistemelor Expert utiliznd
Visual Prolog 5.2 si EXSYS CORVID

73

BIBLIOGRAFIE
http://www.visual-prolog.com/?gclid=CODQjdqQ6bACFQRJ3wod93BMUg
http://exsys.com/
http://www.joomla.org/

74

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