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

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.

Více

Cvičení 9

Cvičení 9 Cvi ení 9 Programování

Více

Cvičení 5

Cvičení 5 Cvi ení 5 Programování

Více

var2.astro.cz

var2.astro.cz Filtr U DSLR uvádějte Clear. Specifikace kanálů do poznámek.

Více