Využití principů, ale vlastní naprogramování řešících

Podobné dokumenty
" Použij t lo pravidla, kterým v dotazu nahra ást Q1.! Pro pravidla, kde T lo=true, dotaz Q1 zmizí. " Opakuj, dokud nezískáš prázdný dotaz.

Prolog PROgramming in LOGic část predikátové logiky prvního řádu rozvoj začíná po roce 1970 Robert Kowalski teoretické základy Alain Colmerauer, David

Logické programování I

u odpovědí typu A, B, C, D, E: Obsah: jako 0) CLP Constraint Logic Programming

Programování v čistém Prologu

Prolog 1-1. Rodinné vztahy pomocí Prologu:

Obsah: CLP Constraint Logic Programming. u odpovědí typu A, B, C, D, E: jako 0)

Seminární práce z Teorie ICT

Domény. Petr Štěpánek. S využitím materialu Krysztofa R. Apta

Umělá inteligence I. Roman Barták, KTIML.

Logika a logické programování

klauzulí deklarativní (specifikace programu je přímo programem) popel, glum & nepil 1/18

Umělá inteligence I. Roman Barták, KTIML.

Logické programování s omezujícími podmínkami. Constraint Logic Programming: CLP

popel, glum & nepil 16/28

Programovací jazyk Prolog

Logické programování

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)

Matematická logika. Miroslav Kolařík

Programovací jazyk Prolog

PA163 Programování s omezujícími podmínkami

Stefan Ratschan. Fakulta informačních technologíı. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

IB013 Logické programování I Hana Rudová. jaro 2011

IB015 Neimperativní programování. Neimperativní programování v Prologu. Jiří Barnat

Logické programování

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)

Metody odvozování. matematická východiska: logika, Prolog

Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

CLP(F D) program. Základní struktura CLP programu solve( Variables ) :- 1. definice proměnných a jejich domén declare_variables( Variables),

ILOG (aisa:/software/ilog/solver51/doc/index.html)

Základy umělé inteligence

Operace na datových strukturách

Prohledávání do šířky = algoritmus vlny

Vraťme se k základům: DFS = Depth First Search

MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ

FRAMEWORK PRO ŘEŠENÍ VÝPOČETNÍCH ÚLOH S OMEZUJÍCÍMI PODMÍNKAMI

Úvod do umělé inteligence, jazyk Prolog

Znalosti budeme nejčastěji vyjadřovat v predikátové logice prvního řádu. Metody:

type Obdelnik = array [1..3, 1..4] of integer; var M: Obdelnik;

Optimalizace & soft omezení: algoritmy

Formální systém výrokové logiky

Úvod do umělé inteligence, jazyk Prolog

Úvod do umělé inteligence, jazyk Prolog

Úvod do umělé inteligence, jazyk Prolog

Úvod do umělé inteligence, jazyk Prolog

Úvod do umělé inteligence, jazyk Prolog

Klauzulární logika. úvod. Šárka Vavrečková. 20. října Ústav informatiky Filozoficko-Přírodovědecká fakulta Slezské univerzity, Opava

Řešení: PŘENESVĚŽ (N, A, B, C) = přenes N disků z A na B pomocí C

Operace na datových strukturách

Programování. s omezujícími podmínkami. SAT a lokáln. Algoritmus GSAT. Algoritmus GSAT. Roman Barták

Výroková a predikátová logika - V

Negativní informace. Petr Štěpánek. S použitím materiálu M.Gelfonda a V. Lifschitze. Logické programování 15 1

Základy objektové orientace I. Únor 2010

Přednáška 3. Rekurze 1

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

1. Znalostní systémy a znalostní inženýrství - úvod. Znalostní systémy. úvodní úvahy a předpoklady. 26. září 2017

Tableaux metody. Jiří Vyskočil 2011

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 21.

1/1 ČESKÁ ZEMĚDĚLSKÁ UNIVERZITA V PRAZE PROVOZNĚ EKONOMICKÁ FAKULTA PŘIJÍMACÍ ŘÍZENÍ 2017/2018

NP-úplnost problému SAT

Generátor jedinečných zadání

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12.

