+ All Categories
Home > Documents > lucraredisertatie-seredeanpavel

lucraredisertatie-seredeanpavel

Date post: 13-Apr-2018
Category:
Upload: teresa-marques
View: 219 times
Download: 1 times
Share this document with a friend

of 74

Transcript
  • 7/26/2019 lucraredisertatie-seredeanpavel

    1/74

    UNIVERSITATEA DE VEST VASILE GOLDI! DIN ARADFACULTATEA DE !TIIN"ELE NATURII, INGINERIE !I

    INFORMATIC#MASTER: TEHNOLOGII PENTRU DEZVOLTARE WEB

    PLATFORM# WEB

    EDUCA"IONAL#

    DE

    CONSTRUC"IE A SISTEMELOR

    EXPERT

    NDRUM!TOR"TIIN#IFIC,

    Prof. COCIUBA NICA

    ABSOLVENT,

    !eredan Pavel

    ARAD

    2012

  • 7/26/2019 lucraredisertatie-seredeanpavel

    2/74

    CUPRINS

    PLATFORM# WEB EDUCA"IONAL#DE

    CONSTRUC"IE A SISTEMELOR EXPERT

    Introducere..3

    CAPITOLUL I. DESPRE SOCIETATEA CUNOA!TERII .......4

    1.1. Societatea cunoa$terii.....................................................................4

    1.2. Inteligen%a Artificial&$i Sisteme Expert ............5

    1.3. Inv&%area pe tot parcursul vie%ii (LLL)...............................6

    1.4. Cre$terea Exponential& .....7

    1.5 Platforma de Fuzionare a Cunoa$terii KFP............................................................8

    CAPITOLUL AL II-LEA. LIMBAJUL PROLOG .......102.1. Evolu%ia 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. CONSTRUC"IA UNUI SISTEM EXPERT N LIMBAJUL

    PROLOG ..............................................................................................................................28

    3.1. Construc%ia 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. CONSTRUC"IA UNUI SISTEM EXPERT N EXSYS

    CORVID ...............................................................................................................................49CAPITOLUL AL VI-LEA. PLATFORM#WEB EDUCA"IONAL#

    WWW.KFP.RO PROIECTE EDUCA"IONALE- DE CONSTRUC"IE

    A SISTEMELOR EXPERT.....67

    Concluzii................................................................................................................................73

    Bibliografie............................................................................................................................74

    Anexe ....................................................................................................................................75

  • 7/26/2019 lucraredisertatie-seredeanpavel

    3/74

    Introducere

    n ultimul deceniu, tehnica computa%ional&a luat un avnt deosebit $i este influen%at&

    foarte mult de progresele deosebite ale Internetului, ale tehnicii media, ale telefonului, avndun impact major n toate aspectele vie%ii economice $i sociale. La fiecare jum&tate de an apar

    schimb&ri importante nct este imposibil de prev&zut unde se va ajunge n viitor. n prezent,

    se poate vorbi de o adev&rat& revolu%ie care are loc domeniul computerelor $i n

    telecomunica%ii.

    Deja sunt prezente telefoanele inteligente cu conectare foarte puternic&la Internet cu

    posibilit&%i de computa%ie n calculatorul nor (CLOUD COMPUTING), cu camere foto $i

    video de nalt&fidelitate, cu posibilit&%i de preluare emai-uri, de navigare pe net etc..Practic tendin%a actual&este de construc%ie a unor dispozitive foarte simple $i u$or

    portabile, mannevrabile care s& aibe facilit&%ile calculatoarelor telefoanelor $i televizoarelor

    dar nu numai.....n domeniul video apar dispozitivele holografice care permit n idea expus&

    mai sus o interac%iune 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 pregate$te 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 direc%iue uneori

    neprev&zut&dar $i softul tinde tot mai mult s&se apropie de procesarea limbajului natural de

    posibilitatea de construc%ie a unor sisteme expert care s& fie capabile s& nmagazineze

    experien%&uman&complex&$i valoroas&.

    Proiectul de fa%&$i propune s&ini%ieze pe doritorii de a$i construi un sistem expert

    pornind de la bazele conceptuale prezentate ntr-un sistem expert didactic realizat n Prolog ca

    apoi aceea$i 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 no%iuni legate de Societatea Cunoa$terii, de Inteligen%&

    Artificiala, de necesitatea de a nv&%a pe tot parcursul vie%ii, de cre$tere exponen%ial&.

    Proiectul propriu - zis va consta n trei par%i:

    - Realizarea unui sistem expert n Prolog

    - Realizarea aceluia$i sistem expert in Corvid

    - Realizarea pe Platforma de Fuzionare a Cunoa$terii ( KFP ) n cadrul Proiectelor

    educa%ionale a unei Platforme web educa%ionale de construc%ie a sitemelor expert.

  • 7/26/2019 lucraredisertatie-seredeanpavel

    4/74

    CAPITOLUL I.

    NO"IUNI INTRODUCTIVE

    1.1. Societatea cunoa$terii

    Cultura $i societatea cunoa$terii 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

  • 7/26/2019 lucraredisertatie-seredeanpavel

    5/74

    Societatea Cunoa$terii n care ne g&sim $i noi este caracterizat&deci de fenomenul

    cre$terii Inteligen%ei Artificiale implementat&n computerele de Genera%ia V de calculatoare,

    de apari%ie a unor Sisteme Expert profesionale care acoper&domenii din ce n ce mai

    complexe n care se nmagazineaz&experien%a planetar&.

    1.2. Inteligen%&Artificial&$i Sisteme Expert .

    O defini%ie a inteligen%ei nu putem da nc&, doar o putem exemplifica prin enumerarea

    unor caracteristici a acesteia . De exemplu despre cineva care se descurc&u$or in situa%ii

    complexe limit&spunem c&este inteligent. Deasemenea cel care rezolv&probleme pe care nu

    le-a mai rezolvat cineva este inteligent. "ofatul n condi%ii extreme este o activitate care cere

    inteligen%&. Dac&am putea da o defini%ie complet&inteligen%ei asta ar nsemna c&am pute-o

    formaliza $i reproduce. Deocamdata nu putem s&implement&m numai anumite mecanisme ale

    inteligen%ei n ma$ini.

    Con$tiin%a este iar un aspect inteligent care deocamdata nu poate fi implementat cu

    nivelul tehnologic atins pin&acum n Inteligen%a Artificial&. Putem spune c&inteligen%a nu

    este o caracteristic&numai oamenilor dar $i animalelor.

    Proiectul generatiei a V de calculatoare $i-a propus implementarea inteligen%ei n

    ma$ini care ast&zi nu mai computeaz&ci infereaz&adic&sunt capabile s&fac&deduc%ii logice

    foarte proifunde. Au ap&rut de la ma$in&riile - animalele inteligente Aibo pn&la robo%ii

    umanoizi ca Honda $i Asimo care sunt capabili de a se ntre%ine $i conversa perfect cu

    oamenii a c&ror experien%&$i deprinderi le-au c$tigat.

    Deci Testul lui Turing a fost trecut $i putem spune ca aceste ma$ini au un

    comportament inteligent $i uman, sociabil a$a cum s-a realizat la M.I.T. experimentul cu

    ma$ina sociabila KISMET unde discu%ia ntre cercet&torul Rich $i robotul Kismit atinge

    valen%e absolut umane de net&g&duit. A$a cum se vede n siteul :

    http://www.ai.mit.edu/projects/sociable/baby-bits.html

    Artificial intelligence(AI) is the intelligenceof machines and the branch of computer sciencethat

    aims to create it. AI textbooks define the field as "the study and design of intelligent agents"[1]

    where

    an intelligent agentis 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

  • 7/26/2019 lucraredisertatie-seredeanpavel

    6/74

    In artificial intelligence, an expert systemis a computer system that emulates the decision-makingability of a human expert.[1]Expert systems are designed to solve complex problems by reasoning

    about knowledge, like an expert, and not by following the procedureof a developeras is the case in

    conventional programming.[2][3][4]The first expert systems were created in the 1970s and then

    proliferated in the 1980s.[5]Expert systems were among the first truly successful forms

    ofAIsoftware.[6][7][8][9][10][11]

    Experien%a celor de la EXSYS de a oferi un instrument care se ridic&la nivelul desistem expert , de a scrie un sistem expert ne duce la afirma%ia ca avem deja un sistem expertde scriere de sisteme expert.

    Deoarece acest produs este putin cunoscut l voi utiliza pentru a scrie un sistem expertpe care l-am dezvoltat $i n Prolog oferind astfel pe Platforma de Fuzionare a Cunoa$terii(www.kfp.ro) la sec%iunea Proiecte educa%ionale posibilitatea de a nv&%a $i exersa acestinstrument.

    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: theknowledge base. To run an expert system, the engine reasons about the knowledge base like a

    human.[12]In the 80s a third part appeared: a dialog interfaceto communicate with users.[13]This ability

    to conduct a conversation with users was later called "conversational".[14][15]

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

    Limbajul Prolog este un limbaj de PROgramare LOGic&. n acest limbaj s-au realizato serie de sisteme expert printre care $i cel prezentat n Lucrarea mea de diserta%ie sistemulexpert cu determinarea animalelor dup&caracteristici ale acestora , sistem cu un puterniccharacter didactic.

    Prologis a general purpose logic programminglanguage associated with artificialintelligenceand computational linguistics.[1][2][3]

    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 factsand rules. A computation is initiated by running a queryover these relations.[4]

    The language was first conceived by a group aroundAlain Colmerauerin Marseille, France, in theearly 1970s and the first Prolog system was developed in 1972 by Colmerauer with PhilippeRoussel.[5][6]

    Prolog was one of the first logic programming languages,[7]and remains among the most popular suchlanguages today, with many free and commercial implementations available. While initially aimedat natural language processing, the language has since then stretched far into other areaslike theorem proving,[8]expert systems,[9]games, automated answering systems, ontologiesand

    sophisticated control systems. Modern Prolog environments support creating graphical userinterfaces, as well as administrative and networked applications.

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

    1.3. nv&%area pe tot parcursul vie%ii (LLL) .

    Deasemenea avnd n vedere rapiditatea apari%iei de cuno$tin%e noi, de tehnologii noi,

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

  • 7/26/2019 lucraredisertatie-seredeanpavel

    7/74

    updat&rii continuie a cunoa$terii $i aptitudinilor, fenomen cunoscut la nivel planetar sub

    denumirea : lifelong learning LLL

    Lifelong learning, also known as LLL, is the "lifelong, voluntary, and self-motivated"[1]pursuit of

    knowledge for either personal or professional reasons. As such, it not only enhances social inclusion,

    active citizenship and personal development, but also competitiveness and employability.[2]

    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

    apply the knowledge acquired (the workplace). [3]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. Cre$terea Exponen%ial& .

    Caracteristica cea mai important& a Societ&%ii Cunoa$terii este legat& de fenomenul

    cre$terii exponen%iale . Pentru a in%elege acest fenomen vom exemplifica cu urm&toarea

    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 toamnaanului 1990cu scopul de a identifica prin secven!are succesiunea celor peste 3 miliarde de

    perechi de baze azotatece constituie genomul uman, precum "i a identifica cele aproximativ25000 de genedin genomul uman att din punct de vedere fizic, ct "i func!ional.

    Proiectul a fost finalizat n 2003 prin publicarea secven!ei genomului uman. Secven!aob!inut!este considerat!ca un bun al ntregii umanit!!i "i a fost depus!n baza dedate Genbanka NCBI (U.S. National Center for Biotechnology Information) fiind liberdisponibil!.

    http://ro.wikipedia.org/wiki/Proiectul_%E2%80%9EGenomul_uman%E2%80%9D

    Complexitatea extraordinara a proiectului face necesara participarea cercetatorilor dindomenii 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 prinstudiul comparat al secventelor corespunzatoare la alte specii.Pentru asemeneacomparatii,cercetatorii au obtinut secvente complete pentru speciile Escherichia coli ,Saccharomyces cerevisiae si Caenorhabditis elegans .

    http://www.e-scoala.ro/referate/biologie_genom.html

    Fenomenul Cre$terii Exponen%iale a dus la realizarea Proiectului Genomului Uman $ia bancii de date GenBank la posibilitatea de clonare a animalelor (oaia Dolly) $i oamenilor.

    Un exemplu clar a ce nseamna cre$terea exponen%ial&voi prezenta n continuare prindezvoltarea tehnicii de calcul $i a puterii de computa%ie a acestora. Astfel puterea decomputa%ie a calculatoarelor este ast&zi comparabil&cu puterea unui creier de $oarece iar la

    nivelul anilor 2050 acestea vor ajunge la puterea de computa%ie a tururor creierelor umane a$acum se vede $i n graficul de mai joi.

  • 7/26/2019 lucraredisertatie-seredeanpavel

    8/74

    Am pornit deja pe un drum al realit!"ii augumentate spre descoperiri care ne vorschimba n urm!torul interval de timp via"a. In acest sens sunt elocvente articolele de pesiteul: http://www.descopera.ro/lumea-digitala/4944145-top-10-tehnologii-care-ne-vor-schimba-viata

    1.5. Platforma de Fuzionare a Cunoa$teriiKnowledge Fusion Platform www.kfp.ro .

    Platforma de Fuzionare a Cunoa$terii este o ini%iativ&startat&de ing.Cociuba Nica

    legat&de Societatea Cunoa$terii ini%iativ&ce se dore$te a se concretiza ntr-o Platform&a

    Cunoa$terii n Euroregiunea DKMT, care s&depoziteze cunoa$terea din aceast&zon&, care s&

    fuzioneze ntr-un mod synergetic aceast&cunoa$tere $i care s&ofere informa%ii $i cunoa$tere.

    Ini%iativa s-a concretizat pn&n prezent prin realizarea unor conferin%e legate de

    Fuzzy Logic mpreun&cu profesorul Lotfi Zadeh de la Berkley Univeristy Statele Unite.,osomitate n domeniul Teoriei Sistemelor $i a Inteligen%ei Artificiale .

  • 7/26/2019 lucraredisertatie-seredeanpavel

    9/74

    n domeniul Renov&rii $i Restaur&rii a organizat workshop-uri mpreun&cu

    Universitatea din Trento Italia cu prof. Caceagera $i cu arh. Roberto Bresciani .

    Deasemenea n domeniul GIS Solution conferin%e $i startarea unui proiect european

    legat de GIS n regiunea V Vest.

    Etc...

    ----oooOOOOooo----

    In cadrul site-ului ww.kfp.ro al&turi de o serie de activit&ti $i de documente se g&se$te

    $i sec%iunea de Proiecte educa%ionale unde am creat pe aceast&platform&o posibilitate de

    cunoa$tere a modului de construc%ie 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 dispozi%e cunoa$terea mea caream acumulat-o legat&de Inteligen%a Artificial&, Sistemele Expert $i modul de construc%ie aacestor Sisteme Expert.

    Fiind dasc&l la Liceul din Ineu a$dori s&introduc aceste cuno$tin%e elevilor mei cares&ia un contact mai rapid cu aceste instrumente de mare perspectiv&.

  • 7/26/2019 lucraredisertatie-seredeanpavel

    10/74

    CAPITOLUL AL II-LEA

    INTRODUCERE N LIMBAJUL PROLOG

    2.1. Evolu%ia principalelor limbaje de programare .

    Creatoarea primelor programe pentru calculatoare (1840) este Ada Augusta deLovelace.

    Limbajul Assembler a ap&rut n 1947.Istoria limbajelor de programare ncepe cu Fortran-ul n 1956.Caracteristicile Fortran-ului sunt: calcule la nivel avansat, nlocuirea blocurilor de

    instruc%iuni printr-o denumire (folosirea procedurilor, lucrul cu vectorii).n paralel cu Fortran-ul a ap&rut limbajul Cobol ale c&rui caracteristici sunt: folosirea

    intensiv&a fi$ierelor (suport magnetic stabil sau optic n care se depun date; fi$ierul nu este un

    obiect unitar; pot fi cu acces direct, secven%ial etc.).n anul 1959 a ap&rut limbajul Lisp List Processing (prelucrarea listelor). n cadrulunei liste componentele nu sunt omogene. Lista poate fi liniar&cu o serie de calcule, avea uncap. Se efectuau opera%ii de concatenare $i prelucr&ri simbolice.

    n anul 1960 a ap&rut limbajul Algol60 (Algorithm Language), urma$ direct alFortran-ului. El aduce ca noutate folosirea recursivit&%ii care implic& folosirea stivei, deexemplu 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 ap&rut apoi ca $i urma$al lui Algol60 $i ca p&rinte a Pascal-ului Algol68.Limbajul Pascal (1971) aduce ca nou programarea structurat&(cele trei structuri logice

    de baz&, prin combina%ia lor se ob%ine rezolvarea multor tipuri de probleme). Programeletrebuie sa fie formate din module care sunt ierarhizate arborescent.

    n paralel cu PLI a ap&rut un limbaj care nu s-a mai dezvoltat, continuare al luiAlgol60: Simula (aici apare no%iunea de clas&ca model abstract de obiecte, apare ideea deeveniment).

    Urma$ul lui Simula a fost SMALL TALK, care aduce noutatea de programe orientatepe obiecte (POO).

    Ca descendent al lui Algol68 a ap&rut C-ul n anul 1976, care la fel ca $i Pascalulfolosesc programarea structurat&$i apoi n 1984 a luat fiin%&C++ -ul care folose$te POO.

    n 1992 apare limbajul JAVA care aduce ca nou conceptul de portabilitate. A ap &rutde 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 concuren%ialitate.LISP a avut ca $i urma$pe COMMONLISP care permitea calculul simbolic (func%iile

    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 mul%imi vagi.

  • 7/26/2019 lucraredisertatie-seredeanpavel

    11/74

    2.2. Limbajul Prolog .

    n 1976 a ap&rutPROLOG -ul, continuat cu ceea ce se nume$te sistem expert. Prolog-ul lucreaz& la nivel semantic (ncercarea de implementare n programele de calcul a

    n%elesurilor cuno$tin%elor umane).Una din principalele idei ale program&rii logice este aceea c& un algoritm este

    constituit din dou& elemente disjuncte: logic& si control. Componenta logic& corespundedefini%iei problemei ce trebuie solu%ionat&, n timp ce componenta control stabile$te cum poatefi ob%inut& solu%ia. Un programator trebuie s& descrie numai componenta logic& a unuialgoritm, l&snd controlul execut&rii sa fie exercitat de sistemul de programare logic&utilizat.Cu alte cuvinte, sarcina programatorului este specificarea problemei ce trebuie solu%ionat&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 program&rii logice.

    Limbajul Prolog ( PROgrammation en LOGique) a fost creat la Marsilia la nceputulanilor 70, inventatorii fiind Alain Colmeraurer si Philippe Roussel.Fundamentele teoretice se g&sesc n metoda demonstr&rii automate dezvoltat&ncepnd

    cu 1965 dup& metoda rezolu%iei dat& de Julian Robinson. Un rol important l-a avut si R.Kowalski prin demonstrarea faptului c&se poate programa folosind logica. n limbajul Prologse 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 a$a de eficient ca un limbaj special destinat acestuilucru. Prolog-ul, ns&, marcheaz& cnd este vorba de manipularea simbolurilor. Orimanipularea simbolurilor este inima a ceea ce a devenit ast&zi cunoscut sub numele de

    Inteligen"#Artificial#.

    2.3. Principalele caracteristici ale Prolog ului .

    1. Este un limbaj de programare logic& centrat pe date.Se deosebe$te de Pascal, C care sunt limbaje imperative, centrate pe proces. Paradigmafundamental& a program&rii logice este cea de programare declarativ&. Focusul program&riilogice este identificarea no%iunii de calcul $i no%iunii de deduc%ie. Mai exact, sistemele de

    programare logica reduc executarea unui program la c&utarea prin respingere a clauzelorprogramului mpreuna cu nega%ia propozi%iei ce exprim&ntrebarea. Aici se urmeaz&regula: orespingere e o deduc%ie de la contrariu. Se bazeaz&pe deduc%ia liniar&folosind clauze Horn.Se folose$te pentru a exprima rela%ii intre obiecte si a ob%ine informa%ii relativ la obiecte si

    rela%iile 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 ob%in aceste rezultate.Un limbaj este descriptiv dac&accentul cade pe primul aspect (CE), alegerea metodei fiindl&sat& pe seama calculatorului. Un limbaj procedural este unul n care trebuie proiectat& $imetoda de ob%inere a rezultatelor.

    3. Este folosit n:- programarea unor aplica%ii n Inteligen%&Artificial&;- dezvoltarea sistemelor expert;- procesarea limbajului natural (inclusiv traducere automat&);

    - robotic&;- teoria jocurilor;

  • 7/26/2019 lucraredisertatie-seredeanpavel

    12/74

    - proces&ri de natur&logic&.

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

    2.4. Fundamentele Prolog ului (fapte, reguli) .

    Un program Prolog este o colec%ie de clauze. Acestea pot fi de dou&tipuri: fapte saureguli.

    2.4.1. Fapte Prolog

    Un fapt precizeaz&o proprietate a unui obiect sau exprim&o rela%ie dintre mai multeobiecte. De exemplu proprietatea florilor de a fi frumoase se poate exprima in Prolog prin

    urm&torul fapt:frumoase(flori).iar preferin%a 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 rela%ia dintre obiectele 'obiect_1,...,obiect_n'.Programatorul este cel care stabile$te numele rela%iei, precum si semnifica%ia ei. Astfel faptulca Adi o place pe Roxana se poate exprima $i prin place(roxana,adi).

    Observa!ie: faptele introduse n program sunt considerate a fi adev&rate, adic&

    informa%ia pe care o furnizeaz&este cunoscut&de sistem, f&r&ca acesta s&verifice dac&este orela%ie real&.

    De exemplu, faptul verde(zapada).este corect din punct de vedere sintactic, dar nuexprima o proprietate reala a z&pezii.

    Numele pentru rela%ii $i obiecte trebuie s& satisfac& urm&toarele reguli:

    a) numele de rela%ie trebuie s&nceap&cu o liter&urmat&de orice combina%ie de litere cifresau _. Este recomandat ca primul simbol s&fie liter&mic&, iar numele s&fie ales astfel nct s&sugereze rela%ia reprezentat&;

    b) numele de obiecte trebuie sa nceap& cu liter& mic&, urmat& de oricte caractere.

    Colec%ia de fapte se mai nume$te baz&de date (database).

    Exemple:

    Pentru reprezentarea propriet&%ilor $i rela%iilor de mai josIarba este verde.Ioana este studenta.Dan are ma$ina.Ionu%este fiul lui Dan si al Mariei.se pot declara urm&toarele fapte:

    verde(iarba).student(ioana).

  • 7/26/2019 lucraredisertatie-seredeanpavel

    13/74

    are(dan,masina).fiu(ionut,dan,maria).

    2.4.2 Reguli Prolog

    O regul&Prolog exprim&o rela%ie de dependen%&ntre fapte $i permite ob%inerea unorinforma%ii noi pe baza celor deja cunoscute.

    Forma general& prin care poate fi descris& o regul& este:Capul_regulii if Corpul_reguliisaurelatie(obiect,obiect,...,obiect) ifrelatie(obiect,obiect,...,obiect) and....relatie(obiect,obiect,...,obiect).semnifica%ia fiind c& dac& toate rela%iile din corpul regulii sunt adevarate atunci este

    adevarata&si rela%ia din capul regulii.

    De exemplu cunoscnd c&Maria le place pe Elena $i pe Ioana, iar lui Dan i place totce-i place $i Mariei, atunci putem scrie faptele:place(maria,elena).place(maria,ioana).$i urm&toarea regula:place(dan,Cineva) if place(maria,Cineva).

    n corpul regulii putem avea $i rela%ii legate prin disjunc%ie (or) cu semnifica%ia carela%ia din capul regulii este adevarat&dac&este adevarat&una din rela%iile 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).

    Observa!ie: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 orictelitere, cifre sau _. De exemplu: Cineva, PERSOANA, Un_om, X.

    O variabil& care nu are valoare se nume$te liber&; valoarea o poate primi prinunificare, devenind variabil&legat&(ATEN#IE: variabilele nu pot fi folosite pentru stocareainforma%iei!).

    Variabila anomim& (reprezentata prin _) se folose$te atunci cnd valoarea la care seleag&nu este folosit&.

    2.4.4. Constante

  • 7/26/2019 lucraredisertatie-seredeanpavel

    14/74

    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, ntreb&m:i place lui Dan cafeaua?n sintaxa Prolog, ntreb&m Prolog-ul:

    place(dan,cafeaua).Dac&vom da acest scop Prolog-ului spre evalulare, el va r&spunde yes sau no, depinde

    de regulile $i faptele definite.

    2.4.6. Punerea regulilor, faptelor $i scopurilor mpreun&

    S&presupunem c&avem urm&toarele fapte $i reguli:

    O ma$in&rapid&nseamn&distrac%ie.O ma$in&mare este frumoas&.O ma$in&mic&este practic&.Gigi iube$te o ma$in&dac&aceasta nseamn&distrac%ie.

    n timp ce cite$ti aceste fapte, po%i deduce c& lui Gigi i place o ma$in& rapid&. naproape acela$i fel Prolog-ul va ajunge la acea$i concluzie. Dac& nici un fapt nu este datdespre o ma$in&rapid&, atunci nu vom putea logic deduce ce fel de ma$in&iube$te Gigi. Vei

    putea ghici despre ce fel de ma$in&poate fi vorba, dar Prolog-ul $tie doar ce i spui; Prolog-ulnu ghice$te.

    Un program scris n Prolog are mai multe sec%iuni: Sec"iunea de clauze (the clauses section)unde se pun toate faptele $i regulile

    programului. Clauzele pentru un predicat dat trebuie plasate mpreun& nsec%iunea 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 sec%iunea clauses uitndu-se apoi la fiecare fapt& $iregul&din program c&utnd o potrivire (match). Odat&ce VP-ul merge n josn sec%iunea de clauze, el plaseaz&pointeri interni lng&fiecare clauz&care se

    potrive$te cu subgoal-ul curent. Dac&aceast&clauz&nu face parte dintr-o calelogic& care s& conduc& la o solu%ie, atunci VP-ul se ntoarce la pointer-ul

    pozi%ionat $i caut&o alt&potrivire (match). Acest procedeu poart&numele debacktracking. Sec"iunea de predicate (the predicates section) . Dac&vom defini un predicat

    personal n sec%iunea de clauze, atunci trebuie obligatoriu declarat n sec%iuneade predicate, altfel VP nu va $tii despre ce este vorba. Cnd se declar& un

    predicat i se spune VP-ului c&rui domeniu i apar%in argumentele unuipredicat. Sec%iunea de predicate este doar o nl&n%uire a numelor predicatelormpreun& 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 sauunderscore -uri (_). Numele de predicate nu pot dep&$i 250 de caractere.

    S& d&m cteva exemple de nume de predicate (corecte $i respectiv

    incorecte legal and illegal predicate names):

  • 7/26/2019 lucraredisertatie-seredeanpavel

    15/74

    Legal Predicate Names Illegal Predicate Names

    fact [fact]

    is_a *is_a*

    has_a has/apatternCheckList pattern-Check-List

    choose_Menu_Item choose Menu Item

    predicateName predicate

    first_in_10 >first_in_10

    Argumentele pedicatelor trebuie s&apar%in&unui domeniu predefinit alVP-ului. Un domeniu poate fi un domeniu standard , sau poate fi unul caredumneavoastr&l declara%i n sec%iunea de domenii (domains section).

    Exemplu:domains

    nume = symbolnumar = integer

    predicatespredicatul_meu(nume,num&r)

    Sec"iunea de domenii (the domains section) ne permite s& d&m numedistincte la diferite tipuri de date.

    Un alt exemplu sugestiv:domains

    nume, sex = symbolvarsta = integerpredicates

    persoan&(nume,vrst&,sex)

    Sec"iunea de scopuri (the goal section) . n esen%&sec%inea aceasta este la felca $i corpul unei reguli, este pur $i simplu o list& de subgoals. Exist& dou&diferen%e ntregoal 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

    sec%iunea de scopuri sunt toate satisf&cute atunci programul se ncheie cusucces, altfel dac& cel pu%in unul din subscopuri nu este satisf&cut atunci

    programul e$ueaz&.Iat&cum ar ar&ta a$adar un program n VP:

  • 7/26/2019 lucraredisertatie-seredeanpavel

    16/74

    DOMAINS/* ...domain declarations... */

    PREDICATES/* ...

    predicate declarations... */CLAUSES

    /* ...clauses (rules and facts)... */

    GOAL/* ...

    subgoal_1,subgoal_2,etc. */

    S&consider&m un exemplu de implementare a unei probleme n VP5.2:

    predicateslikes(symbol,symbol) - nondeterm (i,i)

    clauseslikes(ellen,tennis).likes(john,football).likes(tom,baseball).

    likes(eric,swimming).likes(mark,tennis).likes(bill,Activity):-

    likes(tom, Activity).

    goallikes(bill,baseball).

    Ultima linie din sec%iunea 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).

    Observa%i c&nu exist&nici un fapt n acest exemplu care s&spun&c&Bill iube$te baseball-ul.Pentru ca Prolog-ul s& descpore dac& lui Bill i place baseball-ul, po%i da scopul:likes(bill,baseball).

    Sistemul va r&spunde 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).ncerca%i de asemenea scopul:

  • 7/26/2019 lucraredisertatie-seredeanpavel

    17/74

    likes(bill,tennis).Sistemul va r&spunde: no.

    2.4.7. Exemple

    Se propun urm&toarele exemple pentru a fi rulate $i a se comenta rezultatul ob%inut. Deasemenea s&se realizeze o traducere n limbaj natural al lor.

    Exemplul 1: Preferin%e

    predicatesplace(symbol,symbol) % primul l place pe al doilea

    clausesplace(dorel,programare).place(adi,fotbal).place(nico,not).

    place(cosmina,baschet).place(ovidiu,handbal).

    goalplace(cosmina,baschet).

    Exemplul 2: Cump&rare ma$in&

    predicatescan_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)

    clausescan_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).

  • 7/26/2019 lucraredisertatie-seredeanpavel

    18/74

    for_sale(pizza).for_sale(lemon).for_sale(hot_rod).

    goal

    can_buy(Who,What).

    Exemplul 3: Legarea variabilelor.

    predicateslikes(symbol,symbol) - nondeterm (o,i), nondeterm (i,i)

    clauseslikes(ellen,reading).likes(john,computers).likes(john,badminton).likes(leonard,badminton).likes(eric,swimming).likes(eric,reading).

    goallikes(Person,reading),likes(Person,swimming).

    Exemplul 4: Variabile anonime.

    predicatesmale(symbol) - nondeterm (o)female(symbol) - nondeterm (o)

    parent(symbol,symbol) - nondeterm (o,o)

    clausesmale(bill).male(joe).

    female(sue).female(tammy).

    parent(bill,joe).parent(sue,joe).parent(joe,tammy).

    goalparent(Parent,_).

    2.4.8 Probleme propuse

    1. Se dau urm&toarele predicate:tata(X,Y) % X este tata lui Y

  • 7/26/2019 lucraredisertatie-seredeanpavel

    19/74

    mama(X,Y) % X este mama lui Ymasc(X) % X este de sex masculin

    fem(X) % X este de sex feminin

    Sa se scrie reguli Prolog pentru urm&toarele rela%ii:parinte(X,Y) % X este un p&rinte al lui Yeste_mama(X) % X este mam&este_tata(X) % X este tat&este_fiu(X) % X este fiusora(X,Y) % X este sora lui Y

    bunic(X,Y) % X este bunicul lui Ymatusa(X,Y) % X este m&tu$a lui Y

    2. Explica%i func%ionarea urm&torului program:

    predicatescar(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)

    clausescar(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).

    goalcar(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 unorvariabile astfel ncat cele doua predicate s&devin&identice.

    Acest proces are 3 etape:- compararea numelor (identice/nu);- compararea arit&%ilor (identice/nu);

    - asignarea de valori pentru variabile libere (legarea variabilelor libere);

  • 7/26/2019 lucraredisertatie-seredeanpavel

    20/74

    Exist&o list&de variabile libere (care con%ine ini%ial variabila anonim&_) $i o list&avaribilelor legate care este ini%ial vid&.

    Caracteristicile principale ale unific&rii 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, c&utarea unei potriviri ncepe ntotdeauna de la nceputulprogramului.c) Cnd un apel a g&sit o potrivire, spunem c&a reu$it $i se va ncerca satisfacerea urm&toruluisubscop.d) Dac&o variabil&se leag&la o valoare ntr-o clauz&, singurul mod n care se poate dezlegaeste prin backtracking.

    S&consider&m urm&torul exemplu:

    DOMAINS

    title,author = symbolpages = unsigned

    PREDICATESbook(title, pages)nondeterm written_by(author, title)nondeterm long_novel(title)

    CLAUSESwritten_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 urm&torul 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 ncercapotrivirea argumentelor X $i Y cu argumentele g&site n fiecare clauz& written_by dinprogram. Acest lucru se va face ncepnd cu prima clauz&din program, continund pn& laultima (from top to bottom of the program). Cnd va g&si o clauz& care se potrive$te cu

    scopul, d&valori variabilelor libere (aceste devenind legate astfel), astfel nct clauza $i scopuldevin identice; scopul se spune c&s-a unificat cu aceast&clauz&. Aceast&opera%ie de potrivire(match) se nume$te unificare (unification).

    Atta timp ct X $i Y sunt variabile libere n scop, $i o variabil& liber& poate fiunificat& cu oricare alt argument (chiar cu o alt& variabil& liber&), apelul (scopul) poate fiunificat cu prima clauz&written_bydin program, a$a 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 acestpunct VP-ul va afi$a:

  • 7/26/2019 lucraredisertatie-seredeanpavel

    21/74

    X=fleming, Y=DR.NOAtta timp ct VP-ul va c&uta toate solu%iile, 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 afi$a cea de-a doua solu%ie:X=melville, Y=MOBY DICK2 Solutions.

    Dac&, n schimb, da-i Prolog-ului urm&torul scop:written_by(X, "MOBY DICK").Visual Prolog-ul va g&si 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

    e$ueaz&. Astfel VP-ul va ncerca urm&toarea clauz&din program:written_by(melville, "MOBY DICK").

    Aici reu$e$te unificarea, X devenind legat de melville.

    S&vedem cum VP-ul va executa urm&torul scop:long_novel(X).Cnd VP-ul ncearc& s& satisfac& un scop, cerceteaz& dac& sau nu apelul se

    potrive$te 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&cuorice alt argument. Titleeste de asemenea liber n capul clauzei long_novel.Scopul potrive$tecapul regulei $i unificarea este f&cut&. VP-ul va ncerca acum satisfacerea subscopurilorregulei.

    long_novel(Title):-written_by(_, Title),

    book(Title, Length),Length>300.

    n ncercarea de satisfacere a corpului regulei, VP-ul va apela primul subscop dincorpul regulei: written_by(_, Title). Fi-%i aten%i c&, atta timp ct autorul c&r%ii nu conteaz&,variabila anonim&(_) va ap&rea n pozi%ia argumentului author.Apelul written_by(_, Title).devine subscopul curent, $i Prolog-ul caut&o solu%ie la acest apel.

    VP-ul caut& o potrivire pentru acest subscop de la nceputul programului pn& lasfr$itul acestuia. n aceast&ncercare, realizeaz&unificarea cu primul fapt pentru written_bydup&cum urmeaz&:written_by( _ , Title),

    | |written_by(fleming,"DR NO").

    Variabila Title se va lega de "DR NO" $i urm&torul subscop, book(Title, Length) ,este apelat cu aceast&legare.

    VP-ul ncepe acum urm&toarea c&utare, ncercnd s&g&seasc&o potrivire cu apelulpentru book. De ndat& ce Title este legat de "DR NO", apelul actual reprezint&book("DRNO", Length). Din nou c&utarea ncepe de la cap&tul programului. Observa%i c& prima

  • 7/26/2019 lucraredisertatie-seredeanpavel

    22/74

    ncercare de potrivire cu clauza book("MOBY DICK", 250) va e$ua, $i VP-ul va avansa la adoua clauz&bookn c&utarea de potrivire. Aici, titlul c&r%ii ntlne$te subscopul $i VP-ul leag&variabilaLengthde valoarea 310.

    Cea de-a treia clauz&din corpul regulei long_noveldevine acum subscopul curent:

    Length > 300.VP-ul face compara%ia $i ncepe; 310 este mai mare dect 300. n acest punct, toatesubscopurile din corpul regulii au reu$it $i astfel apelul long_novel(X) a reu$it. De ndat&cevariabila X din apel a fost unificat&cu variabila Titledin regul&, valoarea de care Title estelegat&cnd regula reu$e$te este returnat&la apel $i unificat&cu variabila X. Titleare valoarea"DR NO", cnd regula reu$e$te, astfel Visual Prolog ul va da la ie$ire:X=DR.NO1 Solution.

    2.5.2. Backtracking-ul

    Backtracking-ul este mecanismul prin care Prolog-ul caut& (sistematic) solu%iaprintre faptele $i regulile din program.

    Principiile de baza ale backtrackingului sunt:a) Subscopurile trebuie satisf&cute 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 mul%imea desubscopuri care trebuiesc satisf&cute.d) Un scop este satisf&cut atunci cnd sunt satisf&cute toate subscopurile sale.Observa!ie: al treilea mecanism care este logic este o regul&de ra%ionament: rezolu%ia.

    Odat&ce VP-ul ncepe c&utarea unei solu%ii pentru o problem&(goal), s-ar putea s&trebuie o decizie ntre 2 cazuri posibile. Astfel, va pune un pointer (semn - marker) $i vancerca satisfacerea primului subscop. Dac& acest subscop e$ueaz&, VP-ul se va ntoarce laacel pointer $i va ncerca satifacerea urm&torului subscop.

    S&consider&m urm&torul exemplu:

    predicatesnondeterm likes(symbol,symbol)tastes(symbol,symbol)

    nondeterm food(symbol)clauseslikes(bill,X):-

    food(X),tastes(X,good).

    tastes(pizza,good).tastes(brussels_sprouts,bad).

    food(brussels_sprouts).food(pizza).

  • 7/26/2019 lucraredisertatie-seredeanpavel

    23/74

    Acest mic program este alc&tuit din dou& seturi de fapte $i o regul&. Regula,reprezentat&de rela%ia likes, pur $i simplu ne spune c&Bill iube$te mnc&rile gustoase.

    Pentru a vedea cum func%ioneaz&backtracking-ul, s&-i d&m Prolog-ului urm&torulscop pentru a-l rezolva:

    likes(bill,What).

    Cnd Prolog-ul ncepe ncercarea de satisfacere a unui scop, porne$te de la nceputulprogramului n c&utarea unei potriviri.

    n acest caz va ncepe c&utarea unei solu%ii uitndu-se de la nceputul programuluipentru potrivire (match) a subscopului likes(bill,What).

    G&se$te o potrivire cu prima clauz&a programului, $i variabila What se va lega devariabila 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 c&utare de potrivire pentru acest apel ncepe deasemenea de la cap&tul programului.

    n ncercarea de satifacere a acestui prim subscop, VP-ul porne$te de la nceputulprogramului, c&utnd o potrivire (match) cu orice fapt sau cap al unei reguli, parcurgndprogramul n jos.

    G&se$te o potrivire cu apelul la primul fapt (fact) reprezentnd rela%ia food. Aicivariabila X este legat&de valoarea brussels_sprouts. De ndat&ce exist&posibilitatea a maimult de un r&spuns la apelul (call) food(X), VP-ul pozi%ioneaz&un backtracking pointlng&faptul food(brussels_sprouts). Acest punct va indica Prologului de unde s& nceap&c&utarea

    pentru o alt&eventual&potrivire a luifood(X).

    Cnd un apel a g&sit o potrivire cu succes, apelul se spune c&a reu$it, $i urm&torulsubscop poate fi ncercat.

    Cu X legat&de brussels_sprouts, urm&torul apel f&cut este:tastes(brussels_sprouts,good).$i VP-ul ncepe c&utarea de ncercare de satisfacere a acestui apel, din nou pornind

    de la nceputul programului. De ndat&ce nici o clauz&nu se potrive$te, apelul e$ueaz&$i VP-ul intr&n mecanismul de backtracking. Cnd backtracking-ul porne$te, Prolog-ul se ntoarcela ultimul backtracking point pozi%ionat. 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&pozi%ionarea acestui punct, $i ncearc&g&sirea unei altesolu%ii pentru apelul ini%ial.

    Apelul a fost food(X) , a$a 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 renun%at.G&se$te o potrivire cu faptul food(pizza) $i se rentoarce, de aceast&dat&cu variabila X legat&

    de valoareapizza.

  • 7/26/2019 lucraredisertatie-seredeanpavel

    24/74

    Prolog-ul se mut&acum la urm&torul subscop n regul&, cu noua valoare a variabileilegate. Un nou apel este f&cut, tastes(pizza,good). , $i c&utarea ncepe de la cap&tul

    programului. De aceeast&dat&o potrivire este g&sit&$i scopul a reu$it cu succes.Odat&ce variabila Whatdin scop este unificat&cu variabila X din regula likes , $i

    variabila X este legat&de valoareapizza, variabila What este acum legat&de valoareapizza$i

    VP-ul ne d&urm&toarea solu%ie:What = pizza1 solution.

    2.5.3. Controlul solu%iilor

    Sistemul Prolog intr& automat ntr-un proces de backtraking dac& acest lucru estenecesar pentru satisfacerea unui scop. Acest comportament poate fi n unele situa%ii deosebitde util, dar poate deveni foarte ineficient n alte situa%ii. Pentru a controla cautarea solu%iilor,avem la dispozi%ie 3 predicate: fail, not, cut.

    Predicatul fail e$ueaza ntotdeauna $i are ca efect for%area backtracking-ului. Sefolose$te atunci cnd se dore$te g&sirea tuturor solu%iilor. (Obs: orice alt predicat plasat ntr-oconjunc%ie dup&fail nu va fi niciodata evaluat!).

    Predicatul not reu$e$te atunci cnd subscopul nu poate fi dovedit. Nu putem aveavariabile libere ntr-un subscop negat. Putem n schimb folosi variabile anonime.

    Predicatul cut reu$e$te ntotdeauna (ntoarce ntotdeauna TRUE) $i are ca efectprevenirea backtrackingului. Odat&trecut peste un cut, nu se mai poate reveni la punctele debacktracking dinaintea lui ($i deci nici la alte defini%ii ale predicatului ce-l contine).

    Efecte secundare: nl&tur& toate punctele de backtracking cuprinse ntre clauzap&rinte (cea care are ! n corpul ei) $i pn&n momentul n care apare !.

    2.5.4. Exemple

    2.5.4.1. C&r%i $i autori

    domainstitlu, autor = symbol

    nr_pagini = integerpredicates

    carte(titlu, nr_pagini) % titlul si num&rul de paginiscrisa_de(autor, titlu) % autorul si titlul unei car%iroman_fluviu(titlu) % romane foarte mari

    clausesscrisa_de(sadoveanu, "Fratii Jderi"). % 1scrisa_de(melville, "Moby Dick"). % 2

    carte("Moby Dick", 250). % 3carte("Fratii Jderi", 1300). % 4

  • 7/26/2019 lucraredisertatie-seredeanpavel

    25/74

    roman_fluviu(Titlu) :- % 5scrisa_de(_, Titlu),carte(Titlu, Nr_pag),

    Nr_pag > 1000.

    2.5.4.2. Mnc&ruri preferate

    predicatesplace(symbol,symbol) % primului i place al doileagust(symbol,symbol) % gustul pe care l are primulmancare(symbol) % este de mncare

    clausesplace(dan, X) :- % 1

    mancare(X),gust(X, bun).

    gust(pizza, bun). % 2gust(conopida, rau). % 3

    mancare(conopida). % 4mancare(pizza). % 5

    *Observa%ie: Sec%iunea de goal se lasa la latitudinea studentului n a o completa. Depild&, pentru exemplul 3.4.2 se poate da ca scopplace(dan,pizza).Ce solu%ie va afi$a Prolog-

    ul? Binen%eles,yes1 Solution

    2.5.4.3. Juc&tori.

    domainscopil = symbolvarsta = integer

    predicates

    jucator(copil, varsta)joaca(copil,copil)

    clausesjucator(gheorghe, 9). % 1jucator(petru, 10). % 2jucator(maria, 9). % 3jucator(sorina, 9). % 4

    joaca(Pers1,Pers2):-jucator(Pers1,9),jucator(Pers2,9),Pers1 Pers2. % 5

  • 7/26/2019 lucraredisertatie-seredeanpavel

    26/74

    2.5.4.4. Folosirea predicatului fail. Program cu afi$area tuturor p&rin%ilor.

    predicatesmasc(symbol)

    fem(symbol)parinte(symbol, symbol) % primul este p&rinte pentru al doileaafisare % predicat pentru afi$area p&rin%ilor

    clausesmasc(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.

    goalmakewindow(1,7,7,"Parinti si copii",2,10,15,60),afisare.

    2.5.4.5. Folosirea predicatului not.

    predicateslikes_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).

  • 7/26/2019 lucraredisertatie-seredeanpavel

    27/74

    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 urm&toarei enigme politiste:Jean a fost omort mar%i. Singurii suspec%i sunt Luc, Paul, Alain, Bernard si Louis. Se $tie c&:- asasinul este cineva care dore$te 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&dore$te s&se r&zbune;- cineva are interesul s&-l omoare pe Jean dac&i mo$tene$te averea, i datoreaz&bani sau Jeanl-a surprins comi%nd o crim&.

    Ancheta a stabilit urm&toarele:- Luc are un alibi furnizat de Bernard pentru mar%i;- Paul are un alibi furnizat de Bernard pentru mar%i;- Louis are un alibi furnizat de Luc pentru mar%i;- Alain are un alibi furnizat de Luc pentru joi;- Alain este o persoan&dubioas&;- Paul vrea s&se r&zbune pe Jean;- Luc vrea s&se r&zbune pe Jean;- Bernard este mo$tenitorul lui Jean;- Jean este mo$tenitorul lui Louis;- Louis i datoreaz&bani lui Jean;

    - Luc i datoreaz&bani lui Jean;- Jean l-a v&zut pe Alain comi%nd o crim&;

    - Luc are o arm&;- Louis are o arm&;- Alain are o arm&.ntrebare:Cine este asasinul?

    2. Fie urmatoarea baz&de cuno$tin%e Prolog (mul%imea faptelor $i regulilor unui programProlog formeaz&baza de cuno$tin%e 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).

    ncerca%i implementarea n Prolog a acestei baze de date $i explica%i apoifunc%ionarea mecanismelor de unificare $i backtracking.

  • 7/26/2019 lucraredisertatie-seredeanpavel

    28/74

    CAPITOLUL AL III-LEA

    CONSTRUC"IA UNUI SISTEM EXPERT N LIMBAJUL

    PROLOG

    3.1. Construirea unui sistem expert mic.

    n acest exemplu, v&voi ar&ta cum s&se construiasc&un mic expert sistem, cu $apte

    animale. Sistemul expert va pronostica animalul n func%ie de ntreb&rile pe care ni le pune

    sistemul $i la care raspundem noi, ntreb&ri care fac apoi deduceri logice din r&spunsurile 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?yesdoes it eat meat?

    yeshas it a fawn color?yeshas it dark spots?Yes

    Animalul tau poate fi un ghepard!

    Visual Prolog are capacitatea de a verifica faptele $i regulile $i va oferi programul cucapacit&%ile de gndire, de inferare ca la un sistem expert.

    Primul pas este de a oferi cuno$tin%e cu care sistemul poate lucra, infera , acest lucru estecunoscut ca motor de inferen%&$i este prezentat&n sistemul : animal expert system.pro

    ./* Program animal expert system.pro */

    DATABASExpositive(symbol,symbol)xnegative(symbol,symbol)

  • 7/26/2019 lucraredisertatie-seredeanpavel

    29/74

    PREDICATESnondeterm animal_is(symbol)nondeterm it_is(symbol)ask(symbol,symbol,symbol)remember(symbol,symbol,symbol)positive(symbol,symbol)

    negative(symbol,symbol)clear_factsrun

    CLAUSESanimal_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).

  • 7/26/2019 lucraredisertatie-seredeanpavel

    30/74

    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.

    GOALrun.

  • 7/26/2019 lucraredisertatie-seredeanpavel

    31/74

    Fiecare animal este descris de un num&r de atribute pe care le are (sau nu are). Acestentreb&ri pe care utilizatorul le pune vor primi posibilitatea de a r&spunde sunt celepositive(X,Y)$i negative(X,Y).Sistemul, prin urmare, ar putea cere ceva degenul:

    Does it have hair?

    Dup&ce a primit un r&spuns la o astfel de ntrebare, pe care dori%i s&fie n m&sur&s&adauge r&spunsul la baza de date, astfel nct sistemul va fi capabil s&utilizeze informa%iileculese anterior, atunci cnd ra%ioneaz&sau infereaz&. *

    Pentru simplitate, acest program exemplu, va lua n considerare doar r&spunsurile pozitive$i negative, a$a c&folose$te o baz&de date care con%ine dou&predicate:

    DATABASExpositive(symbol, symbol)xnegative(symbol, symbol)

    Faptul c&animalul nu are parul este reprezentat dexnegative(has,hair).

    Normele, regulile depozitiv$i negativ, vor fi verificate pentru a vedea dac&r&spunsul estedeja cunoscut, nainte de a cere utilizatorului ntrebarea urm&toare

    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).

    Observa%i c&regula doua, attpozitivect $i negative, care asigur&o contradic%ie nu vaap&rea nainte de a cere utilizatorului.

    Predicatul askpune ntreb&rile $i organizeaz&r&spunsurile amintite. Dac&un r&spunsncepe cu litera Y, sistemul presupune raspunsul esteDa, n cazul n care ncepe cuN,r&spunsul esteNu

    /* 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)).

  • 7/26/2019 lucraredisertatie-seredeanpavel

    32/74

    /* Clearing Out Old Facts */

    clear_facts :- write("\n\nPlease press the space bar toexit\n"),retractall(_,dbasedom), readchar(_).

    For practice, type in the preceding inference engine and knowledge clauses. Add appropriatedeclarations to make a complete program, and then try out the result. The completed animal expertsystem is provided as chError! Bookmark not defined.e01.pro.

    Pentru practica, tasta%i n motorul de inferenta precedent $i clauze de cuno$tin%e. Adaugadeclara%iile necesare pentru a face un program complet, iar apoi ncerca%irezultat.Complet sistemul expert de animale este prev&zut 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.Solu%ia data de Sistemul Expert.

  • 7/26/2019 lucraredisertatie-seredeanpavel

    33/74

    CAPITOLUL AL IV-LEA

    INTRODUCERE N EXSYS CORVID

    Exsys Corvideste destinat pentru a va ajuta sa descrieti etapele logice ntr-un procesde luare a unei decizii ntr-un mod care permite transmiterea cunostiintelor catre altii ca sicum acestia ar dialoga cu un expert uman. Practic acest lucru este similar modului n carecineva ar explica 11111l1124l altei persoane cum sa rezolve o anumita problema.

    Primul pas n crearea unei aplicatii Corvideste de a alege o problema care sa poata fidescompusa n etape logice. Pe masura ce va creste experiente dumnavoastra n lucrul cuCorvid veti nvata sa utilizati metode avansate de abordare a unor probleme complexe. Pentrunceput 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. Dacamasina nu pornestesi indicatorul de combustibil este pegolAtuncimasina nu are combustibil.

    2. n caz cae duminicasie vreme bunastiu caAlexprobabiljoaca fotbal.

    Dupa cum se va vedea sistemele Corvidposeda mai multe tehnici de tratare aprobabilitatii.

    Una dintre cele mai bune utilizari ale luiExsys Corvideste pentru rezolvareaproblemelor care implica selectarea celei mai bune solutiiatunci cnd exista mai multe solutiiposibile.

    Exemplu demonstrativsimplu dar care va demonstra multe dintre caracteristicile

    fundamentale ale luiExsys Corvid:

    - problema de a decide pe care drum sa se mearga la serviciu cu masina de acasa spreserviciu :

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

    2. pe strazile orasului- este un drum ncet dar sigur. Exista foarte multebenzinarii deschise non-stop. Chiar daca exista probleme de trafic, sunt attea

    strazi alternative nct acest drum este ntotdeauna sigur.

  • 7/26/2019 lucraredisertatie-seredeanpavel

    34/74

    3. pe drumul de coasta - este un drum spendid de-a lungul coastei pe vremebuna, dar dificil pe vreme proasta si noaptea. Dureaza cam la fel de mult ca sidrumul pe strazile orasului. Nu are nsa benzinarii. Cnd e posibil este drumul

    perfect.

    4. Transpunerea pasilor de rezolvare n reguli IF:

    1. Dacan rezervor sunt sub 20 l de benzina,

    Atuncistrazile orasului sunt singura varianta.

    2. Daca conditiile de drum sunt rele

    Atuncisa nu se aleaga drumul de coasta.

    3. Daca trebuie sa ajungeti repede la serviciu

    sinu sunt probleme de trafic pe autostrada

    Atuncimergeti pe autostrada.

    4. Dacatrebuie sa ajungeti repede la serviciu

    si nu sunt probleme de trafic pe autostrada

    Atuncinu mergeti pe autostrada.

    5. Dacanu trebuie sa ajungeti repede la serviciu

    Atuncidrumul de coasta se prefera.

    Variabile Corvid

    Toata logica n Corvid este definita prinutilizarea variabilelorCorvid. Variabilelesunt componentele pe care Corvidle 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 utiliznddoar trei dintre acestea:

    1. Variabile de tip Lista Statica- aceasta este o lista simpla multivaloare. Estevariabila Corvidcel mai des utilizata si este indicat sa fie utilizata orict de des

  • 7/26/2019 lucraredisertatie-seredeanpavel

    35/74

    este posibil. Aceasta variabila este formata dintr-o propozitie si doua sau maimulte 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 multprea 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 posibiledintre care sistemul trebuie sa aleaga cea mai buna solutie. Lor li se poateasigna o valoare de confidenta care arata daca respectivele solutii sunt orecomandare adecvata sau neadecvata. O anumita variabila poata avea asignatadiferite valori prin mai multe reguli. Aceste valori sunt combinatii din toateregulile pentru a determina o valoare de confidenta finala pentru aceavariabila. Corvidpermite mai multe moduri de a combina valorile deconfidenta. Cel mai simplu mod este nsumarea lor. Va puteti nchipui valorileca un numar de puncte care se aduna sau scad din scorul unei solutii

    posibile(sau unei recomandari). ntr-o regula, variabilelor de confidenta li seasigneaza 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 poatefi 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

  • 7/26/2019 lucraredisertatie-seredeanpavel

    36/74

    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. Astfelrezulta 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 logicentr-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

  • 7/26/2019 lucraredisertatie-seredeanpavel

    37/74

    Blocurile de comandapot include un control procedural foarte complex, cu buclerepetitive si imbricate(ncuibate), dar majoritatea sistemelor au blocuri de comanda foartesimple 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 Blockpentru 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 debutoane de control din stnga-jos a ferestrei. Acestea sunt comenzi foarte puternicepentru sisteme avansate, dar sunt rar necesare n majoritatea sistemelor.

    2) Comenzile operationale spun aplicatiei Corvid sa efectueze anumite operatiispecifice.

    Exemplu:

    Se da click pe butonul Addcare deschide fereastra Commands(Fig.1.1), Tab-ul Variables, cel mai utilizat, permite construirea a trei tipuri de comenzi pentru variabile.

    Fig.1.1

  • 7/26/2019 lucraredisertatie-seredeanpavel

    38/74

    a. SET - asigneaza o valoare unei variabile. n majoritatea cazurilor acest lucru se facemai bine n blocurile logice, astfel nct aceasta asignare de obicei nu este necesara nsistemele simple.

    b. DERIVE - utilizeaza blocurile logice si alte mijloace pentru a gasi valoarea uneivariabile. Acest tip de comanda pentru variabile este cel mai adesea utilizata pentru

    executia aplicatiior Corvid. O simpla comanda DERIVE va spune motorului deinferente Corvid sa utilizeze toate blocurile logice pentru a determina valoarea uneiasau mai multor variabile utiliznd nlantuirea napoi(backward chaiining) daca estenecesar.

    c. ASK - ntreaba utilizatorul final valoarea unei variabile, indiferent de logicasistemului.

    Corvidcere automat utilizatorului valorile unor variabile ntr-o ordine determinata delogica sistemului. Cteodata dezvoltatorul s-ar putea sa doreasca sa forteze ca valoarea uneivariabile sa fie ceruta la un anumit moment.

    Majoritatea sistemelor simple utilizeaza o singura comanda DERIVEpentru a executaregulile.

    n exemplul nostru, trebuie spus sistemului Corvidsa utilizeze regulile din blocurilelogice pentru a calcula valoarea pentru fiecare variabila de confidenta din sistem(fiecaresolutie 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

  • 7/26/2019 lucraredisertatie-seredeanpavel

    39/74

    Astfel vor fi testate toate regulile din blocurile logice care seteaza valori pentruvariabilele 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:

    Command

    Rezulta fereastra Command, din care se selecteaza Tab-ulResults(Fif.1.3).

    Fig.1.3

    DERIVE CONF

    Add Below

  • 7/26/2019 lucraredisertatie-seredeanpavel

    40/74

    Se bifeaza :

    Display Default Results Screen

    OK

    Rezulta

    Vor fi derivate valori pentru toate variabilele de confidenta, utiliznd nlantuirea siintroducerea 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, sealege butonul Back, Restartsau butonul Exitdin dreapta jos pentru a ncheia executia.Applet-ul Corvid Runtime contine motorul de inferenteCorvid. Acesta este creierul sistemuluiCorvid. El verifica blocul de comanda pentru a vedea ce actiune i s-a spus sa faca si apoiutilizeaza 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

  • 7/26/2019 lucraredisertatie-seredeanpavel

    41/74

    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 Variablesare mai multe optiuni. n partea stnga gasim si selectam variabiladorita. Pentru a adauga o variabila noua dam click pe butonul New. Aceasta actiune duce laafisarea ferestrei de dialogNew Variable:

    Fig.1.5

  • 7/26/2019 lucraredisertatie-seredeanpavel

    42/74

    n aceasta fereastra introducem numele variabilei, selectam tipul acesteia si apoi clickpe 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 variabileica n final sa o afiseze ca si rezultat. Prompt-ul se introduce n fereastraVariablelaMain

    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. Tipulcontrolului poate fi selectat alegnd Tab-ulAsk With, iar de aici se selecteaza unul dintrecontroalele dorite:

    Fig.1.7

  • 7/26/2019 lucraredisertatie-seredeanpavel

    43/74

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

    Numai o valoare poate fi selectata din cadrul acestui grup n timp ce oricare altavaloare selectata anterior se deselecteza implicit.

    Checkbox-ul se aseamana cu butoanele radio, doar ca pot fi selectate mai multe valorisimultan. 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 definirealogica a sistemului si pe care utilizatorul o poate selecta. Definirea textului valorii este similarcu definirea prompt-ului pentru variabile. La fel ca si n cazul prompt-ului, acesta este o

    prescurtare a numelui.

  • 7/26/2019 lucraredisertatie-seredeanpavel

    44/74

    Full Text

    Full Text este textul care descrie valoarea. Acesta poate avea orice lungime. FullText-ul va fi afisatutilizatorului 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 latastatura pentru transcrierea valorii si la Short Text(Fig.1.8).

    Variabilele numericepot avea o limita minima(Lower Limit) si o limitamaxima(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 fiacceptata.

    Fig.1.9

    Variabila de tip colectie este o lista de tip sir de puncte. Punctele pot fi adaugate saumutate din lista de sistem. Variabilele Collection sunt folosite adesea cu MetaBlocurile.

    Variabilele de confidenta calculeaza o valoare finala de confidenta a variabilelor. Ovariabila poate avea asociate mai multe valori prin mai multe reguli.

    Parametrul Calculation controleaza cum pot fi combinate diferite reguli pentru a seobtine o valoare de confidenta finala.

    SUM - aduna toate valorile asignate unei variabile

    AVERAGE - face media tuturor valorilor asignate unei variabile

  • 7/26/2019 lucraredisertatie-seredeanpavel

    45/74

    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

  • 7/26/2019 lucraredisertatie-seredeanpavel

    46/74

    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 EditName.

    Blocul logic este alcatuit din mai multe noduri IF si THEN care descriu logica

    sistemului.

    Pentru a adauga un nod IFalegem din grupul IF din partea de jos a ferestreibutonul Add. Aceasta alegere are ca efect deschiderea fereastreiAdd to block (fig.1.12). npartea stnga a ferestrei sunt specificate toate variabilele active n momentul actual:

    1) Selectam variabila care ne intereseaza si din fereastra dreapta tab-ulStaticList selectam valoarea dorita pentru aceasta variabila

    2) Click Add to List

    Fig.1.12

    Click pe butonul Donedin partea stnga jos se adauga nodul n fereastra Logic Block.

    Daca exista mai multe noduri IFacestea se adauga n blocul logic astfel:

    1) Folosind butonul Belowdin grupulANDpentru a adauga un nod dupa nodulselectat

    2) Folosind butonul Above din grupulANDpentru a adauga un nod naintea noduluiselectat

    3) Folosind butonul Belowdin grupulSame Levelpentru a adauga un nod la acelasinivel cu cel selectat, dar pozitionarea acestuia n blocul logic va fi dupa nodulselectat.

  • 7/26/2019 lucraredisertatie-seredeanpavel

    47/74

    4) Folosind butonul Abovedin grupulSame Levelpentru a adauga un nod la acelasinivel cu cel selectat, dar pozitionarea acestuia n blocul logic va fi naintea noduluiselectat.

    Adaugarea nodurilor THEN

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

    Fig.1.13

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

    Fig.1.14

    Fig.1.15

  • 7/26/2019 lucraredisertatie-seredeanpavel

    48/74

    A treia etapa: adaugare Command Block

    Dnd click pe icon-ul Add a New Command Block , se va deschide fereastraCommand Block.

    Din partea de jos a ferestrei se alege din grupul Commandbutonul Add( a se vedeaexplicatiile de la blocurile de comanda).

    A patra etapa: lansarea n executie

    Aceasta se face dnd click pe icon-ul Run .

  • 7/26/2019 lucraredisertatie-seredeanpavel

    49/74

    CAPITOLUL AL V-LEA

    CONSTRUC"IA UNUI SISTEM EXPERT N EXSYS CORVID

    IDEEA CE ST!LA BAZA PROTOTIPULUI AM G!SIT-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 g&se$teun animal dintr-un grup de animale, definite ini%ial, n func%ie de r&spunsurile date deutilizator la ntreb&rile sistemului expert

    S&vedem animalele

    Aceste informa%ii le-am aranjat ntr-o schem&logic&

  • 7/26/2019 lucraredisertatie-seredeanpavel

    50/74

    Lans&m n execu%ie generatorul de sisteme expert

    EXYS CORVID

    Dup&nc&rcarea generatorului, din meniul FilealegemNew, iar

    n fereastra care se deschide se alege calea $i numele sistemului

    expert

  • 7/26/2019 lucraredisertatie-seredeanpavel

    51/74

    Corvid va lansa automat fereastra destinat&introducerii

    variabilelor sistemului

  • 7/26/2019 lucraredisertatie-seredeanpavel

    52/74

    Dup&validarea ferestrei, sistemul va reveni la fereastra ce con%ine

    toate variabilele sistemului

  • 7/26/2019 lucraredisertatie-seredeanpavel

    53/74

    Se introduc $i urm&toarele variabile

  • 7/26/2019 lucraredisertatie-seredeanpavel

    54/74

    Se introduce variabila OK

  • 7/26/2019 lucraredisertatie-seredeanpavel

    55/74

    Pentru ca aplica%ia s&fie func%ional&, n EXYS CORVID, mai

    trebuie s&parcurgem o etap&

    Realizarea

    BLOCULUI DE COMAND$

    Se poate atribui acestei ferestre un nume sugestiv

  • 7/26/2019 lucraredisertatie-seredeanpavel

    56/74

  • 7/26/2019 lucraredisertatie-seredeanpavel

    57/74

  • 7/26/2019 lucraredisertatie-seredeanpavel

    58/74

  • 7/26/2019 lucraredisertatie-seredeanpavel

    59/74

  • 7/26/2019 lucraredisertatie-seredeanpavel

    60/74

  • 7/26/2019 lucraredisertatie-seredeanpavel

    61/74

  • 7/26/2019 lucraredisertatie-seredeanpavel

    62/74

  • 7/26/2019 lucraredisertatie-seredeanpavel

    63/74

  • 7/26/2019 lucraredisertatie-seredeanpavel

    64/74

  • 7/26/2019 lucraredisertatie-seredeanpavel

    65/74

  • 7/26/2019 lucraredisertatie-seredeanpavel

    66/74

    Inregistrarea Licentei Corvid

    Sistemul expert Corvid

    "eredan Pavel

  • 7/26/2019 lucraredisertatie-seredeanpavel

    67/74

    CAPITOLUL AL VI-LEA

    PLATFORM#WEB EDUCA"IONAL#

    WWW.KFP.RO PROIECTE EDUCA"IONALE-

    DE CONSTRUC"IE A SISTEMELOR EXPERT

    Fig.1 Autentificarea in partea de administrator

  • 7/26/2019 lucraredisertatie-seredeanpavel

    68/74

    Fig.2 Structura meniului backend - frontend

    Fig.3 Articolele sitului, cotinutul.

  • 7/26/2019 lucraredisertatie-seredeanpavel

    69/74

    Fig4. Managemtul articolelor.

    Fig.5 Administrarea continutului

  • 7/26/2019 lucraredisertatie-seredeanpavel

    70/74

    Fig.6 Administrarea continutului

    Aspectul sitului

  • 7/26/2019 lucraredisertatie-seredeanpavel

    71/74

    Joomla! este un Content Management System (CMS), premiat in nenumarate ocazii, care teajuta sa construiesti websiteuri si alte puternice aplicatii online. In plus, Joomla! este o solutieOpen Source disponibila tuturor, gratuit.

    Joomla! poate fi folosita pentru a administra cu usurinta orice componenta a websiteului, de laadaugarea 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 non-programatori.Majoritatea oamenilor nu au probleme cu instalarea softului nostru, dar oferim sifoarte mult ajutor incepatorilor. Avem o comunitate activa, in crestere, atingand peste 40.000utilizatori si dezvoltatori prietenosi pe forumul nostru, gata sa va ajute.

    Odata Joomla! instalata si functionala, este foarte simplu, chiar si pentru utilizatorul non-tehnic, de a adauga continut, actualizare imagini si administrarea datelor sensibile care ajuta lafunctionarea optima a organizatiei sau companiei voastre. Oricine avand cunostinte primarede 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 depresa, sa administrati pagini cu detaliile angajatilor, oferta de munca, imagini cu produse si sacreati 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 necesardezvoltarii site-ului vostru. Pentru multi utilizatori, insa, adevarata putere a Joomla! consta inframework-ul care da posibilitatea miilor de programatori din intreaga lume sa creeze add-on-uri si extensii extrem de puternice. Iata doar cateva exemple din sutele de extensii, oferitegratuit 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-vasa 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

  • 7/26/2019 lucraredisertatie-seredeanpavel

    72/74

    Joomla! sau extensiile gratuite.Din fericire, Joomla! ofera un framework foarte flexibil, permitand dezvoltatorilor sa creezeadd-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 deproprietate 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.

  • 7/26/2019 lucraredisertatie-seredeanpavel

    73/74

    CONCLUZII

    Lucrarea de Diserta%ie PLATFORM#WEB de CONSTRUC"IE A

    SISTEMELOR EXPERT din cadrul masterului TEHNOLOGII PENTRUDEZVOLTARE WEBse nscrie n liniile directoare ale procesului educa%ional

    caracteristic SOCIET#"II CUNOA!TERII $i anume :

    -s&nv&%&m cum s&nv&%&m

    - dezvoltarea spiritului vizionar $i creativ,

    - cunoa$terea acumulat&s&produc&efecte educa%ionale, economice, etc...

    Prin aceast&sec%iune Proiecte educa%ionale de pe Platforma de Fuzionare aCunoa$terii (KFP) punem la dispozi%ia celor ce doresc s&asimileze primele no%iuni

    despre Inteligen%&Artificial&, $i modul de construc%ie a Sistemelor Expert utiliznd

    Visual Prolog 5.2 si EXSYS CORVID

  • 7/26/2019 lucraredisertatie-seredeanpavel

    74/74

    BIBLIOGRAFIE

    http://www.visual-prolog.com/?gclid=CODQjdqQ6bACFQRJ3wod93BMUg

    http://exsys.com/

    http://www.joomla.org/