Unificare și Backtracking

Laborator
8/10 (3 voturi)
Conține 10 fișiere: doc, pro
Pagini : 15 în total
Cuvinte : 5484
Mărime: 31.66KB (arhivat)
Publicat de: Haralambie Miron
Puncte necesare: 0
Profesor îndrumător / Prezentat Profesorului: Iordan Anca
Prezentat in cadrul Facultatii de Ingierie Hunedoara - UPT

Extras din laborator

Capitolul de faţă cuprinde 4 secţiuni mari. În prima secţiune se prezintă în detaliu ceea ce face Prolog atunci când încearcă să găsească o potrivire pt. un goal (obiectiv) cu o clauză (din secţiunea clauses). Acest proces de căutare poartă denumirea de unificare, ceea ce presupune găsirea unei potriviri între structurile de date utilizate în apelul obiectivului şi cele din clauzele date. În Prolog, unificarea implementează câteva dintre procedeele cunoscute din alte limbaje de programare cum ar fi: atribuirea, transmiterea parametrilor unei proceduri, selecţie case, construcţia unor structuri de date, etc.

În partea a doua se prezintă modul în care Prolog caută soluţiile (prin backtracking).

În partea a treia se va introduce un predicat care poate fi utilizat pentru a optimiza căutarea prin backtracking.

Pentru a clarifica şi mai bine, în cea de-a patra parte în acest capitol se vor relua noţiunile mai importante prezentate dar dintr-o perspectivă procedurală.

Unificare

Se consideră următorul obiectiv:

scrisă_de(X, Y).

Când Visual Prolog încearcă să satisfacă acest obiectiv, trebuie testată fiecare „clauză” „scrisa_de” din program. Programul va căuta o potrivire de la începutul programului şi până la sfârşit. Când o „clauză” se potriveşte cu un obiectiv, Prolog caută să atribuie valori pentru variabilele libere astfel încât clauza şi obiectivul să fie identice. Se spune că obiectivul se „unifică” cu clauza.

Exemplu:

DOMAINS

titlu, autor = symbol

pagini = unsigned

PREDICATES

carte(titlu, pagini)

nondeterm scrisa_de(autor, titlu)

nondeterm roman(titlu)

CLAUSES

scrisă_de(sadoveanu, „Neamul Soimarestilor”).

scrisă_de(creanga, „Amintiri din copilarie”).

carte(„Neamul Soimarestilor”, 300).

carte(„Amintiri din copilarie”, 100).

roman(Titlu):-

scrisa_de(_, Titlu), carte(Titlu, Lungime), Lungime >=250.

În timp ce X şi Y sunt variabile libere în obiectiv, şi o variabilă liberă poate fi unificată cu orice argument (chiar cu alte variabile libere), obiectivul poate fi unificat cu prima regulă „scrisa_de” din program:

scrisa_de( X , Y).

| |

scrisa_de(sadoveanu, „Neamul Soimarestilor”).

Visual Prolog va găsi o potrivire X va fi creanga şi Y va deveni „Neamul Soimarestilor”. În acest moment se vor afisa:

X=sadoveanu, Y=Neamul Soimarestilor

Visual Prolog va căuta în continuare şi alte potriviri, efectuând şi alte unificări dacă sunt posibile, în cazul de faţă va găsi o nouă soluţie:

X=creanga, Y=Amintiri din copilarie

2 Solutions

Dacă, se cere programului soluţionarea următorului obiectiv:

scrisa_de(X, “Amintiri din copilarie”).

Prolog va încerca o potrivire cu prima clauză a predicatului scrisa_de:

scrisa_de( X , “Amintiri din copilarie”).

| |

scrisă_de(sadoveanu, „Neamul Soimarestilor”).

Deoarece “Amintiri din copilarie” şi “Neamul Soimarestilor” nu se pot unifica (nu se potrivesc, nu sunt identice) , procesul de unificare se încheie cu eşec. Visual Prolog va încerca următorul fapt din program:

scrisă_de(creanga, „Amintiri din copilarie”).

Care va conduce la unificarea variabilei X cu creanga, variabila X devenind astfel o variabilă legată.

Vom considera în continuare următorul goal (obiectiv):

roman(X).

Visual Prolog va încerca să îndeplinească un obiectiv, prin investigarea antetului regulii respective.

În acest caz se va găsi următoarea potrivire:

roman(Titlu).

În continuare Prolog va încerca să unifice argumentele clauzei pentru regula roman. Deoarece, în cadul acestui obiectiv, variabila X este o variabilă liberă, ea va putea fi unificată cu orice argument. Argumentul Titlu, de asemenea este o variabilă nelegată în antetul clauzei roman. În continuare Visual Prolog va încerca să satisfacă secvenţial, pe rând subobiectivele acestei reguli.

roman(Titlu):-

scrisa_de(_, Titlu),

carte(Titlu, Lungime),

Lungime >=250.

