Wykład 9 w oparciu o: K. Marriott, P.J. Stuckey. Programming with Constraints. An Introduction P. Kobylański Wprowadzenie do Sztucznej Inteligencji 204 / 279
P. Kobylański Wprowadzenie do Sztucznej Inteligencji 205 / 279
+ + - - + - - - - Fork + + - - - + + Arrow - - + + + + - - + + b) c) d) + + + Ell + + - - + + + - - e) Tee + - P. Kobylański Wprowadzenie do Sztucznej Inteligencji 206 / 279
Definition () (CSP) składa się z ograniczenia C nad zmiennymi x 1,...,x n oraz dziedziny D, która odwzorowuje każdą zmienną x i na skończony zbiór wartości D(x i ), które może ta zmienna przyjąć. CSP reprezentuje ograniczenie: C ^ x 1 2 D(x 1 ) ^ ^x n 2 D(x n ). P. Kobylański Wprowadzenie do Sztucznej Inteligencji 207 / 279
Example (Kolorowanie mapy) P. Kobylański Wprowadzenie do Sztucznej Inteligencji 208 / 279
Example (cd.) X 1 X 2 X 3 X 4 X 5 X 1 6= X 2 ^ X 1 6= X 3 ^ X 2 6= X 3 ^ X 2 6= X 4 ^ X 2 6= X 5 ^... P. Kobylański Wprowadzenie do Sztucznej Inteligencji 209 / 279
Example (cd.) P. Kobylański Wprowadzenie do Sztucznej Inteligencji 210 / 279
Example (Problem n-hetmanów) P. Kobylański Wprowadzenie do Sztucznej Inteligencji 211 / 279
Example (cd.) R 1,...,R 4 2{1, 2, 3, 4} C 1,...,C 4 2{1, 2, 3, 4} R 1 6= R 2 ^ R 1 6= R 3 ^ R 1 6= R 4 ^ R 2 6= R 3 ^ R 2 6= R 4 ^ R 3 6= R 4 C 1 6= C 2 ^ C 1 6= C 3 ^ C 1 6= C 4 ^ C 2 6= C 3 ^ C 2 6= C 4 ^ C 3 6= C 4 C 1 C 2 6= R 1 R 2 ^ C 1 C 3 6= R 1 R 3 ^ ^ C 3 C 4 6= R 3 R 4 P. Kobylański Wprowadzenie do Sztucznej Inteligencji 212 / 279
Example (Kojarzenie małżeństw) kim nicole peter maria bernd erika likes(x nicole, nicole) ^ likes(x maria, maria) ^ likes(x erika, erika)^ X nicole 6= X maria ^ X nicole 6= X erika ^ X maria 6= X erika P. Kobylański Wprowadzenie do Sztucznej Inteligencji 213 / 279
Prosty solver z nawrotami Prosty solver z nawrotami: C, C 1 ograniczenia c 1,...,c n proste ograniczenia D dziedzina x zmienna P. Kobylański Wprowadzenie do Sztucznej Inteligencji 214 / 279
Prosty solver z nawrotami function back_solve(c, D) if vars(c) ;then return partial_satisfiable(c) else choose x 2 vars(c) foreach value d 2 D(x) do let C 1 be obtained from C be replacing x by d if partial_satisfiable(c 1 ) then if back_solve(c 1,D)then return true return false P. Kobylański Wprowadzenie do Sztucznej Inteligencji 215 / 279
function partial_satisfiable(c) let C be of the form c 1 ^ ^c n for i 1,...,n do if vars(c i ) ;then if satisfiable(c i ) false then return false return true P. Kobylański Wprowadzenie do Sztucznej Inteligencji 216 / 279
Prosty solver z nawrotami Example X < Y ^ Y < Z ^ X, Y, Z 2{1, 2} X < Y Y < Z X=1 X=2 1 < Y Y < Z Y=1 Y=2 2 < Y Y < Z Y=1 Y=2 false 1 < 2 2 < Z false false Z=1 Z=2 false false P. Kobylański Wprowadzenie do Sztucznej Inteligencji 217 / 279
Zgodność wierzchołkowa i łukowa Definition Dziedzina jest fałszywa, jeśli którejś ze zmiennych przyporządkowuje pusty zbiór wartości. Dziedzina jest waluacją, jeśli każdej zmiennej przyporządkowuje jednoelementowy zbiór wartości. Funkcja satisfiable(c, D) pobiera ograniczenie C oraz dziedzinę będącą waluacją D izwracatrue albo false wskazując na to, czy C jest spełnione czy nie przez waluację D. P. Kobylański Wprowadzenie do Sztucznej Inteligencji 218 / 279
Zgodność wierzchołkowa i łukowa Example Rozpatrzmy zmienne X, Y, Z iograniczeniec będące koniunkcją X < Y ^ Y < Z. Dziedzina D 1 przyporządkowująca D 1 (X )=D 1 (Y )={1, 2} i D 1 (Z) =; jest fałszywą dziedziną. Dziedzina D 2, w której D 2 (X )={1}, D 2 (Y )={2}, D 2 (Z) ={1} jest waluacją i satisfiable(c, D 2 ) ma wartość false. P. Kobylański Wprowadzenie do Sztucznej Inteligencji 219 / 279
Zgodność wierzchołkowa i łukowa Definition (Zgodność wierzchołkowa) Proste ograniczenie c jest zgodne wierzchołkowo z dziedziną D jeśli albo vars(c) 6= 1albovars(c) ={x} idlakażdegod 2 D(x), {x 7! d} jest rozwiązaniem c. CSP z ograniczeniem c 1 ^ ^c n idziedzinąd jest zgodny wierzchołkowo jeśli każde proste ograniczenie c i jest zgodne wierzchołkowo z D, dla1apple i apple n. P. Kobylański Wprowadzenie do Sztucznej Inteligencji 220 / 279
Zgodność wierzchołkowa i łukowa Definition (Zgodność łukowa) Proste ograniczenie c jest zgodne łukowo z dziedziną D jeśli albo vars(c) 6= 2albovars(c) ={x, y} idlakażdegod x 2 D(x) istnieje d y 2 D(y), tż.{x 7! d x, y 7! d y } jest rozwiązaniem c oraz dla każdego d y 2 D(y) istnieje d x 2 D(x), tż.{x 7! d x, y 7! d y } jest rozwiązaniem c. CSP z ograniczeniem c 1 ^ ^c n idziedzinąd jest zgodny łukowo jeśli każde proste ograniczenie c i jest zgodne łukowo z D, dla 1 apple i apple n. P. Kobylański Wprowadzenie do Sztucznej Inteligencji 221 / 279
Zgodność wierzchołkowa i łukowa Example Ograniczenie X < Y ^ Y < Z ^ Z apple 2 zdziedzinąd, tż.d(x )=D(Y )=D(Z) ={1, 2, 3} nie jest zgodne wierzchołkowo z powodu wartości 3 dla Z wograniczeniuprostymz apple 2. Nie jest ono również zgodne łukowo gdyż np. dla wartości 1 dla zmiennej Y nie ma w dziedzinie D(X ) wartości d X spełniającej warunek d X < 1. P. Kobylański Wprowadzenie do Sztucznej Inteligencji 222 / 279
Zgodność wierzchołkowa i łukowa Algorytm zapewniający zgodność wierzchołkową: x jest zmienną C jest ograniczeniem D jest dziedziną c, c 1,...,c n są prostymi ograniczeniami d wartość z dziedziny P. Kobylański Wprowadzenie do Sztucznej Inteligencji 223 / 279
Zgodność wierzchołkowa i łukowa function node_consistent(c, D) let C be of form c 1 ^ ^c n for i 1,...,n do if vars(c) = 1 then let {x} = vars(c) D(x) {d 2 D(x) {x 7! d} is a solution of c} return D P. Kobylański Wprowadzenie do Sztucznej Inteligencji 224 / 279
Zgodność wierzchołkowa i łukowa Algorytm zapewniający zgodność łukową: x, y są zmiennymi C jest ograniczeniem D, W są dziedzinami c, c 1,...,c n są prostymi ograniczeniami d x, d y są wartościami z dziedziny P. Kobylański Wprowadzenie do Sztucznej Inteligencji 225 / 279
Zgodność wierzchołkowa i łukowa function arc_consistent(c, D); let C be of form c 1 ^ ^c n repeat W D for i 1,...,n do if vars(c) = 2 then let {x, y} = vars(c) D(x) {d x 2 D(x) for some d y 2 D(y), {x 7! d x, y 7! d y } is a solution of c} D(y) {d y 2 D(y) for some d x 2 D(x), {x 7! d x, y 7! d y } is a solution of c} until W D return D P. Kobylański Wprowadzenie do Sztucznej Inteligencji 226 / 279
Zgodność wierzchołkowa i łukowa Niepełny solver zgodny wierzchołkowo i łukowo: C jest ograniczeniem D jest dziedziną P. Kobylański Wprowadzenie do Sztucznej Inteligencji 227 / 279
Zgodność wierzchołkowa i łukowa function arc_solv(c, D) D node_consistent(c, D) D arc_consistent(c, D) if D is a false domain then return false else if D is a valuation domain then return satisfiable(c, D) else return unknown P. Kobylański Wprowadzenie do Sztucznej Inteligencji 228 / 279
Zgodność wierzchołkowa i łukowa Example X < Y ^ Y < Z ^ Z apple 2 D(X ) D(Y ) D(Z) komentarz {1, 2, 3} {1, 2, 3} {1, 2, 3} init {1, 2, 3} {1, 2, 3} {1, 2} node(z apple 2) {1, 2} {2, 3} {1, 2} arc(x < Y ) {1, 2} ; ; arc(y < Z) ; ; ; arc(x < Y ) P. Kobylański Wprowadzenie do Sztucznej Inteligencji 229 / 279
Zgodność wierzchołkowa i łukowa Pełny solver zgodny wierzchołkowo i łukowo: C jest ograniczeniem D, D 1 są dziedzinami x jest zmienną d jest wartością z dziedziny P. Kobylański Wprowadzenie do Sztucznej Inteligencji 230 / 279
Zgodność wierzchołkowa i łukowa function back_arc_solv(c, D) D node_consistent(c, D) D arc_consistent(c, D) if D is a false domain then return false else if D is a valuation domain then if satisfiable(c, D) then return D else return false choose variable x such that D(x) 2 foreach d 2 D(x) do D 1 back_arc_solv(c ^ x = d, D) if D 1 6 false then return D 1 return false P. Kobylański Wprowadzenie do Sztucznej Inteligencji 231 / 279
Zgodność zakresowa Definition (Zgodność hiper-łukowa) Proste ograniczenie c jest zgodne hiper-łukowo z dziedziną D, jeśli dla każdej zmiennej x 2 vars(c) ikażdejwartościd 2 D(x), istnieje przyporządkowanie pozostałym zmiennym x 1,...,x k w c takich wartości d j 2 D(x j ),dla1apple j apple k, że {x 7! d, x 1 7! d 1,...,x k 7! d k } jest rozwiązaniem c. CSP z ograniczeniem c 1 ^ ^c n idziedzinąd jest zgodne hiper-łukowo jeśli każde proste ograniczenie c i jest hiper-łukowo zgodne z dziedziną D, dla1apple i apple n. Rozstrzygnięcie czy proste ograniczenie jest hiper-łukowo zgodne jest problemem NP-trudnym. P. Kobylański Wprowadzenie do Sztucznej Inteligencji 232 / 279
Zgodność zakresowa Example Proste ograniczenie X = 3 Y + 5 Z nie jest hiper-łukowo zgodne z dziedziną D, w której D(X )={2, 3, 4, 5, 6, 7}, D(Y )={0, 1, 2}, D(Z) ={ 1, 0, 1, 2}. Powyższe ograniczenie jest hiper-łukowo zgodne z dziedziną D 1, w której D 1 (X )={3, 5, 6}, D 1 (Y )={0, 1, 2}, D 1 (Z) ={0, 1}. P. Kobylański Wprowadzenie do Sztucznej Inteligencji 233 / 279
Zgodność zakresowa Definition (Arytmetyczny CSP) CSP jest arytmetyczny jeśli każda zmienna w CSP przyjmuje wartości ze skończonego zbioru wartości całkowitych i każde proste ograniczenie jest ograniczeniem arytmetycznym. Definition (Zakres) Zakres [l..u] reprezentuje zbiór liczb całkowitych {l, l + 1,...,u} gdy l apple u, w przeciwnym przypadku reprezentuje pusty zbiór. Jeśli D jest dziedziną nad liczbami całkowitymi, to min D (x) jest najmniejszym elementem w D(x), natomiastmax D (x) jest największym elementem w D(x). P. Kobylański Wprowadzenie do Sztucznej Inteligencji 234 / 279
Zgodność zakresowa Definition (Zgodność zakresowa) Proste ograniczenie arytmetyczne c jest zgodne zakresowo z dziedziną D jeśli dla dowolnej zmiennej x 2 vars(c) idowolnegoprzyporządkowania rzeczywistych liczb d 1,...,d k do wszystkich pozostałych zmiennych x 1,...,x k w c, tż.min D (x j ) apple d j apple max D (x j ),dlakażdegod j zachodzi: {x 7! min D (x), x 1 7! d 1,...,x k 7! d k } jest rozwiązaniem c oraz {x 7! max D (x), x 1 7! d 1,...,x k 7! d k } jest rozwiązaniem c. Arytmetyczny CSP z ograniczeniem c 1 ^ ^c n idziedzinąd jest zgodny zakresowo jeśli każde proste ograniczenie c i jest zgodne zakresowo z D, dla 1 apple i apple n. P. Kobylański Wprowadzenie do Sztucznej Inteligencji 235 / 279
Zgodność zakresowa Example Rozpatrzmy ograniczenie X = 3 Y + 5 Z oraz dziedzinę D: D(X )=[2..7], D(Y )=[0..2], D(Z) =[ 1..2]. Powyższe ograniczenie nie jest zgodne zakresowo z D, natomiast jest zgodne zakresowo z D 1, w której: D 1 (X )=[2..7], D 1 (Y )=[0..2], D 1 (Z) =[0..1]. Nie oznacza to jednak, że jest ono zgodne hiper-łukowo z D 1. P. Kobylański Wprowadzenie do Sztucznej Inteligencji 236 / 279
Zgodność zakresowa Definition (Reguły propagacji) Reguły propagacji opisują jak efektywnie zawężać dziedzinę zmiennych dla zadanego prostego ograniczenia, tak aby było ono zgodne zakresowo z zawężoną dziedziną. Example Ograniczenie X = Y + Z może być zapisane na trzy sposoby: X = Y + Z, Y = X Z, Z = X Y, z których wynikają następujące ograniczenia na zakresy zmiennych: X min D (Y )+min D (Z), X apple max D (Y )+max D (Z), Y min D (X ) max D (Z), Y apple max D (X ) min D (Z), Z min D (X ) max D (Y ), Z apple max D (X ) min D (Y ). P. Kobylański Wprowadzenie do Sztucznej Inteligencji 237 / 279
Zgodność zakresowa Algorytm zapewniający zgodność zakresową: C arytmetyczne ograniczenie C 0 zbiór prostych ograniczeń D, D 1 dziedziny c 1,...,c n proste ograniczenia x zmienna P. Kobylański Wprowadzenie do Sztucznej Inteligencji 238 / 279
Zgodność zakresowa function bounds_consistent(c, D) let C be of form c 1 ^ ^c n C 0 {c 1,...,c n } while C 0 6 ; do choose c 2 C 0 C 0 C 0 {c} D 1 bounds_consistent_primitive(c, D) if D 1 is a false domain then return D 1 for i 1,...,n do if there exists x 2 vars(c i ) such that D 1 (x) 6= D(x) then C 0 C 0 [{c i } D D 1 return DP. Kobylański Wprowadzenie do Sztucznej Inteligencji 239 / 279
Zgodność zakresowa Niepełny solver zgodny zakresowo: C jest ograniczeniem D jest dziedziną P. Kobylański Wprowadzenie do Sztucznej Inteligencji 240 / 279
Zgodność zakresowa function bounds_solv(c, D) D bounds_consistent(c, D) if D is a false domain then return false else if D is a valuation domain then return satisfiable(c, D) else return unknown P. Kobylański Wprowadzenie do Sztucznej Inteligencji 241 / 279
Zgodność zakresowa Pełny solver zgodny zakresowo: C jest ograniczeniem D, D 1 są dziedzinami x jest zmienną d jest wartością z dziedziny P. Kobylański Wprowadzenie do Sztucznej Inteligencji 242 / 279
Zgodność zakresowa function back_bounds_solv(c, D) D bounds_consistent(c, D) if D is a false domain then return false else if D is a valuation domain then if satisfiable(c, D) then return D else return false choose variable x such that D(x) 2 foreach d 2 D(x) do D 1 back_bounds_solv(c ^ x = d, D) if D 1 6 false then return D 1 return false P. Kobylański Wprowadzenie do Sztucznej Inteligencji 243 / 279
Uogólniona zgodność Rozpatrzmy dla n zmiennych X 1,...,X n ograniczenie alldi erent([x 1,...,X n ]), spełnione przez n wartości parami różnych: X i 6= X j, dla i 6= j. P. Kobylański Wprowadzenie do Sztucznej Inteligencji 244 / 279
Uogólniona zgodność Example Poniższy CSP nie ma rozwiązania ale samo badanie zgodności łukowej nie jest w stanie tego wykryć: D(X 1 )={0, 1} X 1 X 3 D(X 3 )={0, 1} X 2 D(X 2 )={0, 1} Przykład w GNU Prologu:?- fd_domain([x1, X2, X3], 0, 1), fd_all_different([x1, X2, X3]). X1 = _#0(0..1) X2 = _#19(0..1) X3 = _#38(0..1) P. Kobylański Wprowadzenie do Sztucznej Inteligencji 245 / 279
Uogólniona zgodność Example Różnica między predykatem all_different/1 a all_distinct/1 a w SICStus Prologu?- domain([x1, X2, X3], 0, 1), all_different([x1, X2, X3]). X1 in 0..1, X2 in 0..1, X3 in 0..1? yes?- domain([x1, X2, X3], 0, 1), all_distinct([x1, X2, X3]). no a Jean Charles Regin. A filtering algorithm for constraints of difference in CSPs. AAAI-94, Seattle, WA, USA, pp 362 367, 1994. P. Kobylański Wprowadzenie do Sztucznej Inteligencji 246 / 279
Uogólniona zgodność Czy istnieje matching pokrywający wszystkie zmienne? Zmienne Wartości X 1 0 X 2 1 X 3 P. Kobylański Wprowadzenie do Sztucznej Inteligencji 247 / 279
Rozpatrzmy n czynności rozpoczynających się w chwilach S 1,...,S n i trwających odpowiednio D 1,...,D n jednostek czasu. Załóżmy, że każda z tych czynności wymaga pewnej liczby zasobu (np. ludzi ją wykonujących). Niech R 1,...,R n będzie wymaganą liczbą zasobu dla n czynności. Dodatkowo załóżmy, że posiadamy jedynie L jednostek zasobu (limit zasobu). Wżadnejchwilisumaprzydzielonychzasobówdoczynności wykonywanych w tej chwili (skumulowany zasób) nie może przekroczyć zadanego limitu. P. Kobylański Wprowadzenie do Sztucznej Inteligencji 248 / 279
Uogólniona zgodność Dla chwili t, niechj t jest podzbiorem indeksów {1,...,n}, tż. S i < t < S i + D i. Jest to zbiór indeksów tych czynności jakie wykonywane są w chwili t. Ograniczenie: cumulative([s 1,...,S n ], [D 1,...,D n ], [R 1,...,R n ], L), wyraża warunek, że w każdej chwili skumulowany zasób nie przekracza limitu: 8 t X i2j t R i apple L. P. Kobylański Wprowadzenie do Sztucznej Inteligencji 249 / 279
Uogólniona zgodność Example Rozpatrzmy cztery czynności o czasach trwania D 1 = 30, D 2 = 10, D 3 = 20, D 4 = 10 i wymaganej liczbie ludzi R 1 = 3, R 2 = 4, R 3 = 1, R 4 = 1. Czy możliwe jest wykonanie tych czynności w przedziale czasu długości 40 jednostek, jeśli dostępnych jest 4 ludzi? Chwile rozpoczęcia czynności 0 apple S i apple 40 D i,dlai = 1, 2, 3, 4, muszą spełniać ograniczenie: cumulative([s 1, S 2, S 3, S 4 ], [30, 10, 20, 10], [3, 4, 1, 1], 4). P. Kobylański Wprowadzenie do Sztucznej Inteligencji 250 / 279
Uogólniona zgodność Example (cd.) Harmonogram wykonania czynności: 4 3 Task 4 L=4 Task 3 2 1 R 1 Task 1 D 1 Task 2 10 20 30 40 P. Kobylański Wprowadzenie do Sztucznej Inteligencji 251 / 279
Uogólniona zgodność Rozpatrzmy ograniczenie element(i, [V 1,...,V n ], X ), które wiąże listę wartości całkowitych V 1,...,V n zwartościąx na tej liście ipozycjąi, na której ta wartość występuje na liście. P. Kobylański Wprowadzenie do Sztucznej Inteligencji 252 / 279
Uogólniona zgodność Example Przykład w SICStus Prologu:?- element(i, [3, 5, 3, 9, 6, 7, 2], X). I in 1..7, X in 2..9? yes?- element(i, [3, 5, 3, 9, 6, 7, 2], X), X #> 4. I in{2}\/(4..6), X in 5..9? yes P. Kobylański Wprowadzenie do Sztucznej Inteligencji 253 / 279
Optymalizacja arytmetycznych CSP Optymalizator całkowitoliczbowy oparty na próbach: C ograniczenie arytmetyczne D dziedzina D val dziedzina będąca waluacją albo false f arytmetyczne wyrażenie rozwiązanie best albo rozwiązanie albo false Wykorzystuje funkcję int_solv(c, D), która dla arytmetycznego ograniczenia C zwraca albo waluację albo false (np. back_bounds_solv). P. Kobylański Wprowadzenie do Sztucznej Inteligencji 254 / 279
Optymalizacja arytmetycznych CSP function retry_int_opt(c, D, f, best ) D val int_solv(c, D) if D val false then return best else let be the solution corresponding to D val return retry_int_opt(c ^ f < (f ), D, f, ) P. Kobylański Wprowadzenie do Sztucznej Inteligencji 255 / 279
Optymalizacja arytmetycznych CSP Example Przykład w GNU Prologu:?- fd_domain([x,y], 0, 5), 2*X+3*Y #>= 20, F #= X+2*Y, fd_labeling([x, Y]). F = 13 X = 3 Y = 5?- fd_domain([x,y], 0, 5), 2*X+3*Y #>= 20, F #= X+2*Y, F #< 13, fd_labeling([x, Y]). F = 12 X = 4 Y = 4?- fd_domain([x,y], 0, 5), 2*X+3*Y #>= 20, F #= X+2*Y, F #< 12, fd_labeling([x, Y]). no P. Kobylański Wprowadzenie do Sztucznej Inteligencji 256 / 279
Optymalizacja arytmetycznych CSP Optymalizator całkowitoliczbowy z nawrotami: C ograniczenie arytmetyczne D dziedzina f arytmetyczne wyrażenie best albo rozwiązanie albo false Wykorzystuje funkcję int_consistent(c, D) będącą solverem opartym na zgodności, który zwraca dziedzinę D 1,tż.C zdziedzinąd ma te same rozwiązania co C zdziedzinąd 1. P. Kobylański Wprowadzenie do Sztucznej Inteligencji 257 / 279
Optymalizacja arytmetycznych CSP function back_int_opt(c, D, f, best ) D int_consistent(c, D) if D false then return best else if D is a valuation domain then return the solution corresponding to D choose variable x 2 vars(c) for which D(x) 2 W D(x) foreach d 2 W do if best 6 false then c f < best (f ) else c true best back_int_opt(c ^ c ^ x = d, D, f, best ) return best P. Kobylański Wprowadzenie do Sztucznej Inteligencji 258 / 279
Optymalizacja arytmetycznych CSP Całkowitoliczbowy optymalizator korzystający z optymalizatora na liczbach rzeczywistych: d wartość rzeczywista x zmienna f całkowitoliczbowe wyrażenie, best waluacje albo false C całkowitoliczbowe ograniczenie Wykorzystuje funkcję real_opt(c, f ), która albo zwraca false albo zwraca optymalne rozwiązanie na liczbach rzeczywistych. P. Kobylański Wprowadzenie do Sztucznej Inteligencji 259 / 279
Optymalizacja arytmetycznych CSP function bb_int_opt(c, f, best ) real_opt(c, f ) if false then return best if best 6 false and (f ) > best (f ) then return best choose variable x such that d = (x) is not an integer best bb_int_opt(c ^ x applebdc, f, best ) best bb_int_opt(c ^ x dde, f, best ) return best P. Kobylański Wprowadzenie do Sztucznej Inteligencji 260 / 279