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

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

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

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

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

popel, glum & nepil 16/28

Logika a logické programování

Matematická logika. Miroslav Kolařík

2.5 Rezoluční metoda v predikátové logice

Programování v čistém Prologu

Logické programy Deklarativní interpretace

Logické programování I

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

Seminární práce z Teorie ICT

Modely Herbrandovské interpretace

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

Optimalizace & soft omezení: algoritmy

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

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

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

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

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

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

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

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

Logické programování

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

Sémantika predikátové logiky

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

Rezoluční kalkulus pro logiku prvního řádu

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

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

Skolemizace. x(x + f(x) = 0). Interpretace f unární funkce, která pro daný

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

Rezoluce v predikátové logice

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

4.2 Syntaxe predikátové logiky

Programovací jazyk Prolog

SEMESTRÁLNÍ ÚLOHY S PROGRAMY V PROLOGU (zadání úloh)

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

Automatizované řešení úloh s omezeními

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

platné nejsou Sokrates je smrtelný. (r) 1/??

Tableaux metody. Jiří Vyskočil 2011

Rezoluce v predikátové logice

Úvod do TI - logika Výroková logika - pokračování (3.přednáška) Marie Duží

Výroková logika. Sémantika výrokové logiky

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

ROZHODOVACÍ PROCEDURY A VERIFIKACE PAVEL SURYNEK, KTIML

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

Logické programování

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

Úvod do logiky (presentace 2) Naivní teorie množin, relace a funkce

Databázové systémy. * relační kalkuly. Tomáš Skopal. - relační model

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

Hranová konzistence. Arc consistency AC. Nejprve se zabýváme binárními CSP. podmínka odpovídá hraně v grafu podmínek

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

SEMESTRÁLNÍ ÚLOHY S PROGRAMY V PROLOGU (zadání úloh)

Predikátová logika dokončení

Výroková logika - opakování

Další (neklasické) logiky. Jiří Velebil: AD0B01LGR 2015 Predikátová logika 1/20

Vyhněte se katastrofám pomocí výpočetní matematiky

1 REZOLUČNÍ FORMÁLNÍ DŮKAZY

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

Základy logiky Logika a logické systémy. Umělá inteligence a rozpoznávání, LS

Úvod do umělé inteligence, jazyk Prolog

Úvod do umělé inteligence, jazyk Prolog

Rovnost lze vyjádřit jako predikát, např. můžeme zvolit, že P(x, y) reprezentujetvrzení xjerovnoy.

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

Úvod do umělé inteligence, jazyk Prolog

Rozvrhování zaměstnanců

Úvod do umělé inteligence, jazyk Prolog

1 Výroková logika 1. 2 Predikátová logika 3. 3 Důkazy matematických vět 4. 4 Doporučená literatura 7

Úvod do umělé inteligence, jazyk Prolog

rovnic), Definice y + p(x)y = q(x), Je-li q(x) = 0 na M, nazývá se y + p(x)y =

Oborové číslo Hodnocení - část A Hodnocení - část B Hodnocení - část A+B. 1. úloha (4 body) Kolik existuje cest délky 4 v grafu K11? 2.

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

Okruh č.3: Sémantický výklad predikátové logiky

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

1 Polynomiální interpolace

Úvod do umělé inteligence, jazyk Prolog

6. Logika a logické systémy. Základy logiky. Lucie Koloušková, Václav Matoušek / KIV. Umělá inteligence a rozpoznávání, LS

FIT ČVUT MI-LOM Lineární optimalizace a metody. Dualita. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

Kombinatorická minimalizace

Marie Duží

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

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

A4B33ZUI Základy umělé inteligence

Klasická predikátová logika

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

Od Aristotela k Prologu

Úvod do TI - logika Predikátová logika 1.řádu (4.přednáška) Marie Duží marie.duzi@vsb.cz

vhodná pro strojové dokazování (Prolog) metoda založená na vyvracení: dokazuje se nesplnitelnost formulí