Úvod do TI - logika Logické programování, PROLOG (10.přednáška) Marie Duží

Hanojská věž. T2: prohledávání stavového prostoru. zadání [1 1 1] řešení [3 3 3] dva možné první tahy: [1 1 2] [1 1 3]

Sekvenční a podmíněné provádění

Výroková logika. Teoretická informatika Tomáš Foltýnek

8 Třídy, objekty, metody, předávání argumentů metod

Marie Duží

Predikátová logika. prvního řádu

Slepé prohledávání do šířky Algoritmus prohledávání do šířky Při tomto způsobu prohledávání máme jistotu, že vždy nalezneme koncový stav, musíme ale p

EXTRAKT z mezinárodní normy

IB111 Programování a algoritmizace. Programovací jazyky

Obsah přednášky. programovacího jazyka. Motivace. Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup Kontinuace Program

Úvod. Programovací paradigmata

VYSOKÁ ŠKOLA BÁŇSKÁ TECHNICKÁ UNIVERZITA OSTRAVA FAKULTA STROJNÍ DATABÁZOVÉ SYSTÉMY ARCHITEKTURA DATABÁZOVÝCH SYSTÉMŮ. Ing. Lukáš OTTE, Ph.D.

Implementace LL(1) překladů

Occur-check (Test konfliktu proměnných)

Programovací jazyk Pascal

Preprocesor a koncepce (větších) programů. Úvod do programování 2 Tomáš Kühr

BAKALÁŘSKÁ PRÁCE. Jaroslav Mlejnek. Globální podmínky

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Každé formuli výrokového počtu přiřadíme hodnotu 0, půjde-li o formuli nepravdivou, a hodnotu 1, půjde-li. α neplatí. β je nutná podmínka pro α

2 Strukturované datové typy Pole Záznam Množina... 4

1. Implementace funkce počet vrcholů. Předmět: Algoritmizace praktické aplikace (3ALGA)

Ontologie. Otakar Trunda

ý ů ú ú ý ý ý é š ý ů é ý ů ú ú ů ýš ýš é ý š ýš ý ý ý ů š ý

Výroková a predikátová logika - II

Měření dat Filtrace dat, Kalmanův filtr

23. Splnitelnost a platnost výrokových formulí, dedukce ve výrokové logice

10. Techniky formální verifikace a validace

Aplikace je program určený pro uživatele. Aplikaci je možné rozdělit na části:

Funkcionální programování. Kristýna Kaslová

Algoritmizace. Algoritmizace (Y36ALG), Šumperk - 1. přednáška 1

Katedra kybernetiky skupina Inteligentní Datové Analýzy (IDA) 9. ledna 2017

PODPROGRAMY PROCEDURY A FUNKCE

Výroková logika - opakování

Algoritmus. Přesné znění definice algoritmu zní: Algoritmus je procedura proveditelná Turingovým strojem.

Sémantika predikátové logiky

Transkript:

Programování Cvičení 1 s omezujícími podmínkami Roman Barták Katedra teoretické informatiky a matematické logiky roman.bartak@mff.cuni.cz http://ktiml.mff.cuni.cz/~bartak Využití CSP Využití principů, ale vlastní naprogramování řešících algoritmů. flexibilita (možst plně přizpůsobit vlastním potřebám) rychlost (pro daný problém) náročné na počáteční vývoji i údržbu Použití existujícího řešiče podmínek. zpravidla integrovaný formou knihovny do hostitelského jazyka naprogramované řešící algoritmy soustředění na modelování problému nelze zasahovat do nízko-úrovňových struktur (definice domén, ) někdy možst defivat vlastní podmínky často možst defivat vlastní prohledávání Řešiče podmínek http://ktiml.mff.cuni.cz/~bartak/constraints/systems.html Poskytované služby: implementace datových struktur pro modelování domén proměnných a pro podmínky základní rámec propagace podmínek filtrační algoritmy pro řadu podmínek (včetně globálních podmínek) základní prohledávací strategie včetně heuristik pro výběr proměnných a hodt rozhraní pro definici vlastních podmínek Klasifikace: samostatné řešičeš Minion vlastní programovací/modelovací jazyk Mozart, OPL, Comet, CHR hostitelský jazyk Prolog: ECLiPSe, SICStus Prolog C/C++: ILOG Solver, Gecode Java: Choco, JaCoP SICStus Prolog http://www.sics.se/sicstus Komerční systém, 30-denní zkušební licence Vlaststi podpora ISO standardu Prologu podpora řady počítačových platforem (Win, MacOS X, Linux, Solaris) vývojové prostředí GNU Emacs řada knihoven včetně clpfd možst tvorby samostatných t (stand-alone) )i vestavěných ě ýh (embedded) aplikací Proč Prolog? jedduchá syntax krátký program hodně umí přímočará integrace omezujících podmínek prohledávání je součástí řešícího systému