Primul subobiectiv care va fi încercat este scrisa_de(_, Titlu), în care autorul cărţii nu este important şi s-a utilizat ca prim argument o variabilă anonimă pt. a-l substitui. Prolog va căuta o potrivire de la început către sfârşit prin examinarea tuturor faptelor existente în program. Se va face o unificare cu primul fapt, scrisa_de după cum urmează:

scrisa_de( _ , Titlu),

| |

scrisa_de(sadoveanu,"Neamul Soimarestilor").

Variabila Titlu devine o variabilă legată cu valoarea “Neamul Soimarestilor” şi următorul subobiectiv va fi carte(Titlu, Lungime). Visual Prolog va încerca să caute în continuare o potrivire pentru carte. Deoarece Titlu este o variabilă legată în acest moment datorită primului subobiectiv cu “Neamul Soimarestilor”, se va încerca acum unificarea variabilei Lungime rămasă încă nelegată prin căutare în lista de fapte ale programului de la început spre sfârşit. Prima încercare de potrivire cu clauza carte(“Neamul Soimarestilor”, 300) se va solda cu o potrivire între variabila Lungime şi 300, ea devenind în continuare variabilă legată. Cel de-al treilea subobiectiv care se va testa va fi Lungime>=250, care este de fapt o condiţie. Această condiţie este adevarată, deci întregul obiectiv se va încheia succes.

Prolog va afişa soluţia:

X=Neamul Soimarestilor

1 Solution

Preview document

Unificare și Backtracking - Pagina 1
Unificare și Backtracking - Pagina 2
Unificare și Backtracking - Pagina 3
Unificare și Backtracking - Pagina 4
Unificare și Backtracking - Pagina 5
Unificare și Backtracking - Pagina 6
Unificare și Backtracking - Pagina 7
Unificare și Backtracking - Pagina 8
Unificare și Backtracking - Pagina 9
Unificare și Backtracking - Pagina 10
Unificare și Backtracking - Pagina 11
Unificare și Backtracking - Pagina 12
Unificare și Backtracking - Pagina 13
Unificare și Backtracking - Pagina 14
Unificare și Backtracking - Pagina 15

Conținut arhivă zip

  • Unificare si Backtracking.doc
  • ia3p9.pro
  • ia3p8.pro
  • ia3p4.pro
  • ia3p7.pro
  • ia3p2.pro
  • ia3p1.pro
  • ia3p6.pro
  • ia3p3.pro
  • ia3p5.pro

Alții au mai descărcat și

Mediul Turbo Prolog

- Mediul de programare Turbo Prolog. Meniul principal,Ferestrele Turbo Prologului, Lansarea/trasarea programului. - Clauze Turbo Prolog. Fapte,...

Limbajul Prolog

În Prolog se poate ajunge la soluţii prin inferenţă logică (deducţie logică) pornind de la ceva cunoscut în prealabil. Tipic, un program în...

Structura unui program prolog

Structura unui program VISUAL PROLOG Un program PROLOG conţine 4 secţiuni de bază: “clauses” “predicates” “domains” “goal” Secţiunea...

Laborator

1) Trei prieteni au obtinut primul, al doilea si respectiv al treilea loc intr-un concurs. Fiecare dintre ei au nume diferite, prefera un alt...

Aparatul de anestezie

Prin structura lor aparatele de anestezie asigura doua functii : - formarea amestecului anestezic - asigura administrarea amestecului anestezic...

Bazele Inteligenței Artificiale

Limbajul PROLOG. Lansare mediu PROLOG Pentru dezvoltarea programelor, vom folosi implementarea SWIPROLOG. Lansarea acestuia se face apăsând...

Sisteme Informatice pentru Asistarea Deciziei

Laborator 1 Enunţ: 1) Să se realizeze un program privind evidenţa studenţilor. Pentru aceasta se vor crea următoarele tabele: Studenti...

Te-ar putea interesa și

Cursuri inteligență artificială

1.1. Introducere Termenul de inteligenţă artificială a fost folosit pentru prima dată în 1956 de omul de ştiinţă american John McCarthy. Până...

Inteligență artificială

Laborator 1 Scopul: Insusirea ideilor fundamentale despre inteligenta artificiala, insusirea ideilor fundamentale despre programarea logica,...

Elemente de inteligență artificială

Cap. 1. INTRODUCERE 1.1 Istoric al Inteligenţei Artificiale Inteligenţa Artificială - IA (engl. Artificial Intelligence - AI) a luat fiinţă odată...

Mediul Turbo Prolog

- Mediul de programare Turbo Prolog. Meniul principal,Ferestrele Turbo Prologului, Lansarea/trasarea programului. - Clauze Turbo Prolog. Fapte,...

Bazele inteligenței artificiale

Laboratorul numarul 1 Introducere în Limbajul Prolog Cuvantul PROLOG vine de la PROgraming in LOGic. Prologul este un limbaj declarativ, aceasta...

Programare Logică și Funcțională

Limbajele de programare sunt împartite pe diferite niveluri în functie de gradul de interactiune cu suportul hardware: - Limbaje masina –...

Ai nevoie de altceva?