Modelowanie za pomocą więzów w dziedzinach skończonych
description
Transcript of Modelowanie za pomocą więzów w dziedzinach skończonych
1
Modelowanie za pomocą więzów Modelowanie za pomocą więzów w dziedzinach skończonychw dziedzinach skończonych
2
Modelling wth Finite DomainsModelling wth Finite Domains
Domains and Labelling Complex Constraints Labelling Different Problem Modellings Example: Scheduling
3
Dziedziny i wyliczanieDziedziny i wyliczanie
Musimy definiować dziedziny zmiennych arytmetyczne X :: [1,2,3,4] or X :: [1..4]
niearytmetyczne X :: [red, blue, yellow] wiele zmiennych [X,Y,Z] :: [0..10]
Gdy dziedzina nieokreślona wybieramy pewien zasięg (np [-10000..10000]
4
Przykłady dziedzinPrzykłady dziedzin
Zapytanie dla problemu plecakowego:
[W,P,C] :: [0..9], 4*W + 3*P + 2*C <= 9,
15*W + 10*P + 7*C >= 30.
CLP(FD) odpowiada unknown.
Jak znaleźć rozwiązanie?
Utworzyć zupełny (nawracający) solwer
D W D P D C( ) [ .. ], ( ) [ .. ], ( ) [ .. ] 0 2 0 3 0 4
5
WyliczanieWyliczanie
Wbudowany predykat labeling daje możliwość utworzenia zupełnego solwera
labeling(Vs) bierze listę zmiennych FD Vs i znajduje rozwiązanie
[W,P,C] :: [0..9], 4*W + 3*P + 2*C <= 9,
15*W + 10*P + 7*C >= 30, labeling([W,P,C]).
Ma rozwiązanie:W P C W P C
W P C W P C
0 1 3 0 3 0
1 1 1 2 0 0
6
Ogranicz i generujOgranicz i generuj
Typowa postać programu FD defininiujemy zmienne i dziedziny podane są więzy modelujące program ,,uzupełnianie’’ za pomocą wyliczania
Można zastosować minimalizację do predykatu labelling
[W,P,C] :: [0..9], 4*W + 3*P + 2*C <= 9,
15*W + 10*P + 7*C >= 30,
minimize(labeling([W,P,C]), -15*W-10*P-7*C).
7
Send+More=Money. PrzykładSend+More=Money. PrzykładS E N D
M O R E
M O N E Y
Problem kryptoarytmetyczny, każda cyfra inna i zachodzi równaniesmm(S,E,N,D,M,O,R,Y) :-
[S,E,N,D,M,O,R,Y] :: [0..9],constrain(S,E,N,D,M,O,R,Y),labeling([S,E,N,D,M,O,R,Y]).
constrain(S,E,N,D,M,O,R,Y) :-S != 0, M != 0, alldifferent_neq([S,E,N,D,M,O,R,Y]), 1000*S + 100*E + 10*N + D+ 1000*M + 100*O + 10*R + E= 10000*M + 1000*O + 100*R + 10*E + Y.
8
Send+More=Money. PrzykładSend+More=Money. Przykład
Po deklaracji dziedzin:D S D E D N D D D M D O D R D Y( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) [ .. ] 0 9
Po mamy alldifferent_neq dodaje nierówn. (bez zmian)ostatecznie: (jedna reguła propagacji)
S M 0 0 D S D M( ) ( ) [ .. ] 1 9
MD S D E D D D R
D O D N D Y
1
9
91
9000
1
9000
1
9001
10
1
100
1
9000
max( , ) max( , ) max( , ) max( , )
min( , ) min( , ) min( , )
Dla bieżącej dziedziny:M 9
9
91 9
9000
9
9000
9
900
0
10
0
100
0
9000 1102.
9
Send+More=Money. PrzykładSend+More=Money. Przykład
Zatem D(M) = [1..1]Propagacja trwa dalej dając
D S D E D N D D
D M D O D R D Y
( ) [ .. ] ( ) [ .. ] ( ) [5.. ] ( ) [ .. ]
( ) [ .. ] ( ) [ .. ] ( ) [ .. ] ( ) [ .. ]
9 9 4 7 8 2 8
1 1 0 0 2 8 2 9
3 zmienne ustalone, wszyskie dziedziny zmniejszone
labelling próbuje S=0, S=1, ..., S=8 (zawodzą) następnie S=9. Potem E=0, E=1, E=2, E=3 (zawodzą) i E=4 (w końcu też zawodzi), następnie E=5 daje
D S D E D N D D
D M D O D R D Y
( ) [ .. ] ( ) [5.. ] ( ) [ .. ] ( ) [ .. ]
( ) [ .. ] ( ) [ .. ] ( ) [8.. ] ( ) [ .. ]
9 9 5 6 6 7 7
1 1 0 0 8 2 2
10
Generuj i testujGeneruj i testuj
Metodologia bez więzów:
generuj rozwiązanie i sprawdź je
smm(S,E,N,D,M,O,R,Y) :-[S,E,N,D,M,O,R,Y] :: [0..9],labeling([S,E,N,D,M,O,R,Y]),constrain(S,E,N,D,M,O,R,Y).
Ten program wymaga 95671082 wyborów przed znalezieniem rozwiązania, poprzedni jedynie 35 (z tego dwa nie dawały bezpośredniego nawrotu)
11
Złożone więzyZłożone więzy
Złożone więzy: alldifferent, cumulative i element
Bardziej zwięzłe modele Lepsza propagacja = większa efektywność Zamieńmy w przykładzie
alldifferent_neq([S,E,N,D,M,O,R,Y]) alldifferent([S,E,N,D,M,O,R,Y])
12
Złożone więzyZłożone więzy
L F S
--5 5
10 stopowa huśtawka, Liz, Fi i Sarah chcą usiąść w równowadze, w odległości co najmniej 3 stóp. Ważą 9,8,4 czegoś tam.
apart(X,Y,N) :- X >= Y + N.apart(X,Y,N) :- Y >= X + N.
[L,F,S] :: [-5..5], 9*L + 8*F + 4*S = 0,apart(L,F,3), apart(L,S,3), apart(F,S,3),labeling([L,F,S)]
13
Złożone więzyZłożone więzy
L F S
--5 5
Każda dziewczynka to pudełko o szerokości 3 wkładana do pudełka o szer 13
Pasuje do więzu cumulative--5 7
sarah fi liz[L,F,S] :: [-5..5], 9*L + 8*F + 4*S = 0,cumulative([L,F,S],[3,3,3],[1,1,1],1)labeling([L,F,S)]
14
WyliczanieWyliczanie
Labelling może być zaprogramowany w CLP(FD) za pomocą wbudowanych predykatów dom(V,D) lista wartości D w bieżącej dziedzinie V maxdomain(V,M) maksymalna wartość M zm V mindomain(V,M) bieżca minimalna wartość M zm V
labeling([]).labeling([V|Vs]) :- indomain(V), labeling(Vs).
indomain(V) :- dom(V,D), member(V,D).
15
WyliczanieWyliczanie
Wykorzystuje bierzące wartości dziedziny Przykład (Send-More-Money)
D S D E D N D D
D M D O D R D Y
( ) [ .. ] ( ) [ .. ] ( ) [5.. ] ( ) [ .. ]
( ) [ .. ] ( ) [ .. ] ( ) [ .. ] ( ) [ .. ]
9 9 4 7 8 2 8
1 1 0 0 2 8 2 9
Labelling próbuje S=9. potem E=4 (zawodzi w końcu), potem E=5 co dajeD S D E D N D D
D M D O D R D Y
( ) [ .. ] ( ) [5.. ] ( ) [ .. ] ( ) [ .. ]
( ) [ .. ] ( ) [ .. ] ( ) [8.. ] ( ) [ .. ]
9 9 5 6 6 7 7
1 1 0 0 8 2 2
Labelling dodadje N=6, D=7, M=1, O=0, R=9 i Y=2, i kończy z sukcesem
16
WyliczanieWyliczanie
Dwa wybory w labelling którą zmienną wyliczamy na początku kolejność próbowanych wartości
Domyślny labelling sprawdza zmienne w kolejności z listy wartości od min do max
Możemy zaprogramować inne strategie
17
Wybór zmiennychWybór zmiennych
Wybór zmiennych wpływa na wielkość drz. wypr. Wybieramy zmienną o najmniejszej bieżącej
dziedzinie Przykład
D S D E D N D D
D M D O D R D Y
( ) [ .. ] ( ) [ .. ] ( ) [5.. ] ( ) [ .. ]
( ) [ .. ] ( ) [ .. ] ( ) [ .. ] ( ) [ .. ]
9 9 4 7 8 2 8
1 1 0 0 2 8 2 9
Labelling najpierw bierze S, M, O (nic nie trzeba robić), potem E lub N. Lepiej niż Y jako pierwsza
18
Wyliczanie First-FailWyliczanie First-Fail
labelingff([]).labelingff(Vs) :- deleteff(Vs,V,R),
indomain(V), labelingff(R).
deleteff([V0|Vs],V,R) :- getsize(V0,S), minsize(Vs,S,V0,V,R)).
minsize([],_,V,V,[]).minsize([V1|Vs],S0,V0,V,[V0|R]) :-
getsize(V1,S1), S1 < S0,minsize(Vs,S1,V1,V,R).
minsize([V1|Vs],S0,V0,V,[V1|R]) :-getsize(V1,S1), S1 >= S0,minsize(Vs,S0,V0,V,R).
19
Wyliczanie First-FailWyliczanie First-Fail
labellingff wylicza najpierw wartości zmiennej o najmniejszej dziedzinie
minsize(Vs,S0,V0,V,R) znajduje wśród zmiennych Vs zmiennąr V o mnajmniejszej dziedzinie z najmniejzzą var V0 i rozmiarze S0, R to reszta zmiennych.
Zastosowanie zasady first-fail Aby wygrać, próbuj najpierw to, gdzie najłatwiej
przegrać”
20
Wybór wartości zmiennychWybór wartości zmiennych
Wybór wartości wpływa na porządek eksploracji gałęzi drzewa
Stosując wiedzę specyficzną problemowi można szybciej dojść do rozw.
Ważne dla optymalizacji dobre rozwiązanie szybko redukuje potem
przestrzeń przeszukiwań
21
N-hetmanówN-hetmanów
Q1 Q2 Q3 Q4
1
2
3
4
Problem umieszczenia N hetmanów na szachownicy NxN
Dla dużych N w rozwiązaniach wartości bardziej ,,środkowe’’
22
Porządek Middle-OutPorządek Middle-Out
indomain_mid(V) :- ordervalues(V,L), member(V,L).
ordervalues(V,L) :-dom(V,D), length(D,N), H = N//2,halvelist(H,D,[],F,S), merge(S,F,L).
halvelist(0,L2,L1,L1,L2).halvelist(N,[E|R],L0,L1,L2) :-
N >= 1, N1 = N - 1,halvelist(N1,R,[E|L0],L1,L2).
merge([],L,L).merge([X|L1],L2,[X|L3]) :- merge(L2,L1,L3).
23
Porządek Middle-OutPorządek Middle-Out
indomain_mid(V) próbuje wartości z dziedziny poczynając od środka
ordervalues tworzy uporządkowaną listę wartości
halvelist dzieli listę na dwie części, pierwszą odwraca
merge(L1,L2,L3) przeplata listy L1, L2 aby otrzymać L3
24
Efektywność wyliczaniaEfektywność wyliczania
Możemy jednocześnie użyć porządkowania zmiennych i wartości
10--19
30--39
50--59
70--79
1
10
100
1000
10000
Default
First-fail
Middleout
Rożna liczba wyborów w różnych zasięgach
25
Dzielenie dziedzinDzielenie dziedzin
Labelling to nie musi być przypisywanie zmiennym wartości
Należy zmniejszać dziedziny zmiennych Domain splitting rozdwaja dziedzinę
bieżącej zmiennej
26
Dzielenie dziedzinDzielenie dziedzin
labelingsplt([]).labelingsplt([V|Vs]) :-
mindomain(V,Min), maxdomain(V,Max),(Min = Max -> NVs = Vs; Mid = (Min+Max)//2,
labelsplt(V,Mid)append(Vs,[V],NVs)
),labelingsplt(NVs).
labelsplt(V,M) :- V <= M,.labelsplt(V,M) :- V >= M+1.
27
Dzielenie dziedzinDzielenie dziedzin
labelingsplt rekurencyjnie dzieli dziedziny zmiennych na połówki, aż każda stanie się jednopunktowa. Gdy Min=Max the zmienną usuwa się z listy, w przeciwnym wypadku dzieli się ją i daje na koniec listy zmiennych do podziałut.
labelsplt(V,M) zdecydyj, czy V ma bycr <= czy => od M
28
Jeden problem - różne modeleJeden problem - różne modele
Różne spojrzenia na problem dają różne modele
Inny modell = inne zbiory zmiennych W zależności od właściwości solwera
modele mogą dawać szybciej wynik Być może trzeba sprawdzić empirycznie
29
Rożne modeleRożne modele
Problem optymalizacyjny: 4 robotników w1,w2,w3,w4 i 4 produkty p1,p2,p3,p4. Przypisz robotników produktom aby zysk był >= 19
p p p p
w
w
w
w
1 2 3 4
1 7 1 3 4
2 8 2 5 1
3 4 3 7 2
4 3 1 6 3
Macierz zysków:
30
Model z badań operacyjnychModel z badań operacyjnych
p p p p
w
w
w
w
1 2 3 4
1 7 1 3 4
2 8 2 5 1
3 4 3 7 2
4 3 1 6 3
16 zmiennych logicznych Bij, każda mówi, że robotnik i jest przypisany do produktu j
i ijj
j ijj
B
B
P
B B B B
B B B B
B B B B
B B B B
P
14
1
4
14
1
4
11 12 13 14
21 22 23 24
31 32 33 34
41 42 43 44
1
1
7 3 4
8 2 5
4 3 7 2
3 6 3
19
11 więzów baz.
28 wyborów, by znaleźć 4 rozwiązania
B23
31
Lepszy modelLepszy model
Używamy więzów złożonych. Zmienne W1,W2,W3,W4 odpowiadają robotnikom
p p p p
w
w
w
w
1 2 3 4
1 7 1 3 4
2 8 2 5 1
3 4 3 7 2
4 3 1 6 3
alldifferent W W W W
element W WP
element W WP
element W WP
element W WP
P WP WP WP WP
P
([ , , , ])
( ,[ , , , ], )
( ,[8, , , ], )
( ,[ , , , ], )
( ,[ , , , ], )
1 2 3 4
1 7 1 3 4 1
2 2 5 1 2
3 4 3 7 2 3
4 3 1 6 3 4
1 2 3 4
19
7 więzów bazowych
14 wyborów
W1
W2
W3
W4
1 2 3 4
32
Inny modelInny model
Zmienne T1,T2,T3,T4 odpowiadające produktom.
p p p p
w
w
w
w
1 2 3 4
1 7 1 3 4
2 8 2 5 1
3 4 3 7 2
4 3 1 6 3
alldifferent T T T T
element T TP
element T TP
element T TP
element T TP
P TP TP TP TP
P
([ , , , ])
( ,[ , , , ], )
( ,[ , , , ], )
( ,[ , , , ], )
( ,[ , , , ], )
1 2 3 4
1 7 8 4 3 1
2 1 2 31 2
3 3 5 7 6 3
4 4 1 2 3 4
1 2 3 4
19
7 więzów bazowych
7 wyborów
1
2
3
4
T1 T2 T3 T4
33
Porównywanie modeliPorównywanie modeli
Różnice w efektywności pochodzą z bardziej bezpośredniego użycia więzów bazowych mniejszej ilości zmiennych zwykle wymaga sprawdzenia
Inne kryteria: łatwość wprowadzania dod. ogr. np.. Robotnik 3 pracuje nad produktem > niż rob. 2
B B
B B
B B B
B B B B
31 24
32 21
33 21 22
34 21 22 23
0 0
W W3 2 ?????
34
Łączenie modeliŁączenie modeli
Można łączyć modele wyrażając relację pomiędzy zmiennymi z różnych modeli
np. B13 = 1 oznacza W1 = 3, co oznacza T3 = 1 potencjalnie lepsza propagacja dla łączonych
modeli założymy istnienie więzu bazowego
iff(V1,D1,V2,D2), który oznacza V1=D1 iff V2=D2
35
Modele łączoneModele łączonealldifferent T T T T
element T TP
element T TP
element T TP
element T TP
P TP TP TP TP
([ , , , ])
( ,[ , , , ], )
( ,[ , , , ], )
( ,[ , , , ], )
( ,[ , , , ], )
1 2 3 4
1 7 8 4 3 1
2 1 2 31 2
3 3 5 7 6 3
4 4 1 2 3 4
1 2 3 4
alldifferent W W W W
element W WP
element W WP
element W WP
element W WP
P WP WP WP WP
P
([ , , , ])
( ,[ , , , ], )
( ,[8, , , ], )
( ,[ , , , ], )
( ,[ , , , ], )
1 2 3 4
1 7 1 3 4 1
2 2 5 1 2
3 4 3 7 2 3
4 3 1 6 3 4
1 2 3 4
19
iff W T iff W T iff W T iff W T
iff W T iff W T iff W T iff W T
iff W T iff W T iff W T iff W T
( , , , ) ( , , , ) ( , , , ) ( , , , )
( , , , ) ( , , , ) ( , , , ) ( , , , )
( , , , ) ( , , , ) ( , , , ) ( , ,
11 11 1 2 2 1 1 3 31 1 4 4 1
2 1 1 2 2 2 2 2 2 3 3 2 2 4 4 2
31 1 3 3 2 2 3 3 3 3 3 3 4 4
, )
( , , , ) ( , , , ) ( , , , ) ( , , , )
3
4 1 1 4 4 2 2 4 4 3 3 4 4 4 4 4
iff W T iff W T iff W T iff W T
39 prim. constraints. 5 choices to find all solutions
36
Przykład: przydzielaniePrzykład: przydzielanie Dany zbiór zadań
zależności czasowe (koniec jednego przed pocz. Innego)
i dzielone zasoby (zadania na tej samej maszynie) zaplanuj zadania, aby
więzy były spełnione czas pracy był minimalny
Na początku pytamy, czy się da w zadanym czasie
37
Przykładowe danePrzykładowe daneTasks and P recedences
job : j6d u ra tion : 4
m ach in e : m 2
E n d
job : j3d u ra tion : 8
m ach in e : m 1
S tag e B
job : j5d u ra tion : 3
m ach in e : m 2
S tag e A
job : j1d u ra tion : 3
m ach in e : m 1
job : j4d u ra tion : 6
m ach in e : m 2
job : j2d u ra tion : 8
m ach in e : m 1
S ta rt
Dane to lista zadań:
task(name,duration,[names],machine)
[task(j1,3,[],m1), task(j2,8,[],m1),
task(j3,8,[j4,j5],m1),
task(j4,6,[],m2),
task(j5,3,[j1],m2),
task(j6,4,[j1],m2)]
38
ProgramProgram
Plan programu Definicja zmiennych: makejobs
Variables: początek każdego zadania association list: job(name,duration,StartVar)
Zależności czasowe: precedences Więzy maszynowe: machines Wyliczanie: labeltasks
bierze zmienne z job list oraz label
39
ProgramProgram
schedule(Data,End,Jobs) :-makejobs(Data, Jobs, End),precedences(Data, Jobs),machines(Data, Jobs),labeltasks(Jobs).
makejobs([],[],_).makejobs([task(N,D,_,_)|Ts],
[job(N,D,TS)|Js], End) :-TS :: [0..1000], TS + D <= End,makejobs(Ts,Js,End).
getjob(JL,N,D,TS) :- member(job(N,D,TS),JL).
40
Zależności czasoweZależności czasowe
precedences([],_).precedences([task(N,_,P,_)|Ts],JL) :-
getjob(JL,N,_,TS),prectask(P,TS,JL),prececedences(Ts,JL).
prectask([],_,_).prectask([N|Ns],TS0,JL),
getjob(JL,N,D,TS1),TS1 + D <= TS0,prectask(Ns,TS0,JL).
41
MaszynyMaszyny
machines([],_).machines([task(N,_,_,M)|Ts],JL) :-
getjob(JL,N,D,TS),machtask(Ts,M,D,TS,JL),machines(Ts,JL).
machtask([],_,_,_,_).machtask([task(N,_,_,M1)|Ts],M0,D0,TS0,JL):-
(M1 = M0 -> getjob(JL,N,D1,TS1), exclude(D0,TS0,D1,TS1)
; true),machtask(Ts,M0,D0,TS0,JL).
exclude(_,TS0,D1,TS1) :- D1 + TS1 <= TS0.exclude(D0,TS0,_,TS1) :- D0 + TS0 <= TS1.
42
Wykonywanie programuWykonywanie programu
End=20, schedule(problem, End, JL).
makejobs: tworzy listę zadań i więzy
[job(j1,3,TS1),job(j2,8,TS2),job(j3,8,TS3), job(j4,6,TS4),job(j5,3,TS5),job(j6,4,TS6)]
0 1 1 3 20 0 2 2 8 20
0 3 3 8 20 0 4 4 6 20
0 5 5 3 20 0 6 6 4 20
TS TS TS TS
TS TS TS TS
TS TS TS TS
Początkowe dziedziny:D TS D TS D TS
D TS D TS D TS
( ) [ .. ] ( ) [ .. ] ( ) [ .. ]
( ) [ .. ] ( ) [ .. ] ( ) [ .. ]
1 0 17 2 0 12 3 0 12
4 0 14 5 0 17 6 0 16
43
Wykonywanie programuWykonywanie programu
precedences: dodaje więzy, zmienia dziedziny
D TS D TS D TS
D TS D TS D TS
( ) [ .. ] ( ) [ .. ] ( ) [ .. ]
( ) [ .. ] ( ) [ .. ] ( ) [ .. ]
1 0 6 2 0 12 3 6 12
4 0 6 5 3 9 6 3 16
TS TS TS TS TS TS TS TS1 3 5 1 3 6 4 6 3 5 3 3
machines: dodaje punkty wyboru, zmienia dziedziny
D TS D TS D TS
D TS D TS D TS
( ) [ .. ] ( ) [ .. ] ( ) [ .. ]
( ) [ .. ] ( ) [ .. ] ( ) [ .. ]
1 0 0 2 3 4 3 12 12
4 6 6 5 3 3 6 12 16
TS TS TS TS TS TS TS TS2 8 1 1 3 2 3 8 1 1 3 3
44
WyliczanieWyliczanie
Pierwsza z brzegu wartość dla każdej zmiennej.
D TS D TS D TS
D TS D TS D TS
( ) [ .. ] ( ) [ .. ] ( ) [ .. ]
( ) [ .. ] ( ) [ .. ] ( ) [ .. ]
1 0 0 2 3 3 3 12 12
4 6 6 5 3 3 6 12 12
Znalezione rozwiązanie!
45
Poprawianie programuPoprawianie programu
Informacja nadmiarowa Przypuśćmy, że t1, ..., tn to zadania do wykonania na
tej samej maszynie, które muszą być skończone przed t0
t0 must start after the sum of the durations added to the earliest start time
Oblicz poprzedników każdego zadania i dodaj extra więzy
Zmniejszona przestrzeń poszukiwań
TS TS TSn D Dn0 1 1 minimum({ , , })
46
Poprawianie programuPoprawianie programu
wiez cumulative może śłużyć do wyrażenia ograniczeń ,,maszynowych’’ cumulative([TS1,TS2,TS3],[3,8,8],[1,1,1],1) cumulative([TS4,TS5,TS6],[6,3,4],[1,1,1],1)
Nowa wersja machines Nie ma punktów wyboru. Wynik:
D TS D TS D TS
D TS D TS D TS
( ) [ .. ] ( ) [ .. ] ( ) [ .. ]
( ) [ .. ] ( ) [ .. ] ( ) [ .. ]
1 0 1 2 3 4 3 11 12
4 0 6 5 3 9 6 6 16
47
Metody wyliczaniaMetody wyliczania
Oryginalne sformułowanie: Picking the minimum value for each value must
be a solution. (default labelling is fine) Dla cumulative
Znajdź zadanie z minimalnym czasem startu albo umieść zadanie w tym momencie albo zabroń umieszczać w tej pozycji
Powtarzaj (jakie zadanie teraz ma najmniejszy czas)
48
Labelling the EarliestLabelling the Earliest
label_earliest([]).label_earliest([TS0|Ts]) :-
mindomain(TS0,M0),find_min(Ts,TS0,M0,TS,M,RTs),(TS = M, Rs=RTs ; TS != M, Rs=[TS0|Ts]),label_earliest(Rs).
find_min([],TS,M,TS,M,[]).find_min([TS1|Ts],TS0,M0,TS,M,RTs) :-
mindomain(TS1,M1),(M1 < M0 ->
M2=M1, TS2=TS1, RTs=[TS0|Rs]; M2=M0, TS2=TS0, RTs=[TS1|Rs]),find_min(Ts,TS2,M2,TS,M,Rs).
49
Labelling the EarliestLabelling the EarliestD TS D TS D TS
D TS D TS D TS
( ) [ .. ] ( ) [ .. ] ( ) [ .. ]
( ) [ .. ] ( ) [ .. ] ( ) [ .. ]
1 0 1 2 3 4 3 11 12
4 0 6 5 3 9 6 6 16
Label TS1 = 0
D TS D TS D TS
D TS D TS D TS
( ) [ .. ] ( ) [ .. ] ( ) [ .. ]
( ) [ .. ] ( ) [ .. ] ( ) [ .. ]
1 0 0 2 3 4 3 11 12
4 0 6 5 3 9 6 6 16
Label TS4 = 0
D TS D TS D TS
D TS D TS D TS
( ) [ .. ] ( ) [ .. ] ( ) [ .. ]
( ) [ .. ] ( ) [ .. ] ( ) [ .. ]
1 0 0 2 3 4 3 11 12
4 0 0 5 6 9 6 9 16
Label TS2 = 3
D TS D TS D TS
D TS D TS D TS
( ) [ .. ] ( ) [ .. ] ( ) [ .. ]
( ) [ .. ] ( ) [ .. ] ( ) [ .. ]
1 0 0 2 3 3 3 11 12
4 0 0 5 6 9 6 9 16
Label TS5 = 6
D TS D TS D TS
D TS D TS D TS
( ) [ .. ] ( ) [ .. ] ( ) [ .. ]
( ) [ .. ] ( ) [ .. ] ( ) [ .. ]
1 0 0 2 3 3 3 11 12
4 0 0 5 6 6 6 9 16
Label TS6 = 9
D TS D TS D TS
D TS D TS D TS
( ) [ .. ] ( ) [ .. ] ( ) [ .. ]
( ) [ .. ] ( ) [ .. ] ( ) [ .. ]
1 0 0 2 3 3 3 11 12
4 0 0 5 6 6 6 9 9
Label TS3 = 11
D TS D TS D TS
D TS D TS D TS
( ) [ .. ] ( ) [ .. ] ( ) [ .. ]
( ) [ .. ] ( ) [ .. ] ( ) [ .. ]
1 0 0 2 3 3 3 11 11
4 0 0 5 6 6 6 9 9
Rozwiązanie (minimalne)
50
Więzy reifikowaneWięzy reifikowane
Więz reifikowany c <=> B zmienną boolowską B z więzem bazowym c
Jeśli c to B = 1 Jeśli c nie zachodzi to B = 0 Propagacja w obu kierunkach Używane do budowania złożonych więzów
51
Więzy reifikowaneWięzy reifikowane
either(X,X1,X2) :-(X = X1 <=> B1),(X = X2 <=> B2),B1 + B2 >= 1.
either(A,C,E) D(A)={1,2}, D(C) ={3.4), D(E)={2,3}
wynik D(A)={2}, D(C) ={3.4), D(E)={2}
EABBCA 1201
52
53
54
Modelling with Finite Modelling with Finite Domains SummaryDomains Summary
Domains must be initialized Labelling to invoke a complete solver
Many strategies are possible Choice of variable Choice of value
Complex constraints can reduce search Problems usually have different modellings
of different efficiencies