Základní koncept Prologu Architektura Prologu Prolog je deduktivní systém, který hledá odpovědi na otázky použitím báze znalostí skládající se z faktů a odvozovacích pravidel. Zdrojové soubory *.pl Prologvská databáze member(x,[x _]). member(x,[_ T]):- member(x,t). arc(b,e). delete([],_x,[]). delete([x T],X,T). edge(x,y):-arc(x,y). delete([y T],X,[Y NewT]):- edge(x,y):-arc(y,x). X\=Y, delete(t,x,newt). Kde je programování? tvorba databáze faktů a pravidel Prolog automaticky odvozuje odpovědi deklarativní programování Dotazy SICStus 3.11.0 (x86-win32-nt-4): Mon Oct 20 00:38:10 WEDT 2003 Licensed to visopt.com?- Prologovské fakty Prologovské fakty popisují základní údaje o řešeném problému. de(a). de(b). b d e de(c). a c) de(d). c de(e). jmé argument agu více argumentů se odděluje čárkami Přímé dotazy Je možné klást dotazy na fakty uložené v bázi znalostí Prologu: Prolog prompt dotaz?-de(a). odpověď yes?-de(bla).?- c) yes?-arc(a,d).?-path(a,d). de(a). de(b). de(c). de(d). de(e).

Otevřené dotazy Dotaz může obsahovat proměnné, jejichž hodty budou nalezeny v bázi znalostí:?-de(x). X=a požadavek na X=b alternativní odpověď X=c X=d X=e žádné další odpovědi?- arc(a,x). X=b X=c de(a). de(b). de(c). de(d). de(e). Složené dotazy Seznam faktů ů je vlastně ě jedduchá d databáze. Je možné zodpovědět otázku, jejíž odpověď není přímo uložena v databázi faktů, ale kterou lze získat kombinací faktů? A, je možné klást dotaz o kombinaci faktů zbáze znalostí:?- arc(a,y),arc(y,z). arc(y Y=b Z=c Proměnné variables je can možné be Y=b sdílet shared mezi between přímými dotazy simple open queries Z=d Y=c Z=d de(a). de(b). de(c). de(d). de(e). Syntatická pauza atomy vs. proměnné Data (a programy) jsou vyjádřeny formou termů. Atomy slova skládající se z písmen, čísel a podtržítek, která začínají malým písmenem a, arc, john_123, slova v jedduchých uvozovkách Edinburgh, Proměnné slova skládající se z písmen, čísel a podtržítek, která začínají velkým písmenem nebo podtržítkem X, Node, _name, _ je tzv. anymní proměnná různé výskyty _ jsou brány jako různé proměnné obsah proměnné není uživateli přístupný Syntaktická pauza Složené termy vyjadřují strukturovau informaci složené termy atomy y a proměnné jsou jedduché termy functor(arg1,,argn) je složený term, kde functor je atom a arg1,, argn jsou termy arc(a,c) path path(a,path(b,path(d,e))) tree(tree(a,tree(b,c)),tree(d,e)) a path arc(a,x) b path d e

Odvozovací pravidla dotaz můžeme pojmevat a uložit pro opakované použití doublearc(x,z): Z):-arc(X,Y),arc(Y,Z). arc(y Takovému dotazu se říká odvozovací pravidlo. Po formulaci pravidla na něj můžeme klást dotazy stejně jako na fakta:?-doublearc(b,w). pouze proměnné z W=e názvu pravidla jsou vráceny uživateli?- doublearc(a,w). W=c de(a). de(b). de(c). de(d). de(e).?-doublearc(b,w). odvozovací pravidla najdi pravidlo, jehož název odpovídá dotazu a příslušným způsobem navaž proměnné doublearc(b,w):-arc(b,y),arc(y,w). nahraď dotaz definicí pod-dotazu z pravidla?-arc(b,y),arc(y,w). najdi odpovídající fakt (arc(b,c)), (, dosaď proměnné a odstraň z dotazu?-arc(c,w). opakuj to samé se zbytkem (arc(c,d)) zkus alternativní fakta (arc(b,d),arc(d,e)) W=e de(a). de(b). de(c). de(d). de(e). Alternativní ní pravidla Je možné také defivat alternativní pravidla (disjunkce dotazů) edge(x,y):-arc(x,y). edge(x,y):-arc(y,x).?-edge(w,b). W=a W=c odvoze pomocí prvního pravidla odvoze pomocí druhého pravidla de(a). de(b). de(c). de(d). de(e). c) alternativní ní pravidla Stejně jako předtím, pouze se zkouší i alternativní pravidla.?-edge(w,b). Najdi pravidlo, jehož název odpovídá dotazu, navaž proměnné a nahraď dotazem definicí dotazu z pravidla edge(w,b):-arc(w,b).?-arc(w,b). najdi řešení dotazu pomocí faktů W=a zkus alternativní pravidlo pro původní dotaz edge(w,b):-arc(b,w). (b W)?-arc(b,W). najdi řešení dotazu pomocí faktů W=c de(a). de(b). de(c). de(d). de(e). c)