IA008 Computational logic Version: 6. května Formule je v konjunktivní normální formě (CNF), pokud má tvar α 1... α n,

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

Součin matice A a čísla α definujeme jako matici αa = (d ij ) typu m n, kde d ij = αa ij pro libovolné indexy i, j.

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

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

0.1 Úvod do lineární algebry

Matematika (CŽV Kadaň) aneb Úvod do lineární algebry Matice a soustavy rovnic

Základy umělé inteligence

Transkript:

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

CP a programovací jazyk Dosavadní předpoklady (pro CSP) omezení jsou dostupná na začátku prohledávání omezení jsou reprezentována extensionálně jako množina povolených kombinací Programovací jazyk umožní přidávání omezení inkrementálně reprezentace omezení pomocí jazyka Omezení vs. logické programování (LP) omezení jako relace/predikát, konjunkce omezení jako logická spojka AND, backtracking jako základ pro řešení omezení logické programování založeno na predikátech, konjunkcích, prohledávání do hloubky Programování s omezujícími podmínkami I, 5. prosince 2003 2 Logické programování s omezujícími podmínkami

Návrat Prologu? Průmysl začíná používat Prolog Náhrada procedurálního kódu Prologem vede k desetinásobnému zmenšení kódu řádově menšímu času na vývoj, jednodušší údržbě Aplikace (zavedené aplikační oblasti, nutnost přidání inteligence) hypotéky pediatrický sw výroba oken a dveří: konfigurace a pravidla pro stanovení ceny objednávky testovací nástroje, modelové testování Efektivita Prologu? zrychlení počítačů + výrazné zvětšení nároků sw ve prospěch kompaktnosti i rychlosti Prologu Programování s omezujícími podmínkami I, 5. prosince 2003 3 Logické programování s omezujícími podmínkami

Logický program: množina klauzulí Klauzule: je tvaru H :- B H se nazývá hlava, B=B 1,...B m se nazývá tělo B i a H jsou literály Syntaxe LP literál je tvaru p(t 1,..., t n ), kde p je n-ární predikát a t i jsou termy začíná malým písmenem (p) term může být proměnná X konstanta c aplikace n-ární funkce na n termů f(t 1,..., t n ) začíná velkým písmenem (X) začíná malým písmenem (c) začíná malým písmenem (f) Tělo interpretováno jako logická konjunkce literálů, tj. B B 1,...B m :- reprezentuje implikaci z těla na hlavu, tj. H B Programování s omezujícími podmínkami I, 5. prosince 2003 4 Logické programování s omezujícími podmínkami

Syntaxe LP II. Kvantifikace proměnných: S H proměnné v H, S B proměnné v B pro všechny hodnoty proměnných v H existují hodnoty pro proměnné v B tak, že H B Příklad: p(x,y) :- q(x), r(x,y,z). pro hodnoty X,Y ex. hodnota Z tak, že když platí q(x) i r(x,y,z), pak platí p(x,y) Souvislosti s imperativním přístupem hlava jako definice procedury, tělo jako kód procedury Fakt: klauzule bez těla hlava pravdivá pro livovolné hodnoty jejích proměnných Příklad logického programu dosazitelny(x,x). dosazitelny(x,y) :- let(x,y). dosazitelny(x,y) :- let(x,z), dosazitelny(z,y). rekurze Programování s omezujícími podmínkami I, 5. prosince 2003 5 Logické programování s omezujícími podmínkami

Operační sémantika LP Provádění logického programu je dotaz na pravdivostní hodnotu cíle :- G. kde G=A 1,...A m, A i jsou literály existují hodnoty proměnných v G tak, aby všechny A i byly splněny? příklad: :- p(x,y). Unifikace literálů A 1 a A 2 : nalezení takového přiřazení termů proměnným v A 1 a A 2, že se výsledné literály rovnají přiřazení termů proměnným: substituce aplikace substituce σ na literál A vrací nový literál Aσ hledání nejobecnějšího unifikátoru (mgu), tj. minimální substituce A 1 = p(x, a, f (Z)), A 2 = p(b, Y, V ) substituce σ = {X = b, Y = a, V = f (Z)} je nejobecnější unifikátor substituce σ = {X = b, Y = a, V = f (c), Z = c} není nejobecnější unifikátor Programování s omezujícími podmínkami I, 5. prosince 2003 6 Logické programování s omezujícími podmínkami

