Documente Academic
Documente Profesional
Documente Cultură
PLATFORM WEB
EDUCAIONAL
DE
CONSTRUCIE A SISTEMELOR
EXPERT
NDRUMTOR TIINIFIC,
eredan Pavel
ARAD
2012
CUPRINS
PLATFORM WEB EDUCAIONAL
DE
.......4
.....7
.......10
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:
-
CAPITOLUL I.
NOIUNI INTRODUCTIVE
1.1.
Societatea cunoaterii
http://en.wikipedia.org/wiki/Society#Knowledge_society
1.2.
[1]
where
an intelligent agent is a system that perceives its environment and takes actions that maximize its
chances of success.
[2]
[3]
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.
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.
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 .
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.
schimba-viata
1.5.
www.kfp.ro .
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.
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.
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
2.4.
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
14
fact
[fact]
is_a
*is_a*
has_a
has/a
patternCheckList
pattern-Check-List
choose_Menu_Item
predicateName
predicate<Name>
first_in_10
>first_in_10
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. */
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
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
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
clauses
scrisa_de(sadoveanu, "Fratii Jderi"). % 1
scrisa_de(melville, "Moby Dick"). % 2
carte("Moby Dick", 250).
carte("Fratii Jderi", 1300).
%3
%4
24
%5
25
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!
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
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.
de
combustibil
este
pe
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.
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.
3.
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:
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
36
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)
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
Fig.1.3
39
Se bifeaza :
Display Default Results Screen
OK
Rezulta
Run.
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
Add/Edit 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
Fig.1.10
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)
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
, 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
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
49
logic
50
51
52
53
Se introduce variabila OK
54
55
56
57
58
59
60
61
62
63
64
65
66
CAPITOLUL AL VI-LEA
PLATFORM WEB EDUCAIONAL
WWW.KFP.RO PROIECTE EDUCAIONALEDE CONSTRUCIE A SISTEMELOR EXPERT
67
68
69
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:
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
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