Rekurzivní pravidla Je dokonce možné použít jmé pravidlo při definici i ipod-dotazu, dd tj. použít rekurzi?-path(c,w). W=d W=e odvoze prvním pravidle a arc(c,d) odvoze druhým pravidlem a rekurzí de(a). de(b). de(c). de(d). de(e). Stejně jako předtím, ale pravidlo může být použito vícekrát. Každé užití pravidla vyžaduje čerstvou kopii proměnných (podobné jako volání procedury s lokálními proměnnými). de(a). de(b). de(c). de(d). de(e). path(c,w):-arc(c,w).?-arc(c,w) W=d?-path(c,W) path(d,w):-arc(d,w).?-arc(d,w) W=e path(e,w):-arc(e,w).?-arc(e,w) fail rekurzivní pravidla path(c,w):-arc(c,z1),path(z1,w).?-arc(c,z1),path(z1,w)?-path(d,w) path(c,w):- arc(c,z2),path(z2,w).?-arc(d,z2),path(z2,w)?-path(e,w) path(e,w):- arc(e,z3),path(z3,w).?-arc(e,z3),path(z3,w) fail Prolog ve zkratce Prologovský program se skládá z pravidel a faktů. Každé pravidlo má strukturu Hlava:-Tělo. Hlava je (složený) term Tělo je dotaz (konjunkce termů) Tělo typicky obsahuje všechny proměnné z Hlavy sémantika: pokud je Tělo pravda potom odvoď Hlavu Fakty jsou vlastně pravidla s prázdným tělem (true). Dotaz je konjunkce k termů: ů Q = Q1,Q2,,Qn. Q2 Q Najdi pravidlo, jehož hlava odpovídá dotazu Q1. Pokud je takových pravidel více, vytvoř bod volby apoužij první pravidlo. Pokud neexistuje žádné pravidlo, potom se vrať na poslední bod volby a zkus zde alternativní pravidlo. Použij tělo pravidla, kterým v dotazu nahraď část Q1. Pro pravidla, kde Tělo=true, dotaz Q1 zmizí. Opakuj, dokud nezískáš prázdný dotaz. Techlogie Prologu Prolog = Unifikace + Backtracking Unifikace (matching) slouží pro výběr vhodného pravidla (dle hlavy) vytvoření odpovědní substituce Jak? substitucí se snaží udělat termy syntakticky identické Backtracking (prohledávání do hloubky) je pro prozkoumání alternativ Jak? nejdříve vyřeš první část (zleva) dotazu použij první pravidlo (shora)