Operační sémantika LP II. Odpověd na cíl: nalezení hodnot jeho proměnných rekurzivní unifikací aktuálního cíle s hlavou klauzule opakované provádění rezolučních kroků G = A, R H : B σ = mgu(a, H) G = (B, R)σ Posloupnost rezolučních kroků: rezoluční odvození úspěšné: končí prázdným cílem odpověd je složení substitucí z jednotlivých rezolučních kroků nelze pokračovat dalším rezolučním krokem nekonečné rezoluční odvození: cyklení Strom odvození: strom reprezentující množinu všech odvození začínající cílem Programování s omezujícími podmínkami I, 5. prosince 2003 7 Logické programování s omezujícími podmínkami

Strom rezolučního odvození: příklad a(x) : b(x, Y ), c(y ). (1) a(x) : c(x). (2) b(2, 3). (3) b(1, 2). (4) c(2). (5) : a(x). Programování s omezujícími podmínkami I, 5. prosince 2003 8 Logické programování s omezujícími podmínkami

Logické programování vs. Prolog Volba následujícího rezolučního kroku lze vybrat libovolný literál v cíli pro literál lze vybrat různé klauzule Logické programování: teoretická nezávislost na pořadí voleb Programovací jazyk logického programování (Prolog) volby nutné, abychom se vyhnuli nedeterminismu volba nejlevějšího literálu a první klauzule v programu + prohledávání stromu do hloubky (backtracking) důsledek voleb: neúplnost (cíl má řešení, ale Prolog ho nenajde) stupid(x,y) :- stupid(x,y). stupid(x,y) :- stop(x,y). stop(x,y). :- stupid(x,y). Programování s omezujícími podmínkami I, 5. prosince 2003 9 Logické programování s omezujícími podmínkami

Datové struktury Prologu Struktury: n-ární funkce jmeno(osoba(jmeno,prijmeni,vek), jmeno). Seznamy [] prázdný seznam [H T] seznam skládající se z prvního prvku H (hlavy seznamu) a zbývající části seznamu T (tělo seznamu) [X1,X2,...,Xn] seznam n prvků X1,X2,...,Xn Příklad: spojení seznamů append([],y,y). append([f R],Y,[F Z]) :- append(r,y,z). Programování s omezujícími podmínkami I, 5. prosince 2003 10 Logické programování s omezujícími podmínkami

LP jako programovací jazyk pro omezení CSP = logický program složený z množiny faktů bez proměnných + jedna klauzule pro konjunkci omezení příklad: X,Y,Z in {a,b,c}, c1(x,y)={(a,a),(a,b),(b,b)}, c2(y,z)={(b,a)} c1(a,a). c1(a,b). c1(b,b). c2(b,a). csp(x,y,z) :- c1(x,y), c2(y,z). tento logický program nalezne množinu všech řešení CSP Logické programy: umožňují vyjádření složitějších vztahů, rekurze i funkcí c(x,x). c(x,x) :-!, fail. c(x,y). fail vždy neuspěje, omezení pro rovnost dvou proměnných omezení pro nerovnost dvou proměnných! (řez) zajistí, že druhá klauzule není zkoušena po volání fail Modelování a řešení CSP pomocí LP snadné LP používá pouze backtracking: neefektivní pro řešení CSP propagace omezení není zahrnuta do řešícího algoritmu Programování s omezujícími podmínkami I, 5. prosince 2003 11 Logické programování s omezujícími podmínkami

