Limbajul DE Programare Turbo Prolog
UNIVERSITATEA SPIRU HARET
FACULTATEA DE STIINTE ECONOMICE BUCUREȘTI
Programul de studii universitare de masterat CAEIP
PROIECT LA DISCIPLINA “SISTEME EXPERT DE GESTIUNE (SEG)”
(Semestrul 2)
SISTEME EXPERT IN ECONOMIE:
LIMBAJUL DE PROGRAMARE TURBO PROLOG
Titularul disciplinei :
Prof.univ.de. Maria ANDRONIE,
Prof.univ.dr. Zenovic GHERASIM
Masterand :
Uceanu (Cruceru-Uceanu) Teodora
BUCUREȘTI
2015-2016
CUPRINS
CAPITOLUL I – NOTIUNI INTRODUCTIVE SISTEME EXPERT DE GESTIUNE
CAPITOLUL II – PREZENTAREA LIMBAJ DE PROGRAMARE TURBO PROLOG
BIBLIOGRAFIE
CAPITOLUL I – NOTIUNI INTRODUCTIVE SISTEME EXPERT DE GESTIUNE
Sistemele expert fac parte din ramura informaticii denumită inteligență artificială. Prin inteligență artificială, AI, (Artificial Intelligence) se înțelege tehnologia informatică care privește simularea pe calculatorul electronic a unor elemente ale inteligenței umane (deducția logică, capacitatea de a învăța din experiență, obținerea unor concluzii pe baza unor date incomplete, recunoașterea vorbirii etc.). Prin inteligență artificială, cunoștințele umane sunt captate și prelucrate simbolic de un sistem de calcul.
Inteligenta artificiala reprezinta efortul de dezvoltare a sistemelor bazate pe calculator (atat hardware, cat si software), care se comporta ca si oamenii. Sistemele acestea sunt capabile sa invete limbaje naturale, sa indeplineasca sarcini fizic coordonate (robotica), folosesc aparatura de perceptie care asigura informatiidespre comportamentul lor fizic si limbaj (sisteme de perceptie vizuala si orala) si simuleaza expertiza umana si luarea deciziei (sisteme expert). Aceste sisteme se pot manifesta logic, pot avea intuitie sau sa rationeze. Masinile inteligente reprezinta sisteme hardware care indeplinesc sarcinile inteligentei artificiale. Ca urmare, elementele familiei sistemelor de inteligenta artificiala sunt:
– masinile inteligente,
– prelucrarea limbajului natural,
– sistemele expert,
– robotica si
– sistemele de perceptie.
Sistemele de inteligenta artificiala de succes sunt bazate pe expertiza umana, cunoastere si modele de rationamente selectate, dar ele nu se pot manifesta la nivelul inteligentei umane. Sistemele de inteligenta artificiala existente nu pot ajunge din urma pe cele cu solutii noi de rezovare a problemelor. Sistemele existente extind puterea expertilor, dar fara a se putea substitui acestora. Sistemelor de inteligenta artificiala existente le lipseste sensul comun si generalitatea naturala a fiintei umane inteligente.
Inteligenta umana este mult mai complexa si mult mai larga decat inteligenta calculatoarelor. Un factor cheie a fiintelor umane este abilitatea acestora de a dezvolta asocieri si de a folosi metafore si analogii. Folosirea metaforei si analogiei conduce la crearea de catre oameni a noi reguli, aplicarea vechilor reguli la noile situatii si, actiunea intuitiva si instinctiva in afara regulilor. Multe din ceea ce se denumeste sens comun sau generalitate la fiinta umana rezulta din abilitatea de a crea metafore si analogii.
De asemenea, inteligenta umana cuprinde o abilitate unica de a impune un aparat conceptual asupra lumii inconjuratoare. Metaconceptele cum sunt „cauza si efectul” „timpul”, ca si conceptele unei ordini de nivel scazut, sunt toate impuse de fiintele umane asupra lumii care le inconjoara. Gandirea in termenii acestor concepte si actiunea asupra lor reprezinta caracteristici centrale ale comportamentului uman inteligent.
Desi aplicatiile de inteligenta artificiala sunt mult mai limitate decat inteligenta umana, acestea prezinta mare ineres pentru management si afaceri din urmatoarele motive:
– conservarea expertizei care ar putea fi pierdută în situația pensionărilor, demisiilor sau decesului unui expert uman cu cunoștințe deosebite într-un anumit domeniu;
– stocarea informației într-o formă activă pentru a se crea o bază de cunoștințe organizaționale pe care angajații să o poată consulta (de exemplu, cărți sau manuale electronice) astfel încât pe aceasta alții să poată învăța reguli ce nu se găsesc în cărți în format pe hârtie;
– crearea unui mecanism care nu este subiect al simțurilor umane cum sunt oboseala sau stresul. Aceasta poate fi utilă în special când joburile sunt fizic, legat de mediu sau mental periculoase pentru om. Aceste sisteme sunt, de asemenea, utile managerilor în timp de criză;
– eliminarea rutinei și joburilor ce produc insatisfacție pentru om;
– îmbunătățirea bazei de date organizaționale prin propunerea de soluții la problemele specifice care sunt complexe și masive ca să fie analizate de ființele umane într-o perioadă scurtă de timp.
Sistemul expert reprezintă un sistem de programe pe calculator, fundamentat pe metode și tehnologii ale inteligenței artificiale, care stochează cunoștințele mai multor experți umani dintr-un domeniu bine definit și pe care apoi le utilizează pentru rezolvarea problemelor dificile specifice domeniului.
Reprezentarea cunoașterii include domeniul cunoașterii, limbajul de reprezentare a cunoașterii și strategiile de inferențiere. Domeniul cunoașterii desemnează ceea ce este necesar a fi reprezentat din domeniul problemei de rezolvat. Limbajul de reprezentare a cunoașterii asigură metodele, modelele și modul cum trebuie realizată reprezentarea cunoașterii. Strategiile (mecanismele) de inferențiere arată modul în care se pot utiliza regulile. Regulile permit descrierea modului în care se pot folosi faptele. Faptele, prezentate sub formă de aserțiuni, sunt constituite din informațiile primare care realizează descrierea elementelor domeniului cunoașterii. Într-o manieră similară cu structurile de date, se definesc structurile de cunoștințe care servesc pentru memorarea și prelucrarea cunoștințelor printr-un proces de inferențiere (raționament).
OBIECTIVE: stabilirea principalelor aspecte legate abordările de bază în inteligența artificială, precum și de apariția, dezvoltarea și structura intimă a sistemelor expert.
CONCEPTE CHEIE: inteligență artificială, sisteme expert, subsistemul cognitiv și subsistemul rezolutiv ale unui sistem expert, sisteme fuzzy, calcul conexionist, algoritmi evolutivi și algoritmi genetici.
Un sistem expert prezinta urmatoarele caracteristici:
relevanta mare
specializarea intr-un domeniu bine definit
natura simbolica a cunostintelor prelucrate
independenta cunostintelor de mecanismul de rationament (inferetiere)
abordarea declarativa a cunostintelor
posibilitatea de a trata cunostinte incomplete si inexacte
capacitatea de a explica rationamentele efectuate
exploatarea dinamica a cunostintelor prin intermediul mecanismului de rationament
folosirea unor metode empirice (bazate numai pe experienta) alaturi de metode stiintifice in rezolvarea problemelor.
Sistemele expert asigura extinderea prelucrarilor in domenii dificil de algoritmizat, ce sunt dominate de informatii calitative (macroeconomic, juridic, politic, educational, etc.). Arhitectura unui sistem expert cuprinde:
baza de cunostinte: cuprinde date sub forma de cunostinte (reguli, retele semantice, retele neuronale, modele hibride, etc.) ale unui domeniu specializat. Aceste cunostinte sunt expresia entitatilor si a relatiilor dintre ele din universul real.baza de fapte: include date despre problema de rezolvat (formularea) si fapte generate de procesul de rationamente efectuat de motorul de inferente asupra bazei de cunostinte.
motorul de inferente: reprezinta partea de prelucrare a sistemului expert si constituie subsitemul rezolutiv al acestuia.
modulul de achizitie a cunostintelor: permite conversia cunostintelor din forma asigurata de inginerul de cunostinte in forma interna de stocare pe suport magnetic specifica sistemului de calcul (reprezentarea cunostintelor); reprezinta o interfata de comunicare cu baza de date a sistemului expert (catre interior) si cu alte sisteme informatice (catre exteriorul sistemului expert).
modulul explicativ: asigura prezentarea in limbaj natural a justificarii rationamentelor executate de motorul de inferente si a intrebarilor adresate utilizatorului.
interfata cu utilizatorul: permite dialogul utilizatorului cu sistemul expert, pentru introducerea datelor de intrare si afisarea rezultatelor pentru problema de rezolvat.
Toate acestea formeaza subsistemul cognitiv al sistemului expert, ca sistem bazat pe cunostinte, KBS (Knowledge-Based System).
Cunostintele realizeaza descrierea rezolvarii unei clase de probleme. Faptele asigura descrierea asertiunilor (afirmatiilor) de instantiere a unei probleme de rezolvat ce apartine unei anumite clase de probleme.
Prin sistem expert cu reguli de producție este definit un sistem expert care utilizează ca metodă de reprezentare a cunoștințelor metoda regulilor de producție.
Un motor de inferențe (subsistemul rezolutiv) al unui sistem expert cu reguli de producție este caracterizat prin declanșarea regulilor, interogarea utilizatorului, adăugarea răspunsului utilizatorului în baza de fapte, inferarea unei noi fapte dintr-o regulă, adăugarea faptei obținute în procesul de inferențiere în baza de fapte, compararea faptelor din baza de fapte cu componentele corespunzătoare din reguli; atunci când se realizează potrivirea faptelor din baza de fapte cu faptele din reguli, se produce declanșarea regulilor; controlarea atingerii scopului (goal) prestabilit; declanșarea celui mai mic număr de reguli ce sunt necesare pentru soluționarea problemei de rezolvat.
Fiecare motor de inferențe este fundamentat pe derularea unui ciclu de bază (cu patru faze) care nu depinde de modul de raționament: selecția, filtrarea, rezolvarea conflictelor și execuția .
Organizarea cunoașterii se referă la metoda de reprezentare a cunoștințelor (reguli de producție, de exemplu), verificarea cunoașterii (asigurarea corectitudinii bazei de cunoștințe) și validarea procesului de inferențiere (se execută, periodic, pe timpul testării sistemului expert). Baza de cunoștințe a unui sistem expert cu reguli de producție este actualizată și întreținută permanent, prin adăugare de noi cunoștințe, cu o atentă monitorizare a nivelului de performanță a sistemului expert.
Interfața cu utilizatorul asigură dialogul utilizatorului cu sistemul expert, pentru introducerea datelor de intrare și afișarea rezultatelor pentru problema de rezolvat. Modelele utilizate pentru proiectarea interfețelor cu utilizatorul sunt modelul proiectantului, modelul sistemului și modelul utilizatorului.
OBIECTIVE Definirea componentelor sistemelor expert cu reguli de producție: motorul de inferențe, manipularea bazei de cunoștințe, proiectarea interfeței cu utilizatorul.
CONCEPTE CHEIE reguli de producție, selecție, filtrare, rezolvarea conflictelor, execuție, metode inductivă, metoda deductivă, metoda de control circumstanțial.
Un motor de inferențe (subsistemul rezolutiv) al unui sistem expert cu reguli de producție îndeplinește următoarele funcții: declanșarea (activarea) regulilor; interogarea utilizatorului (întrebare); adăugarea răspunsului utilizatorului în baza de fapte; inferarea unei noi fapte dintr-o regulă (ce aparține bazei de reguli); adăugarea faptei obținute în procesul de inferențiere în baza de fapte; compararea faptelor din baza de fapte cu componentele corespunzătoare din reguli; atunci când se realizează potrivirea faptelor din baza de fapte cu faptele din reguli, se produce declanșarea regulilor; controlarea atingerii scopului (goal) prestabilit; declanșarea celui mai mic număr de reguli ce sunt necesare pentru soluționarea problemei de rezolvat.
Fiecare motor de inferențe este fundamentat pe derularea unui ciclu de bază (cu patru faze) care nu depinde de modul de raționament: selecția, filtrarea, rezolvarea conflictelor și execuția.
Selecția (restricția) asigură extragerea din baza de reguli a unui submulțimi (partiție) de reguli și din baza de fapte a unei submulțimi (partiție) de fapte, partiții ce vor constitui elementele ce caracterizează subdomeniul de rezolvare a problemei.
Filtarea (pattern matching) permite compararea părții de premisă din regulile selectate cu faptele specifice problemei de rezolvat, cu scopul de a determina o submulțime de reguli declanșabile, denumită submulțime de conflict. Operația de comparare se poate termina cu succes (au rezultat una sau mai multe reguli declanșabile) sau cu eșec (nu a rezultat nici o regulă declanșabilă).
Rezolvarea conflictelor are loc în situația existenței unui rezultat al filtrării cu mai multe reguli declanșabile și este necesar să fie aleasă numai o regulă declanșabilă pentru a fi executată. Se poate opta pentru unul dintre următoarele criterii de alegere a regulii declanșabile: prima regulă din listă, cea mai puțin complexă regulă (cu cel mai mic număr de fapte în premisă), cea mai specifică regulă, cea mai utilizată regulă.
Execuția asigură activarea regulii desemnate în faza precedentă ce are ca efect adăugarea uneia sau mai multor fapte în baza de fapte. Pentru rezolvarea problemei, motorul de inferențe poate executa mai multe iterații ale ciclului de bază prezentat, oprirea având loc în funcție de metoda de inferență (raționament) folosită.
Dacă soluția găsită este acceptabilă, acesta se afișează și sunt precizate metodele de inferențiere (raționament) folosite. În caz contrar (soluția găsită nu este acceptabilă), dacă în faza de execuție a regulilor, s-a schimbat „situația inițială”, atunci se pornește un ciclu rezolutiv nou. Dacă nu s-a schimbat „situația inițială”, atunci problema nu are soluție și se oprește procesul rezolutiv.
Metodele de inferență (raționament) ce pot fi folosite de motorul de inferență sunt:
metoda deductivă (strategie de control înainte)
metoda inductivă (strategie de control înapoi)
metoda mixtă
metoda de control circumstanțial.
Metoda deductivă (strategia de control înainte, forward chaining) Metoda inductivă (strategia de control înapoi, backward chaining) pleacă de la scopul problemei de rezolvat și conține procese inductive de raționament prin care se găsesc faptele care satisfac scopul stabilit, în următoarea succesiune: se stabilește fapta particulară ce îndeplinește calitatea de scop (goal); se analizează dacă regulile supuse selecției prezintă în partea de concluzii scopul stabilit; premisele acestor reguli reprezintă subscopuri care se supun demonstrației; procesul se repetă până când toate subscopurile puse în evidență sunt demonstrate (se obțin reguli declanșabile); în caz contrar, când nu se obține nici o regulă declanșabilă, se înregistrează situația de eșec.
Metoda de control circumstanțial este fundamentată pe faptul că regulile sunt valabile în funcție de circumstanțele aplicării acestora. Alături de evaluarea condiției de adevăr ce depinde de starea curentă a problemei de rezolvat, este necesară și efectuarea unei analize a corelațiilor ce rezultă din situația existentă în acel moment pentru obiectivele problemei de rezolvat.
În domeniul economic, problema de rezolvat cu ajutorul sistemului expert este adecvată dacă îndeplinește mai multe condiții: problema este posibilă, potrivită și justificabilă (profitabilă); natura problemei presupune manipulări simbolice și euristici; problema este complexă și dificilă; scopul problemei servește unei utilități imediate și de perspectivă. Alegerea unui instrument de dezvoltare a sistemului expert este funcție de problemă, resursele alocate, timpul la dispoziție și iscusința și experiența cogniticianului. Cogniticianul are responsabilitatea fundamentală de a realiza achiziția și organizarea cunoașterii, obținând astfel baza de cunoștințe.
Achiziția cunoașterii reprezintă procesul de colectare, structurare și organizare a cunoașterii, folosind una sau mai multe surse (experți umani, documente etc), cu scopul de a obține stocarea acesteia în baza de cunoștințe a sistemului expert pentru folosirea ulterioară în rezolvarea problemelor. Achiziția cunoașterii se realizează în cinci faze: identificarea caracteristicilor problemei de rezolvat (rezultă cerințele problemei de rezolvat), conceptualizarea (formularea conceptelor care fac obiectul reprezentării cunoașterii), formalizarea (proiectarea structurii și organizarea cunoașterii), implementarea (formularea regulilor în cazul sistemelor expert cu reguli de producție) și testarea (validarea și testarea bazei de cunoștințe). De la o fază la alta se pot realiza, când este cazul, prin reluare, reidentificarea, reconceptualizarea (reformularea), reproiectarea, rafinarea regulilor și retestarea bazei de cunoștințe.
Colectarea cunoașterii (elicitation of knowledge) se obține prin metode manuale (interviul, analiza de caz, brainstorming-ul, prototipizarea, comentariile etc.), metode semiautomate (asistate de calculator) și metode automate.
Dintre metodele conduse de expertul uman (manuale și semiautomate) se menționează metoda manuală autoraportul expertului ce prezintă toate conceptele și relațiile de nivel înalt cu privire la problema de rezolvat și metodele asistate de calculator care au, mai întâi, ca rezultat, un model inițial al bazei de cunoștințe. Modelul inițial al bazei de cunoștințe se obține prin intermediul unor tehnici de modelare vizuală după care, prin rafinare, se realizează baza de cunoștințe finală.
Cunoașterea și percepțiile asupra domeniului specific expertului uman sunt clarificate și organizate într-un model conceptual personal, în următoarea succesiune: identificarea de către expertul uman a obiectelor relevante din domeniul de expertiză; identificarea de către expertul uman a atributelor importante în procesul de luare a deciziei; însoțirea fiecărui atribut cu o schemă binară (caracteristici – opusul acestor caracteristici); completarea (și apoi rafinarea) unei scale de la 1 la 3 sau de la 1 la 5 cu răspunsurile la întrebarea: „Ce caracteristici și atribute diferențiază două obiecte de un al treilea?”.
Organizarea cunoașterii se referă la metoda de reprezentare a cunoștințelor (reguli de producție, de exemplu), verificarea cunoașterii (asigurarea corectitudinii bazei de cunoștințe) și validarea procesului de inferențiere (se execută, periodic, pe timpul testării sistemului expert).
Baza de cunoștințe este actualizată și întreținută permanent, prin adăugare de noi cunoștințe, cu o atentă monitorizare a nivelului de performanță a sistemului expert.
Dialogul utilizatorului cu sistemul expert reprezintă un proces ciclic compus din următoarele elemente: acțiunile utilizatorului pe durata unei sesiuni de lucru (alegere opțiuni de lucru, lansare comenzi, răspunsuri la întrebările pe care i le adresează sistemul expert etc.).; documentarea și instruirea utilizatorului cu privire la utilizarea sistemul expert (help); elementele de prezentare a sistemului expert (meniuri, ferestre, text, icon-uri, grafică etc.).; interacțiunea utilizatorului cu sistemul expert; inferfața cu utilizatorul (componentele hard și soft care asigură dialogul utilizator – sistem expert).
Modelele utilizate pentru proiectarea interfețelor cu utilizatorul sunt modelul proiectantului, modelul sistemului și modelul utilizatorului.
Modelul proiectantului reflectă viziunea echipei de proiectare (expert uman, cognitician, analiști, programatori) care proiectează și implementează sistemul expert. Modelul sistemului reprezintă soluția combinată a echipei de proiectare și a utilizatorilor sistemului expert. Modelul utilizatorului reprezintă punctul de vedere, prin consens, al mai multor utilizatori ai sistemului expert.
CAPITOLUL II – PREZENTAREA LIMBAJ DE PROGRAMARE TURBO PROLOG
PROLOG (Programming in logic) este un limbaj dedicat calculului simbolic, non-parametric. Programarea Prolog este orientata spre rezolvarea problemelor care implica implementarea unor obiecte si a relatiilor existente intre ele. Limbajul Prolog este deci util in rezolvarea problemelor de inteligenta artificiala si sisteme expert.
Prolog este un limbaj de nivel inalt. Prin programare logica (programare de rationamente) se intelege realizarea unui program care este format din fapte si relatii (relatii logice intre multimi de date) din care se obtin concluzii. Un program Prolog reprezinta o colectie de fapte si reguli.
Începutul programării logice poate fi atribuit lui R. Kowalski și A. Colmerauer și se situează
la începutul anilor '70. Kowalski a plecat de la o formulă logică de tipul:
S1 ∧ S2 ∧ … Sn → S
care are, în logica cu predicate de ordinul întâi semnificația declarativă conform căreia
S1 ∧ S2 ∧ … Sn implică S, adică dacă S1 și S2 … și Sn sunt fiecare adevărate atunci și S este
adevărat, și a propus o interpretare procedurală asociată. Conform acestei interpretări, formula de mai sus poate fi scrisă sub forma:
S dacă S1 și S2 … și Sn
și poate fi executată ca o procedură a unui limbaj de programare recursiv, unde S este antetul procedurii și S1, S2, … Sn corpul acesteia. Deci, pe lângă interpretarea declarativă, logică, a unei astfel de formule, formula poate fi interpretată procedural astfel: pentru a executa S se execută S1 și S2 … și Sn.
În aceeași perioadă, A. Colmerauer și colectivul lui de cercetare de la Universitatea din Marsilia au dezvoltat un limbaj de implementare a acestei abordări, pe care l-au denumit Prolog, abreviere de la "Programmation et Logique". De atunci și până în prezent, limbajul Prolog s-a impus ca cel mai important limbaj de programare logică și s-au dezvoltat numeroase implementări, atât ale unor interpretoare cât și ale unor compilatoare ale limbajului.
Limbajul Prolog este un limbaj declarativ susținut de o componentă procedurală. Spre deosebire de limbajele procedurale, cum ar fi C sau Pascal, în care rezolvarea problemei este specificată printr-o serie de pași de execuție sau acțiuni, într-un limbaj declarativ problema este specificată prin descrierea universului problemei și a relațiilor sau funcțiilor existente între obiecte din acest univers. Exemple de astfel de limbaje sunt cele funcționale, de exemplu Lisp, Scheme, ML, și cele logice, de exemplu Prolog.
Deși inițial a fost gândit pentru un set restrâns de probleme, Prolog a devenit cu timpul un limbaj de uz general, fiind o unealtă importantă în aplicațiile de inteligență artificială [CM84, Bra88, SS86]. Pentru multe probleme, un program Prolog are cam de 10 ori mai puține linii decât echivalentul lui în Pascal.
În 1983, cercetătorii din Japonia au publicat un plan ambițios de creare a unor calculatoare de generația a 5-a pentru care Prolog era limbajul de asamblare. Planul nu a reușit, dar acest proiect a marcat o dezvoltare deosebită a interpretoarelor și compilatoarelor de Prolog, precum și o creștere mare a numărului de programatori în acest limbaj.
Multe clase de probleme poate fi rezolvate în Prolog, existând anumite categorii care sunt rezolvabile mult mai ușor în Prolog decât în orice alt limbaj procedural. Astfel de probleme sunt în principal cele dedicate prelucrării simbolice sau care necesită un proces de căutare a soluției într-un spațiu posibil de transformări ale problemei.
Prezentarea limbajului Prolog ce urmează este în principal orientată pe descrierea limbajului Prolog standard. Exemplele de programe din această parte cât și din partea a doua sunt rulate utilizând interpretorul ARITY Prolog pe microcalculatoare de tip IBM/PC, mediul de programare ARITY Prolog și particularitățile lui sintactice fiind prezentate în partea a doua.
1 Entitățile limbajului Prolog
Limbajul Prolog este un limbaj logic, descriptiv, care permite specificarea problemei de rezolvat în termenii unor fapte cunoscute despre obiectele universului problemei și a relațiilor existente între aceste obiecte. Execuția unui program Prolog constă în deducerea implicațiilor acestor fapte și relații, programul definind astfel o mulțime de consecințe ce reprezintă înțelesul sau semnificația declarativă a programului.
Un program Prolog conține următoarele entități:
• fapte despre obiecte și relațiile existente între aceste obiecte;
• reguli despre obiecte și relațiile dintre ele, care permit deducerea (inferarea) de noi fapte pe baza celor cunoscute;
• întrebări, numite și scopuri, despre obiecte și relațiile dintre ele, la care programul răspunde pe baza faptelor și regulilor existente.
1.1 Fapte
Faptele sunt predicate de ordinul întâi de aritate n considerate adevărate. Ele stabilesc relații între obiectele universului problemei. Numărul de argumente ale faptelor este dat de aritatea (numărul de argumente) corespunzătoare a predicatelor.
Exemple:
Interpretarea particulară a predicatului și a argumentelor acestuia depinde de programator. Ordinea argumentelor, odată fixată, este importantă și trebuie păstrată la orice altă utilizare a faptului, cu aceeași semnificație. Mulțimea faptelor unui program Prolog formează baza de cunoștințe Prolog. Se va vedea mai târziu că în baza de cunoștinte a unui program Prolog sunt incluse și regulile Prolog.
1.2 Scopuri
Obținerea consecințelor sau a rezultatului unui program Prolog se face prin fixarea unor scopuri care pot fi adevărate sau false, în funcție de conținutul bazei de cunoștințe Prolog. Scopurile sunt predicate pentru care se dorește aflarea valorii de adevăr în contextul faptelor existente în baza de cunoștințe. Cum scopurile pot fi văzute ca întrebări, rezultatul unui program Prolog este răspunsul la o întrebare (sau la o conjuncție de întrebări). Acest răspuns poate fi afirmativ, yes, sau negativ, no. Se va vedea mai târziu că programul Prolog, în cazul unui răspuns afirmativ la o întrebare, poate furniza și alte informații din baza de cunoștințe.
Exemplu
Considerând baza de cunoștințe specificată anterior, se pot pune diverse întrebări, cum
ar fi:
?- iubeste(mihai, maria).
yes deoarece acest fapt există în baza de cunoștințe
?- papagal(coco).
yes
?- papagal(mihai).
no deoarece acest fapt nu există în baza de cunoștințe
?- inalt(gelu).
no
1.3 Variabile
În exemplele prezentate până acum, argumentele faptelor și întrebărilor au fost obiecte particulare, numite și constante sau atomi simbolici. Predicatele Prolog, ca orice predicate în logica cu predicate de ordinul I, admit ca argumente și obiecte generice numite variabile. În Prolog, prin convenție, numele argumentelor variabile începe cu literă iar numele constantelor simbolice începe cu literă mică. O variabilă poate fi instanțiată (legată) dacă
există un obiect asociat acestei variabile, sau neinstanțiată (liberă) dacă nu se știe încă ce obiect va desemna variabila.
La fixarea unui scop Prolog care conține variabile, acestea sunt neinstanțiate iar sistemul încearcă satisfacerea acestui scop căutând printre faptele din baza de cunoștințe un fapt care poate identifica cu scopul, printr-o instanțiere adecvată a variabilelor din scopul dat. Este vorba de fapt de un proces de unificare a predicatului scop cu unul din predicatele fapte existente în baza de cunoștințe.
La încercarea de satisfacere a scopului, căutarea se face întotdeauna pornind de la începutul bazei de cunoștințe. Dacă se întâlnește un fapt cu un simbol predicativ identic cu cel al scopului, variabilele din scop se instanțiază conform algoritmului de unificare și valorile variabilelor astfel obținute sunt afișate ca răspuns la satisfacerea acestui scop.
Exemple:
?- papagal(CineEste).
CineEste = coco
?- deplaseaza(Ce, DeUnde, Unde).
Ce = cub, DeUnde = camera1, Unde = camera2
?- deplaseaza(Ce, Aici, Aici).
no
Cum se comportă sistemul Prolog în cazul în care există mai multe fapte în baza de cunoștințe care unifică cu întrebarea pusă? În acest caz există mai multe răspunsuri la întrebare, corespunzând mai multor soluții ale scopului fixat. Prima soluție este dată de prima unificare și există atâtea soluții câte unificări diferite există. La realizarea primei unificări se marchează faptul care a unificat și care reprezintă prima soluție. La obținerea următoarei soluții, căutarea este reluată de la marcaj în jos în baza de cunoștințe. Obținerea primei soluții este de obicei numită satisfacerea scopului iar obținerea altor soluții, resatisfacerea scopului. La satisfacera unui scop căutarea se face întotdeauna de la începutul bazei de cunoștințe. La resatisfacerea unui scop, căutarea se face începând de la marcajul stabilit de satisfacerea anterioară a acelui scop.
Sistemul Prolog, fiind un sistem interactiv, permite utilizatorului obținerea fie a primului răspuns, fie a tuturor răspunsurilor. În cazul în care, după afișarea tuturor răspunsurilor, un scop nu mai poate fi resatisfăcut, sistemul răspunde no.
Exemple:
?- iubeste(mihai, X).
X = maria; tastând caracterul “;” și Enter, cerem o nouă soluție
X = ana;
no
?- iubeste(Cine, PeCine).
Cine = mihai, PeCine = maria;
Cine = mihai, PeCine = ana;
no
Există deci două soluții pentru scopul iubeste(mihai, X) și tot două soluții pentru scopul iubeste(Cine, PeCine), considerând tot baza de cunoștințe prezentată în secțiunea
1.1.
1.4 Reguli
O regulă Prolog exprimă un fapt care depinde de alte fapte și este de forma:
S :- S1, S2, …Sn.
cu semnificația prezentată la începutul acestui capitol. Fiecare Si, i = 1,n și S au forma faptelor Prolog, deci sunt predicate, cu argumente constante, variabile sau structuri. Faptul S care definește regula, se numește antet de regulă, iar S1, S2, …Sn formează corpul regulii și reprezintă conjuncția de scopuri care trebuie satisfăcute pentru ca antetul regulii să fie satisfăcut.
Fie următoarea bază de cunoștințe Prolog:
bun(X),
cunoaste(X, Y), frumoasa(Y).
Se observă că enunțul (6) definește o regulă Prolog; relația iubeste(Cine, PeCine), fiind definită atât printr-un fapt (5) cât și printr-o regulă (6).
În condițiile existenței regulilor în baza de cunoștințe Prolog, satisfacerea unui scop se face printr-un procedeu similar cu cel prezentat în Secțiunea 1.2, dar unificarea scopului se încearcă atât cu fapte din baza de cunoștințe, cât și cu antetul regulilor din bază. La unificarea unui scop cu antetul unei reguli, pentru a putea satisface acest scop trebuie satisfăcută regula. Aceasta revine la a satisface toate faptele din corpul regulii, deci conjuncția de scopuri. Scopurile din corpul regulii devin subscopuri a căror satisfacere se va încerca printr-un mecanism similar cu cel al satisfacerii scopului inițial.
Pentru baza de cunoștințe descrisă mai sus, satisfacerea scopului
?- iubeste(vlad, ana).
se va face în următorul mod. Scopul unifică cu antetul regulii (6) și duce la instanțierea variabilelor din regula (6): X = vlad și Y = ana. Pentru ca acest scop să fie îndeplinit, trebuie îndeplinită regula, deci fiecare subscop din corpul acesteia. Aceasta revine la îndeplinirea scopurilor bun(vlad), care reușește prin unificare cu faptul (2), cunoaste(vlad, ana), care reușește prin unificare cu faptul (4), și a scopului frumoasa(ana), care reușește prin unificare cu faptul (1). În consecință, regula a fost îndeplinită, deci și întrebarea inițială este adevarată, iar sistemul răspunde yes.
Ce se întîmplă dacă se pune întrebarea:
?- iubeste(X, Y).
Prima soluție a acestui scop este dată de unificarea cu faptul (5), iar răspunsul este:
X = mihai, Y = maria
Sistemul Prolog va pune un marcaj în dreptul faptului (5) care a satisfăcut scopul. Următoarea soluție a scopului iubeste(X, Y) se obține începând căutarea de la acest marcaj în continuare în baza de cunoștințe. Scopul unifică cu antetul regulii (6) și se vor fixa trei noi subscopuri de îndeplinit, bun(X), cunoaste(X, Y) și frumoasa(Y). Scopul bun(X) este satisfăcut de faptul (2) și variabila X este instanțiată cu valoarea vlad, X = vlad . Se încearcă acum satisfacerea scopului cunoaste(vlad, Y), care este satisfăcut de faptul (3) și determină instanțierea Y = maria. Se introduce în baza de cunoștințe un marcaj asociat scopului cunoaste(vlad, Y), care a fost satisfăcut de faptul (3). Se încearcă apoi satisfacerea scopului frumoasa(maria). Acesta eșuează. În acest moment sistemul intră într-un proces de backtracking în care se încearcă resatisfacerea scopului anterior satisfăcut, cunoaste(vlad, Y), în speranța că o noua soluție a acestui scop va putea satisface și scopul curent care a eșuat, frumoasa(Y). Resatisfacerea scopului cunoaste(vlad, Y) se face pornind căutarea de la marcajul asociat scopului în jos, deci de la faptul (3) în jos. O nouă soluție (resatisfacere) a scopului cunoaste(vlad, Y) este dată de faptul (4) care determină instanțierea Y = ana. În acest moment se încearcă satisfacerea scopului frumoasa(ana). Cum este vorba de un nou scop, căutarea se face de la începutul bazei de cunoștințe și scopul frumoasa(ana) este satisfăcut de faptul (1). În consecință a doua soluție a scopului iubeste(X, Y) este obținută și sistemul răspunde:
X = vlad, Y = ana
urmând un mecanism de backtracking, descris intuitiv în figura 1 prin prezentarea arborilor de deducție construiți de sistemul Prolog.
La încercarea de resatisfacere a scopului iubeste(X, Y), printr-un mecanism similar, se observă că nu mai există alte solutii. În concluzie, fiind dată baza de fapte și reguli Prolog anterioară, comportarea sistemului Prolog este:
?- iubeste(X, Y).
X = mihai, Y = maria;
X = vlad, Y = ana;
no
iubeste(X,Y)
%5 iubeste(mihai,maria) SUCCES
solutie 1: X=mihai, Y=maria
iubeste(X,Y)
bun(X)
cunoaste(X,Y)
%6 frumoasa(Y)
%2 bun(vlad)
cunoaste(vlad,Y)
frumoasa(maria)
%1 frumoasa(ana)
SUCCES
%3 cunoaste(vlad,maria)
%4 cunoaste(vlad,ana) INSUCCES
SUCCES
SUCCES SUCCES
Observații:
solutie 2: X=vlad, Y=ana
Figura 1. Mecanismul de satisfacere a scopurilor în Prolog
• La satisfacerea unei conjuncții de scopuri în Prolog, se încearcă satisfacerea fiecărui
scop pe rând, de la stânga la dreapta. Prima satisfacere a unui scop determină plasarea unui marcaj în baza de cunoștințe în dreptul faptului sau regulii care a determinat satisfacerea scopului.
• Dacă un scop nu poate fi satisfăcut (eșuează), sistemul Prolog se întoarce și încearcă resatisfacerea scopului din stânga, pornind căutarea în baza de cunoștințe de la marcaj în jos. Înainte de resatisfacerea unui scop se elimină toate instanțierile de
variabile determinate de ultima satisfacere a acestuia. Dacă cel mai din stânga scop din conjuncția de scopuri nu poate fi satisfăcut, întreaga conjuncție de scopuri eșuează.
• Această comportare a sistemului Prolog în care se încearcă în mod repetat
satisfacerea și resatisfacerea scopurilor din conjuncțiile de scopuri se numește
backtracking.
• În secțiunea 4 se va discuta pe larg structura de control a sistemului Prolog, mecanismul fundamental de backtracking și modurile în care se poate modifica parțial acest mecanism.
1.5 Un program Prolog simplu
Simplitatea și expresivitatea limbajului Prolog poate fi pusă în evidentă de următorul exemplu de descriere a unui circuit logic "poartă ȘI". Se consideră poarta ȘI ca fiind construită prin conectarea unei "porți ȘI-NU" cu un inversor. Întregul circuit este definit de relația:
poarta_si(Intrare1, Intrare2, Iesire)
pe baza relațiilor
poarta_si_nu(Intrare1, Intrare2, Iesire)
inversor(Intrare, Iesire).
În figura 2 este prezentată schema porții ȘI în care se observă că inversorul este construit dintr-un tranzistor cu sursa conectată la masă și un rezistor cu un capăt conectat la alimentare. Poarta tranzistorului este intrarea inversorului, în timp ce celălalt capăt al rezistorului trebuie conectat la colectorul tranzistorului care formează ieșirea inversorului.
n1
n2 n3
n4
n5
Figura 2. Un circuit logic poartă ȘI
Variabilele comune între predicate sunt utilizate pentru a specifica legăturile comune. rezistor(alimentare, n1).
rezistor(alimentare, n2).
tranzistor(n2, masa, n1). tranzistor(n2, masa, n1). tranzistor(n3, n4, n2). tranzistor(n5, masa, n4). inversor(Intrare, Iesire) :-
tranzistor(Intrare, masa, Iesire), rezistor(alimentare, Iesire).
poarta_si_nu(Intrare1, Intrare2, Iesire) :- tranzistor(Intrare1, X, Iesire), tranzistor(Intrare2, masa, X), rezistor(alimentare, Iesire).
poarta_si(Intrare1, Intrare2, Iesire) :- poarta_si_nu(Intrare1, Intrare2, X), inversor(X, Iesire).
Pentru întrebarea
?- poarta_si(In1, In2, Iesire).
In1 = n3, In2= n5, Iesire = n1
răspunsul sistemului Prolog confirmă faptul că circuitul descris este o poartă ȘI, identificând intrările și ieșirile corespunzătoare.
Bibliografie :
Buneci , Mădălina ,Roxana – Dezvoltarea sistemelor expert în PROLOG (Design of Expert Systems in PROLOG), Editura Lumina ,2000.
Gherasim ,Zenovic – Cursuri – Sisteme expert de gestiune
Gherasim, Zenovic, Cocianu, Cătălina- Lucia, – Sisteme expert în economie, Editura Fundația România de Mâine, București , 2005
Gherasim, Zenovic, Fusaru, Doina, Andronie, Maria, – Sisteme informatice pentru asistarea deciziei economice, Editura Fundației România de Mâine, București, 2008.
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Limbajul DE Programare Turbo Prolog (ID: 117459)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
