Programování
Transkript
Programování
Využití CSP Cvičení 1 Programování s omezujícími podmínkami Využití principů, ale vlastní naprogramování řešících algoritmů. flexibilita (možnost 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 j řešiče p 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žnost definovat vlastní podmínky často možnost definovat vlastní prohledávání Roman Barták Katedra teoretické informatiky a matematické logiky [email protected] http://ktiml.mff.cuni.cz/~bartak Programování s omezujícími podmínkami, Roman Barták Řešiče podmínek SICStus Prolog http://www.sics.se/sicstus 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 hodnot rozhraní pro definici vlastních podmínek Klasifikace: Minion vlastní programovací/modelovací jazyk M Mozart, t OPL, OPL Comet, C t CHR Vlastnosti Prolog: ECLiPSe, SICStus Prolog C/C++: ILOG Solver, Solver Gecode Java: Choco, JaCoP Programování s omezujícími podmínkami, Roman Barták 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žnost ž t ttvorby b samostatných t t ý h ((stand-alone) t d l ) i vestavěných t ě ý h (embedded) aplikací Proč Prolog? hostitelský jazyk Komerční č í systém, é 30-denníí zkušební š í licence samostatné é řřešiče šč jednoduchá 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 Programování s omezujícími podmínkami, Roman Barták Základní koncept 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. Archite rchitek ktur tura a Prologu Zdrojové soubory *.pl Prologvská databáze Kde jje programování? p g databáze faktů a pravidel Prolog automaticky odvozuje odpovědi ª deklarativní programování SICStus 3.11.0 (x86-win32-nt-4): Mon Oct 20 00:38:10 WEDT 2003 Licensed to visopt.com | ?- tvorba Dotazy Programování s omezujícími podmínkami, Roman Barták Programování s omezujícími podmínkami, Roman Barták Prologovské fakty Prologovské P l ké fakty f kt popisují i jí základní ákl d í údaje o řešeném problému. Přímé dotazy Je možné klást dotazy na fakty uložené v bázi znalostí Prologu: Prolog prompt node(a). node(a) node(b). node(c) node(c). node(d). node(e) node(e). jméno argument a gu e b d a c e arc(a,b). arc(a b) arc(a,c). arc(b c) arc(b,c). arc(b,d). arc(c d) arc(c,d). arc(d,e). více argumentů se j čárkami odděluje Programování s omezujícími podmínkami, Roman Barták arc(a,b). arc(a,c). member(X,[X|_]). arc(b,c). member(X,[_|T]):- arc(c,d). member(X,T). arc(d,e). 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). path(X,Y):-arc(X,Y). path(X,Y):-arc(X,Z),path(Z,Y). dotaz ?- node(a). odpověď yes ? node(bla). ?d (bl ) no ? arc(a,c). ?arc(a c) yes ?- arc(a,d). ? arc(a d) no ?- path(a,d). ? no node(a). node(b). node(c). node(d). node(e). arc(a,b). arc(a,c). arc(b,c). arc(b d) arc(b,d). arc(c,d). arc(d,e). Programování s omezujícími podmínkami, Roman Barták Otevřené dotazy Dotaz může obsahovat proměnné, jejichž hodnoty budou nalezeny v bázi znalostí: ?-node(X). X X=a ; požadavek na X=b ; alternativní odpověď X=c X c ; X=d ; X=e ; žád é d žádné další lší odpovědi d ědi no ?-arc(a,X). ( , ) X=b ; X=c ; no node(a). node(b). node(c). node(d). node(e). arc(a,b). ( , ) arc(a,c). arc(b,c). arc(b d) arc(b,d). arc(c,d). arc(d,e). Složené dotazy Seznam ffaktů S k ů je j vlastně l ě jednoduchá j d d há databáze. d bá Je možné zodpovědět otázku, jejíž odpověď není přímo uložena v databázi faktů, faktů ale kterou lze získat kombinací faktů? Ano je možné klást dotaz o kombinaci faktů z báze Ano, znalostí: Programování s omezujícími podmínkami, Roman Barták Syntaktická pauza atom tomy y vs. p proměnné Atomy slova skládající se z písmen, čísel a podtržítek, která j malým ý písmenem p začínají a, arc, john_123, … slova v jednoduchých ´Edinburgh´, ´ ´ … uvozovkách slova skládající se z písmen, čísel a podtržítek, která začínají velkým písmenem nebo podtržítkem _ X Node X, Node, _noname, noname … je tzv. anonymní proměnná složené termy y Složené termy vyjadřují strukturovanou informaci atomy y ap proměnné jjsou jednoduché j termyy functor(arg1,…,argn) je složený term, kde functor jje atom a arg1, g , …,, argn g jjsou termyy arc(a,c) path(a,path(b,path(d,e))) tree(tree(a,tree(b,c)),tree(d,e)) arc(a,X) … Proměnné arc(a,b). ( , ) arc(a,c). arc(b,c). arc(b,d). arc(c,d). arc(d,e). Programování s omezujícími podmínkami, Roman Barták Syntatická pauza Data (a programy) jsou vyjádřeny formou termů. node(a). node(b) node(b). node(c). node(d). node(e) node(e). arc(a Y) arc(Y Z) ?-arc(a,Y),arc(Y,Z). ? Y=b Z=c ; variables be Proměnné jecan možné shared between sdílet mezi přímými Y=b simple open queries dotazy Z=d Z d ; Y=c Z=d ; no různé výskyty _ jsou brány jako různé proměnné obsah proměnné není uživateli přístupný Programování s omezujícími podmínkami, Roman Barták path a • • • path b • path d • • e Programování s omezujícími podmínkami, Roman Barták Odvozovací pravidla dotaz můžeme pojmenovat a uložit pro opakované použití Jak to funguje? funguje? najdi pravidlo, jehož název odpovídá dotazu a příslušným způsobem navaž proměnné doubleArc(X Z):-arc(X doubleArc(X,Z): arc(X,Y),arc(Y,Z). Y) arc(Y Z) Takovému dotazu se říká odvozovací pravidlo. Po formulaci pravidla na něj můžeme klást dotazy stejně jako na fakta: node(a). ( ) node(b). node(c). node(d). node(e). d ( ) ?-doubleArc(b,W). W=d ; pouze proměnné z W=e ; názvu pravidla jsou vráceny uživateli no ?-doubleArc(a,W). ( , ) W=c ; W=d ; W=d ; no arc(a,b). , arc(a,c). arc(b,c). arc(b,d). arc(c,d). arc(d e) arc(d,e). doubleArc(b,W):-arc(b,Y),arc(Y,W). nahraď dotaz definicí p pod-dotazu z p pravidla ?-arc(b,Y),arc(Y,W). najdi j odpovídající p j fakt ((arc(b,c)), ( , )), dosaď p proměnné a odstraň z dotazu node(a). opakuj to samé se zbytkem (arc(c,d)) W=d ; zkus alternativní fakta (arc(b,d),arc(d,e)) W=e ; no edge(X,Y):-arc(X,Y). edge(X,Y):-arc(Y,X). arc(a,b). arc(a,c). arc(b,c). arc(b,d). arc(c,d). arc(d,e). Programování s omezujícími podmínkami, Roman Barták Alternativní Alternativ ní pravidla Je možné také definovat alternativní pravidla (disjunkce dotazů) node(b). node(c). node(d). node(e). ?-arc(c,W). Programování s omezujícími podmínkami, Roman Barták odvozovací p pravidla ? d bl A (b W) ?-doubleArc(b,W). Jak to funguje? funguje? alternativ lternativní ní pravidla p Stejně jako předtím, pouze se zkouší i alternativní pravidla. g ( , ) ?-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) edge(W,b):-arc(W,b). ?-edge(W,b). odvozeno pomocí W W=a ; prvního pravidla W=c ; W=d ; odvozeno pomocí druhého pravidla no node(a). node(b). node(c). node(d). node(e). ?-arc(W,b). najdi j řešení dotazu p pomocí faktů W=a ; zkus alternativní pravidlo pro původní dotaz node(a). node(b). node(c). node(d). node(e). edge(W,b):-arc(b,W). d (W b) (b W) arc(a,b). arc(a,c). arc(b c) arc(b,c). arc(b,d). arc(c,d). arc(d e) arc(d,e). Programování s omezujícími podmínkami, Roman Barták ?-arc(b,W). najdi řešení dotazu pomocí faktů W=c ; W=d ; no arc(a,b). arc(a,c). arc(b c) arc(b,c). arc(b,d). arc(c,d). arc(d e) arc(d,e). Programování s omezujícími podmínkami, Roman Barták Rek Re kurzivní urzivní pravidla Je dokonce možné použít jméno pravidlo při ři definici d fi i i pod-dotazu, dd t tj tj. použít žít rekurzi k i path(X,Y):-arc(X,Y). path(X,Y):-arc(X,Z),path(Z,Y). ?-path(c,W). odvozeno prvním W d ; W=d pravidle a arc(c,d) W=e ; odvozeno druhým no pravidlem a rekurzí node(a). node(b). node(c). node(d). node(e). d ( ) arc(a,b). arc(a,c). arc(b,c). arc(b,d). arc(c,d). arc(d,e). (d ) Jak to funguje? funguje? Stejně jako předtím, ale pravidlo může být použito vícekrát. vícekrát Každé užití pravidla y j čerstvou vyžaduje kopii proměnných (podobné jako volání procedury s lokálními proměnnými). rekurzivní urzivní pravidla p ?-path(c,W) path(c,W):-arc(c,W). ?-arc(c,W) Hlava jje (složený) ( ý) term Tělo je dotaz (konjunkce termů) sémantika: p pokud jje Tělo p pravda p potom odvoď Hlavu Tělo typicky obsahuje všechny proměnné z Hlavy node(a). node(b). d (b) node(c). node(d). node(e). ?-arc(d,W) Pro pravidla, kde Tělo=true, dotaz Q1 zmizí. Opakuj dokud nezískáš prázdný dotaz. Opakuj, dotaz Programování s omezujícími podmínkami, Roman Barták ?-arc(d,Z2),path(Z2,W) arc(d,e). arc(d,e). W=e ?-path(e,W) arc(a,b). arc(a,c). ( ) arc(b,c). arc(b,d). arc(c,d). arc(d,e). (d ) path(e,W):arc(e,Z3),path(Z3,W). ?-arc(e,W) ?-arc(e,Z3),path(Z3,W) fail fail Technologie Prologu Prolog = Unifikace + Backtracking Unifikace (matching) slouží pro výběr vhodného pravidla (dle hlavy) vytvoření odpovědní substituce Jak? Použij tělo pravidla, kterým v dotazu nahraď část Q1. path(c,W):arc(c,Z2),path(Z2,W). Programování s omezujícími podmínkami, Roman Barták Dotaz je D j konjunkce k j k termů: ů Q = Q1,Q2,…,Qn. Q1 Q2 Q Najdi pravidlo, jehož hlava odpovídá dotazu Q1. ?-path(d,W) path(d,W):-arc(d,W). path(e,W):-arc(e,W). Fakty jsou vlastně pravidla s prázdným tělem (true). Pokud je takových pravidel více, více vytvoř „bod bod volby volby“ a použij první pravidlo. Pokud neexistuje žádné pravidlo, potom se vrať na poslední bod pravidlo. volbyy a zkus zde alternativní p arc(c,d). W=d path(X,Y):-arc(X,Y). th(X Y) (X Y) path(X,Y):-arc(X,Z),path(Z,Y). Prolog ve zkratce ?-arc(c,Z1),path(Z1,W) arc(c,d). Programování s omezujícími podmínkami, Roman Barták Prologovský „program program“ se skládá z pravidel a faktů. faktů Každé pravidlo má strukturu Hlava:-Tělo. path(c,W):-arc(c,Z1),path(Z1,W). substitucí se snaží udělat termy syntakticky identické Backtracking (prohledávání do hloubky) je pro prozkoumání alternativ Jak? nejdříve j vyřeš y první p část (zleva) ( ) dotazu použij první pravidlo (shora) Programování s omezujícími podmínkami, Roman Barták
Podobné dokumenty
1 Implementace gramatiky
Každopádně hledáme takové objekty našeho modelu, které splňují zadání. Prakticky ale nelze nejdříve vytvořit všechny možné
objekty, které gramatika připouští, a pak mezi nimi hledat.