Logické programování s omezujícími podmínkami Omezení jako) formule (místo n-ticspecifického jazyka omezení různé typy omezení: lineární rovnice nad R, nerovnice nad Z,... omezení tohoto typu se vyskytují v těle klauzule specializovaný řešič omezení pro omezení daného typu Gauss-Jordanův eliminační algoritmus: řešič pro lineární aritmetická omezení nad Q hranová konzistence: neúplný řešič pro aritmetická omezení nad konečnými doménami Výhody CLP oproti LP unifikace je rozšířena na řešení omezení unifikace v LP je jedno z omezení unifikační algoritmus lze chápat jako řešič omezení pro rovnost termů vyjadřování omezení vybraným jazykem je kompaktnější př. X#=Y jako nerovnost řešič omezení (obvykle založený na neúplné propagaci omezení) umožní kombinaci backtrackingu a propagace Programování s omezujícími podmínkami I, 5. prosince 2003 12 Logické programování s omezujícími podmínkami

Syntaxe CLP Výběr jazyka omezení CLP klauzule jako LP klauzule, ale její tělo může obsahovat omezení daného jazyka p(x,y) :- X #< Y+1, q(x), r(x,y,z). Rezoluční krok v LP kontrola existence mgu mezi cílem a hlavou Krok odvození v CLP také zahrnuje kontrola konzistence aktuální množiny omezení s omezeními v těle klauzule Vyvolání dvou řešičů: unifikace + řešič omezení Programování s omezujícími podmínkami I, 5. prosince 2003 13 Logické programování s omezujícími podmínkami

Operační sémantika CLP CLP výpočet Stor e množina aktivních omezení prostor omezení (constraint store) Programování s omezujícími podmínkami I, 5. prosince 2003 14 Logické programování s omezujícími podmínkami

Operační sémantika CLP CLP výpočet Stor e množina aktivních omezení prostor omezení (constraint store) inicializace Stor e = Programování s omezujícími podmínkami I, 5. prosince 2003 14 Logické programování s omezujícími podmínkami

Operační sémantika CLP CLP výpočet Stor e množina aktivních omezení prostor omezení (constraint store) inicializace Stor e = seznamy cílů prováděny v obvyklém pořadí Programování s omezujícími podmínkami I, 5. prosince 2003 14 Logické programování s omezujícími podmínkami

Operační sémantika CLP CLP výpočet Stor e množina aktivních omezení prostor omezení (constraint store) inicializace Stor e = seznamy cílů prováděny v obvyklém pořadí pokud narazíme na cíl s omezením c: NewStor e = Stor e {c} Programování s omezujícími podmínkami I, 5. prosince 2003 14 Logické programování s omezujícími podmínkami

Operační sémantika CLP CLP výpočet Stor e množina aktivních omezení prostor omezení (constraint store) inicializace Stor e = seznamy cílů prováděny v obvyklém pořadí pokud narazíme na cíl s omezením c: NewStor e = Stor e {c} snažíme se splnit c vyvoláním jeho řešiče Programování s omezujícími podmínkami I, 5. prosince 2003 14 Logické programování s omezujícími podmínkami

Operační sémantika CLP CLP výpočet Stor e množina aktivních omezení prostor omezení (constraint store) inicializace Stor e = seznamy cílů prováděny v obvyklém pořadí pokud narazíme na cíl s omezením c: NewStor e = Stor e {c} snažíme se splnit c vyvoláním jeho řešiče při neúspěchu se vyvolá backtracking při úspěchu se podmínky v NewStor e zjednoduší propagací omezení zbývající cíle jsou prováděny s upraveným NewStor e CLP výpočet je úspěšný, pokud se dostaneme z iniciálního stavu G, do stavu G, S, kde G je prázdný cíl a S je splnitelná. Programování s omezujícími podmínkami I, 5. prosince 2003 14 Logické programování s omezujícími podmínkami

Strom odvození CLP V LP kumulace substitucí, v CLP navíc kumulace omezení Strom CLP odvození obsahuje navíc v uzlu aktuální stav prostoru omezení fac(0,1). fac(n0,f0) :- N0 #>= 1, F0 #= N0*F, N #= N0-1, fac(n,f). :- fac(2,y). Programování s omezujícími podmínkami I, 5. prosince 2003 15 Logické programování s omezujícími podmínkami

CLP(X) CLP parametrické vzhledem k volbě jazyka omezení X CLP(T r ee) odpovídá LP T r ee identifikuje třídu rovností termů (term je strom) CLP(R): třída aritmetických omezení nad R CLP(F D): třída omezení nad proměnnými s konečnými doménami (CSP) Programování s omezujícími podmínkami I, 5. prosince 2003 16 Logické programování s omezujícími podmínkami

CLP(F D) program základní struktura CLP programu solve( Variables ) :- 1. definice proměnných a jejich domén declare_variables( Variables), 2. definice omezení post_constraints( Variables ), 3. hledání řešení labeling( Variables ). (1) a (2) deklarativní část modelování problému (3) řídící část prohledávání stavového prostoru řešení procedura pro hledání řešení (enumeraci) se nazývá labeling umožní nalézt jedno, všechna nebo optimální řešení Programování s omezujícími podmínkami I, 5. prosince 2003 17 Logické programování s omezujícími podmínkami

Rozvrhování úloh úloha doba trvání A 2 B 3 C 5 D 4 minimální doba trvání všech úloh A B C D F Programování s omezujícími podmínkami I, 5. prosince 2003 18 Logické programování s omezujícími podmínkami

Rozvrhování úloh úloha doba trvání A 2 B 3 C 5 D 4 minimální doba trvání všech úloh A B C D F reseni( [A,B,C,D,F] ) :- domain( [A,B,C,D,F], 0, 14), B #>= A + 2, C #>= A + 2, D #>= B + 3, Programování s omezujícími podmínkami I, 5. prosince 2003 18 Logické programování s omezujícími podmínkami

Rozvrhování úloh úloha doba trvání A 2 B 3 C 5 D 4 minimální doba trvání všech úloh A B C D F reseni( [A,B,C,D,F] ) :- domain( [A,B,C,D,F], 0, 14), B #>= A + 2, C #>= A + 2, D #>= B + 3, F #>= C + 5, F #>= D + 4, Programování s omezujícími podmínkami I, 5. prosince 2003 18 Logické programování s omezujícími podmínkami

Rozvrhování úloh úloha doba trvání A 2 B 3 C 5 D 4 minimální doba trvání všech úloh A B C D F reseni( [A,B,C,D,F] ) :- domain( [A,B,C,D,F], 0, 14), B #>= A + 2, C #>= A + 2, D #>= B + 3, F #>= C + 5, F #>= D + 4, labeling([minimize(f)],[a,b,c,d,f]). Programování s omezujícími podmínkami I, 5. prosince 2003 18 Logické programování s omezujícími podmínkami

Reprezentace domény Konečná doména často reprezentována jako interval celých čísel interval je uspořádaný doménu lze reprezentovat pomocí minimální a maximální hodnoty nebo v případě chybějících hodnot v intervalu: (min 1, max 1 ),..., (min n, max n ), kde (max i + 1) < min i+1 a min 1 max 1 < min 2 min 2 <... < min n max n :-? domain( [A,B], 1,3). domain( Variables, Min, Max) A in 1..3 B in 1..3 :-? A in 1..5, A #\= 4. X in Min..Max, X in Range A in (1..3) \/ (5..8) :-? A in (1..3) \/ (8..15) \/ (5..9) \/ {100}. A in (1..3) \/ (5..15) \/ {100} Programování s omezujícími podmínkami I, 5. prosince 2003 19 Logické programování s omezujícími podmínkami

Aritmetická omezení Intervalová konzistence konzistence mezí pro každý z podintervalů domény Expr RelOp Expr RelOp -> #= #\= #< #=< #> #>= A + B #=< 3, A #\= (C - 4) * ( D - 5), A/2 #= 4 sum(variables,relop,suma) domain([a,b,c,f],1,3), sum([a,b,c],#=,f) Programování s omezujícími podmínkami I, 5. prosince 2003 20 Logické programování s omezujícími podmínkami

Kombinatorická omezení: příklady Globální omezení pro řešení kombinatorických úloh all_distinct(list) všechny proměnné různé Programování s omezujícími podmínkami I, 5. prosince 2003 21 Logické programování s omezujícími podmínkami

Kombinatorická omezení: příklady Globální omezení pro řešení kombinatorických úloh all_distinct(list) všechny proměnné různé global_cardinality(list, KeyCounts) omezení na počet prvků daného typu v seznamu pro každý prvek Key-Count seznamu KeyCounts platí: Count prvků seznamu List se rovná klíči Key každé Key je celé číslo a vyskytuje se mezi klíči maximálně jednou Programování s omezujícími podmínkami I, 5. prosince 2003 21 Logické programování s omezujícími podmínkami

Kombinatorická omezení: příklady Globální omezení pro řešení kombinatorických úloh all_distinct(list) všechny proměnné různé global_cardinality(list, KeyCounts) omezení na počet prvků daného typu v seznamu pro každý prvek Key-Count seznamu KeyCounts platí: Count prvků seznamu List se rovná klíči Key každé Key je celé číslo a vyskytuje se mezi klíči maximálně jednou?- A in 1..3, B in 1..3, global_cardinality( [A,B], [1-N,2-2]). Programování s omezujícími podmínkami I, 5. prosince 2003 21 Logické programování s omezujícími podmínkami

Kombinatorická omezení: příklady Globální omezení pro řešení kombinatorických úloh all_distinct(list) všechny proměnné různé global_cardinality(list, KeyCounts) omezení na počet prvků daného typu v seznamu pro každý prvek Key-Count seznamu KeyCounts platí: Count prvků seznamu List se rovná klíči Key každé Key je celé číslo a vyskytuje se mezi klíči maximálně jednou?- A in 1..3, B in 1..3, global_cardinality( [A,B], [1-N,2-2]). A = 2, B = 2, N = 0 Programování s omezujícími podmínkami I, 5. prosince 2003 21 Logické programování s omezujícími podmínkami

Příklad: rozvrhování zaměstnanců vytvoření rozvrhu pro zaměstnance pracující na směny A = {R,D,N,Z,V} ráno, den, noc, záloha, volno P = {Petr,Pavel,Marie,...} W = {Po,Út,St,Čt,...} Po Út St Čt... Petr R N V R Pavel R Z R N Marie N V D D... Programování s omezujícími podmínkami I, 5. prosince 2003 22 Logické programování s omezujícími podmínkami

Příklad: rozvrhování zaměstnanců vytvoření rozvrhu pro zaměstnance pracující na směny A = {R,D,N,Z,V} ráno, den, noc, záloha, volno P = {Petr,Pavel,Marie,...} W = {Po,Út,St,Čt,...} Po Út St Čt... Petr R N V R Pavel R Z R N Marie N V D D... matice doménových proměnných: PetrPo, PetrUt,..., PavelPo,... Programování s omezujícími podmínkami I, 5. prosince 2003 22 Logické programování s omezujícími podmínkami

Příklad: rozvrhování zaměstnanců vytvoření rozvrhu pro zaměstnance pracující na směny A = {R,D,N,Z,V} = {1,2,3,4,5} ráno, den, noc, záloha, volno P = {Petr,Pavel,Marie,...} W = {Po,Út,St,Čt,...} Po Út St Čt... Petr R N V R Pavel R Z R N Marie N V D D... matice doménových proměnných: PetrPo, PetrUt,..., PavelPo,... Programování s omezujícími podmínkami I, 5. prosince 2003 22 Logické programování s omezujícími podmínkami

Příklad: rozvrhování zaměstnanců vytvoření rozvrhu pro zaměstnance pracující na směny A = {R,D,N,Z,V} = {1,2,3,4,5} ráno, den, noc, záloha, volno P = {Petr,Pavel,Marie,...} W = {Po,Út,St,Čt,...} Po Út St Čt... Petr R N V R Pavel R Z R N Marie N V D D... matice doménových proměnných: PetrPo, PetrUt,..., PavelPo,... každý den: minimální a maximální počet zaměstnanců každou směnu Programování s omezujícími podmínkami I, 5. prosince 2003 22 Logické programování s omezujícími podmínkami

Příklad: rozvrhování zaměstnanců vytvoření rozvrhu pro zaměstnance pracující na směny A = {R,D,N,Z,V} = {1,2,3,4,5} ráno, den, noc, záloha, volno P = {Petr,Pavel,Marie,...} W = {Po,Út,St,Čt,...} Po Út St Čt... Petr R N V R Pavel R Z R N Marie N V D D... matice doménových proměnných: PetrPo, PetrUt,..., PavelPo,... každý den: minimální a maximální počet zaměstnanců každou směnu R1 in MinRano1..MaxRano1, D1 in MinDen1..MaxDen1,... Programování s omezujícími podmínkami I, 5. prosince 2003 22 Logické programování s omezujícími podmínkami

Příklad: rozvrhování zaměstnanců vytvoření rozvrhu pro zaměstnance pracující na směny A = {R,D,N,Z,V} = {1,2,3,4,5} ráno, den, noc, záloha, volno P = {Petr,Pavel,Marie,...} W = {Po,Út,St,Čt,...} Po Út St Čt... Petr R N V R Pavel R Z R N Marie N V D D... matice doménových proměnných: PetrPo, PetrUt,..., PavelPo,... každý den: minimální a maximální počet zaměstnanců každou směnu R1 in MinRano1..MaxRano1, D1 in MinDen1..MaxDen1,... global_cardinality( [PetrPo,PavelPo,MariePo,...], [1-R1,2-D1,...,5-V1] ) Programování s omezujícími podmínkami I, 5. prosince 2003 22 Logické programování s omezujícími podmínkami

Příklad: rozvrhování zaměstnanců vytvoření rozvrhu pro zaměstnance pracující na směny A = {R,D,N,Z,V} = {1,2,3,4,5} ráno, den, noc, záloha, volno P = {Petr,Pavel,Marie,...} W = {Po,Út,St,Čt,...} Po Út St Čt... Petr R N V R Pavel R Z R N Marie N V D D... matice doménových proměnných: PetrPo, PetrUt,..., PavelPo,... každý den: minimální a maximální počet zaměstnanců každou směnu R1 in MinRano1..MaxRano1, D1 in MinDen1..MaxDen1,... global_cardinality( [PetrPo,PavelPo,MariePo,...], [1-R1,2-D1,...,5-V1] ) pro každého zaměstnance: minimální a maximální počet typu směny za týden Programování s omezujícími podmínkami I, 5. prosince 2003 22 Logické programování s omezujícími podmínkami

Příklad: rozvrhování zaměstnanců vytvoření rozvrhu pro zaměstnance pracující na směny A = {R,D,N,Z,V} = {1,2,3,4,5} ráno, den, noc, záloha, volno P = {Petr,Pavel,Marie,...} W = {Po,Út,St,Čt,...} Po Út St Čt... Petr R N V R Pavel R Z R N Marie N V D D... matice doménových proměnných: PetrPo, PetrUt,..., PavelPo,... každý den: minimální a maximální počet zaměstnanců každou směnu R1 in MinRano1..MaxRano1, D1 in MinDen1..MaxDen1,... global_cardinality( [PetrPo,PavelPo,MariePo,...], [1-R1,2-D1,...,5-V1] ) pro každého zaměstnance: minimální a maximální počet typu směny za týden R2 in MinRano2..MaxRano2, D2 in MinDen2..MaxDen2,... Programování s omezujícími podmínkami I, 5. prosince 2003 22 Logické programování s omezujícími podmínkami

Příklad: rozvrhování zaměstnanců vytvoření rozvrhu pro zaměstnance pracující na směny A = {R,D,N,Z,V} = {1,2,3,4,5} ráno, den, noc, záloha, volno P = {Petr,Pavel,Marie,...} W = {Po,Út,St,Čt,...} Po Út St Čt... Petr R N V R Pavel R Z R N Marie N V D D... matice doménových proměnných: PetrPo, PetrUt,..., PavelPo,... každý den: minimální a maximální počet zaměstnanců každou směnu R1 in MinRano1..MaxRano1, D1 in MinDen1..MaxDen1,... global_cardinality( [PetrPo,PavelPo,MariePo,...], [1-R1,2-D1,...,5-V1] ) pro každého zaměstnance: minimální a maximální počet typu směny za týden R2 in MinRano2..MaxRano2, D2 in MinDen2..MaxDen2,... global_cardinality( [PetrPo,PetrUt,...,PetrNe], [1-R2,2-D2,...,5-V2] ) Programování s omezujícími podmínkami I, 5. prosince 2003 22 Logické programování s omezujícími podmínkami

Labeling labeling( [] ). labeling( [Var Rest] ) :- % výběr nejlevější proměnné k instanciaci indomain( Var ), labeling( Rest ). % výběr hodnot ve vzrůstajícím pořadí Programování s omezujícími podmínkami I, 5. prosince 2003 23 Logické programování s omezujícími podmínkami

Labeling labeling( [] ). labeling( [Var Rest] ) :- % výběr nejlevější proměnné k instanciaci indomain( Var ), labeling( Rest ). % výběr hodnot ve vzrůstajícím pořadí?- X in 4..5, indomain(x). X = 4? ; X = 5? Programování s omezujícími podmínkami I, 5. prosince 2003 23 Logické programování s omezujícími podmínkami

Labeling labeling( [] ). labeling( [Var Rest] ) :- % výběr nejlevější proměnné k instanciaci indomain( Var ), labeling( Rest ). % výběr hodnot ve vzrůstajícím pořadí?- X in 4..5, indomain(x). X = 4? ; X = 5??- A in 0..2, B in 0..2, B#< A, labeling([a,b]). Programování s omezujícími podmínkami I, 5. prosince 2003 23 Logické programování s omezujícími podmínkami

Labeling labeling( [] ). labeling( [Var Rest] ) :- % výběr nejlevější proměnné k instanciaci indomain( Var ), labeling( Rest ). % výběr hodnot ve vzrůstajícím pořadí?- X in 4..5, indomain(x). X = 4? ; X = 5??- A in 0..2, B in 0..2, B#< A, labeling([a,b]). labeling( [] ). % MAC algortimus labeling( Variables ) :- select_variable( Variables, Var, Rest ), select_value( Var, Value ), ( Var #= Value, labeling( Rest ) ; Var #\= Value, labeling( Variables ) ). Programování s omezujícími podmínkami I, 5. prosince 2003 23 Logické programování s omezujícími podmínkami

Nejpoužívanější implementace CLP Swedish Institute of Computer Science: SICStus Prolog silná CLP(F D) knihovna http://www.sics.se/sicstus komerční i akademické použití pro širokou škálu platforem příklady v přednášce z této implementace :- use_module(library(clpfd)) IC-PARC, Imperial College London: ECL i PS e http://www.icparc.ic.ac.uk/eclipse široké možnosti kooperace mezi různými řešičemi: konečné domény, reálná čísla, repair akademické použití, komerční použití v rámci IC-PARC, platformy: Windows, Linux, Solaris CHIP http://www.cosytec.com knihovny dostupné pro Prolog i C++ GNU Prolog http://pauillac.inria.fr/~diaz/gnu-prolog/ GNU licence, tj. volně dostupný sw Programování s omezujícími podmínkami I, 5. prosince 2003 24 Logické programování s omezujícími podmínkami