PROLOG strategie vyhodnocení dotazu

Slides:



Advertisements
Podobné prezentace
DOTAZOVACÍ JAZYKY slajdy přednášce DBI006
Advertisements

Národní seminář k metodám evaluací aktivit v oblasti globálního rozvojového vzdělávání (GRV) Praha, 2010 Analýza monitoringu a evaluace globálního rozvojového.
Deduktivní soustava výrokové logiky
DOTAZOVACÍ JAZYKY slajdy přednášce DBI006
J. Pokorný 1 DOTAZOVACÍ JAZYKY slajdy přednášce DBI006 J. Pokorný MFF UK
Stavový prostor. • Existují úlohy, pro které není k dispozici univerzální algoritmus řešení • různé hry • problém batohu, problém obchodního cestujícího.
Tabulky v MS ACCESS Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Mgr. Jiří Novák.
Základní škola a mateřská škola Bzenec Číslo projektu: CZ.1.07/1.4.00/ Číslo a název šablony klíčové aktivity: III/2: využívání ICT – inovace Vypracoval/a:
Prolog – seznamy Jan Hric, 1997 – 2010b KTIML MFF UK URL:
JUI - 3. přednáška Zpracování seznamů, predikátové a vyhodnocovací funkce RNDr. Jiří Dvořák, CSc.
10. Dynamické datové struktury
ALGO – Algoritmizace 1. cvičení
Programovací jazyk Prolog
Neprocedurální programování Prolog 1.přednáška
Alg51 Rozklad problému na podproblémy Postupný návrh programu rozkladem problému na podproblémy –zadaný problém rozložíme na podproblémy –pro řešení podproblémů.
Architektury a techniky DS Tvorba efektivních příkazů I Přednáška č. 3 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Varianty Turingova stroje Výpočet funkcí pomocí TS
Induktivní logické programování
Implementace konečného automatu v Prologu Tato část popisuje strukturu konkrétního automatu a bude se lišit pro každý automat. 1.Definice přechodové funkce:
ADT Strom.
Databáze Jiří Kalousek.
Základní číselné množiny
SÍŤOVÁ ANALÝZA.
Seminář – Základy programování
Rozšíření dotazu a vývoj tématu v IR Jiří Dvorský Jan Martinovič Václav Snášel.
TI 7.1 NEJKRATŠÍ CESTY Nejkratší cesty - kap. 6. TI 7.2 Nejkratší cesty z jednoho uzlu Seznámíme se s následujícími pojmy: w-vzdálenost (vzdálenost na.
ORIENTOVANÉ GRAFY V této části se seznámíme s následujícími pojmy:
Algoritmy a programovací techniky
JUI - 9. přednáška Ř ez, negace, práce s databází RNDr. Jiří Dvořák, CSc.
Dostupné z Metodického portálu ISSN: , financovaného z ESF a státního rozpočtu ČR. Provozováno Výzkumným ústavem pedagogickým v Praze.
Sémantická analýza Jakub Yaghob
JUI - 6. přednáška Úvod do jazyka Prolog, struktura programu, datové objekty, unifikace RNDr. Jiří Dvořák, CSc.
Přednáška 10 Logické programování, PROLOG (PROgramming in LOGic)
2 CYKLUS S PEVNÝM POČTEM OPAKOVÁNÍ Podle řídící proměnné proveď n-krát příkaz P1.
Jazyk XML Jazyk pro tvorbu strukturovaných dokumentů Syntaxí velmi podobný HTML Hlavní cíle návrhu: Snadná editace - jazyk je textový Snadné strojové zpracování.
Přednáška 10 Logické programování, PROLOG (PROgramming in LOGic)
Zablokování (deadlock, smrtelné objetí, uváznutí)
Matematické metody optimalizace Tomáš Vaníček Katedra inženýrské informatiky Stavební fakulta ČVUT Thákurova 7, Praha 6 Dejvice, b407
Marie Duží vyučující: Marek Menšík Logika: systémový rámec rozvoje oboru v ČR a koncepce logických propedeutik pro mezioborová studia.
Turingův stroj.
hledání zlepšující cesty
Automaty a gramatiky.
Distribuované algoritmy - přehled Přednášky z Distribuovaných systémů Ing. Jiří Ledvina, CSc.
Procedurální (klasické) programování Popisuje algoritmus – postup, jak vyřešit úlohu.
XML data na disku jako databáze Kamil Toman
Jazyky pro umělou inteligenci RNDr. Jiří Dvořák, CSc.
DOK. FUZZY MNOŽINY ETC. Klasické množiny Klasická množina – Výběr prvků z nějakého univerza Podle nějakého pravidla – Každý prvek obsahuje nejvýše jednou.
JUI přednáška Vstup a výstup, cykly RNDr. Jiří Dvořák, CSc.
Doc. Josef Kolář (ČVUT)Prohledávání grafůGRA, LS 2010/11, Lekce 4 1 / 15Doc. Josef Kolář (ČVUT)Prohledávání stavového prostoruGRA, LS 2013/14, Lekce 11.
Sylabus V rámci PNV budeme řešit konkrétní úlohy a to z následujících oblastí: Nelineární úlohy Řešení nelineárních rovnic Numerická integrace Lineární.
Prostorové datové struktury
Hledání silně souvislý komponent Silně souvislá komponenta orientovaného grafu G= (V,E) je maximální množina uzlů UV taková že ∀ u,v ∈ V : u je dosažitelné.
Soustavy lineárních rovnic Matematika 9. ročník Creation IP&RK.
Definiční obor a obor hodnot
Znázornění dopravní sítě grafem a kostra grafu Předmět: Teorie dopravy - cvičení Ing. František Lachnit, Ph.D.
Překladače 5. Syntaktická analýza
ZAL – 3. cvičení 2016.
Rekurze.
Logické programování, PROLOG (PROgramming in LOGic)
PROLOG PROgramování v LOGice
CNC - programování v ŘS Heidenhain iTNC 530
Cyklus for (1) Obecný tvar: for (výraz1; výraz2; výraz3) příkaz
Sémantika PL1 Interpretace, modely
Predikátová logika.
Základní algoritmy Prologu
Soustavy lineárních rovnic
Prohledávání stavového prostoru
PROLOG strategie vyhodnocení dotazu
Definiční obory. Množiny řešení. Intervaly.
Prohledávání grafů.
Transkript prezentace:

PROLOG strategie vyhodnocení dotazu

Program v PROLOGu Konečná uspořádaná množina faktů a pravidel (klauzulí), která se týkají téhož predikátu (jedná se o predikát, který mají v hlavě), se nazývá definice predikátu. Program tvoří množina definic všech použitých predikátů. Pro názornost budeme dále předpokládat, že klauzule v programu jsou vzestupně očíslovány, a to vždy od čísla 1. Jak popíšeme vztahy v grafu g0? Použijme označení hrana(Od,Do) cesta(Odkud,Kam) a b d e c

Příklad „graf g0“, hledání cesty hrana(a,b). hrana(a,c). hrana(c,d). hrana(c,e). c1(Y,Y). c1(Z,K):-hrana(Z,M),c1(M,K). c2(Y,Y). c2(Z,K):-c2(Z,M),hrana(M,K). c3(Z,K):-hrana(Z,M),c3(M,K). c3(Y,Y). c4(Z,K):-c4(Z,M),hrana(M,K). c4(Y,Y). Existuje cesta mezi uzly b a d nebo mezi a a c? Které z řešení c1, c2, c3 a c4 je nejlepší? a c b e d

Vyhodnocení dotazu Vyhodnocení dotazu ?-d1,...,dn. programem P probíhá tak, že se program snaží postupně „zjednodušovat“ výchozí dotaz opakovaným využíváním svých klauzulí s cílem vytvořit dotaz prázdný. Jakmile se podaří dotaz redukovat na prázdný, vyhodnocení dotazu končí úspěchem: znamená to, že formule $ (d1 & ... & dn) je logickým důsledkem programu P. Při postupném „zjednodušování“ výchozího dotazu je nutné postupovat systematicky. Postup definuje strategie PROLOGu

Zpracování log. programu (= vytváření derivačního grafu podle SLD resoluce) obsahuje 2 zdroje nedeterminismu: · které pravidlo použít? prohledávání derivačního grafu do hloubky · který podcíl rozvíjet? výběrové pravidlo – „zleva-do-prava“ Způsoby ukončení algoritmu pro zpracování dotazu (když není důvod/zdroje pokračovat): dotaz byl redukován na prázdný, tj. výchozí dotaz byl splněn …ÚSPĚCH (success) všechny možnosti, jak řešit výchozí dotaz byly použity a selhaly … KONEČNÉ SELHÁNÍ (finite failure), neukončený výpočet …

?-d1,...,dn. Pro vyhodnocování dotazu je vytvářen zásobník - aktuální verze dotazu je přidána na jeho vrch a s tou se dále pracuje: Aktuální dotaz a jeho jednotlivé podcíle se zpracovávají zleva-doprava (nejdřív se zcela “vyřeší“ čili „odstraní“ d1, ...). Výsledkem je upřesněná informace o hodnotě proměnných z řešeného dotazu získaná pomocí unifikace. Pro „zjednodušení“ podcíle d1 (i dalších) se vždy postupně zkoušejí všechny klauzule z definice odpovídajícího predikátu (vychází se z jejich pevně daného uspořádání). Pro názornost budeme dále předpokládat, že každý atom dotazu je doplněn o informaci o čísle poslední klauzule dosud použité pro jeho řešení. Pro výchozí dotaz je to číslo 0: ?-d1{0},...,dn {0}.

Strategie Prologu ?- rodic(ludmila,vaclav){0}. ?- matka(X,václav). {0} 1 ?- matka(X,václav). {0} Program „rodič“ zena(drahomira). zena(ludmila). rodic(ludmila,vaclav). rodic(ludmila,boleslav). matka(X,Y):- zena(X),rodic(X,Y). Dotaz: ?- matka(X,vaclav). X=ludmila Yes 2 ?- zena(X){0}, rodic(X,vaclav){0}. ?- matka(X,václav){5}. Slepá cesta 2 ?- rodic(drahomira,vaclav){0}. X=drahomira ?- zena(X){1}, rodic(X,vaclav){0}. ?- matka(X,václav). {5} Zpětný chod 4 ?- . ?- rodic(ludmila,vaclav){0}. X=ludmila ?- zena(X){2}, rodic(X,vaclav){0}. ?- matka(X,václav). {5} 3

Zpracování zásobníku s vrchním prvkem ?- Q1{k1},Q2{k2}, ... , Qm{km}. Existuje v programu P nějaká klauzule s číslem vyšším než k1, kterou lze použít pro řešení cíle Q1? + - (Klauzule má číslo j a tvar {j} Q1 :- R1,...,Rp.)  Proveď tyto úpravy: Změň odkaz v právě zprac.dotazu ?- Q1{ j },Q2{k2}, ... , Qm{km}. Na vrch zásobníku přidej nový dotaz ?- R1{0},...,Rp{0} , Q2{k2}, ... , Qm{km} Použij zpětný chod, tj. odeber vrchní prvek zásobníku Je zásobník prázdný? - + Je nově přidaný dotaz prázdný? + - Úspěch ! Neúspěch ! Pokračuj ve zpracování zásobníku

Rekurzivní pravidla Nerekurzivní definice: Rekurzivní definice: dědeček(U,Z):-muž(U), rodič(U,V), rodič(V,Z). pradědeček(A,B):-muž(A), rodič(A,C), rodič(C,D), rodič(D,B). rod_linie(P,PP):-rodič(P,PP). rod_linie(P,PP):-dědeček(P,PP). rod_linie(P,PP):-pradědeček(P,PP)... Rekurzivní definice: rod_linie(P,PP):-rodič(P,P1),rod_linie(P1,PP).

g1 a b d e c

Jaké odpovědi dávají různé varianty programu? Log.program g0 Dotaz verze1 verze2 verze3 verze4 ?-c(a,e). Yes;no Yes;abort abort ?-c(b,e). no hrana(a,b). hrana(a,c). hrana(c,d). hrana(c,e). c1(Y,Y). c1(Z,K):-hrana(Z,M),c1(M,K). c2(Y,Y). c2(Z,K):-c2(Z,M),hrana(M,K). c3(Z,K):-hrana(Z,M),c3(M,K). c3(Y,Y). c4(Z,K):-c4(Z,M),hrana(M,K). c4(Y,Y). ?- c1(a,e). ?-c2(a,e). ?-c3(a,e). ?-c4(a,e).

Jaké odpovědi dávají různé varianty programu? Po přidání hrany h(b,a). hrana(a,b). hrana(a,c). hrana(c,d). hrana(c,e). hrana(b,a). c1(Y,Y). c1(Z,K):-hrana(Z,M),c1(M,K). c2(Y,Y). c2(Z,K):-c2(Z,M),hrana(M,K). c3(Z,K):-hrana(Z,M),c3(M,K). c3(Y,Y). c4(Z,K):-c4(Z,M),hrana(M,K). c4(Y,Y). ?- c1(a,e). Log.program g1 Dotaz verze1 verze2 verze3 verze4 ?-c(a,e). abort Yes;yes,… ?-c(b,e).

Jaké odpovědi dávají různé varianty programu? Log.program g0 Dotaz verze1 verze2 verze3 verze4 ?-c(a,e). Yes;no Yes;abort abort ?-c(b,e). no Po přidání hrany h(b,a). Log.program g1 Dotaz verze1 verze2 verze3 verze4 ?-c(a,e). abort Yes;yes; … ?-c(b,e).

Způsoby ukončení logického programu Zpracování log. programu = vytváření derivačního grafu podle SLD resoluce – používá prohledávání do hloubky cíl splněn – Yes + substituce za proměnné cíl selhal – No neukončený výpočet – např. zacyklení Krabičkový model výpočtu – predikát a jeho brány Call Exit Fail Redo

Krabičkový model výpočtu – složený predikát Exit Call predikát1 Call predikát2 Exit Fail Redo Fail Fail

Pravidla pro sestavení programu v Prologu Postupujeme od jednoduššího ke složitějšímu: FAKTA PRAVIDLA bez rekurze PRAVIDLA s rekurzí - rekurzi na konec pravidla Operace charakteristické pro Prolog: Srovnávání (matching) Unifikace Zpětný chod

Seznam a jak jej obratit s využitím predikátu spoj(L1,L2, Vysledek) spoj([],S1,S1). spoj([H|T],S1,[H|S]):-spoj(T,S1,S). o1([],[]). o1([X|L],S):-o1(L,L1),spoj(L1,[X],S). S využitím pomocné proměnné (akumulátor) o2([],L,L). o2([H|T],M,V):- o2(T,[H|M],V).