54
1 Modelowanie za pomocą Modelowanie za pomocą więzów w dziedzinach więzów w dziedzinach skończonych skończonych

Modelowanie za pomocą więzów w dziedzinach skończonych

  • Upload
    armani

  • View
    36

  • Download
    0

Embed Size (px)

DESCRIPTION

Modelowanie za pomocą więzów w dziedzinach skończonych. Modelling wth Finite Domains. Domains and Labelling Complex Constraints Labelling Different Problem Modellings Example: Scheduling. Dziedziny i wyliczanie. Musimy definiować dziedziny zmiennych - PowerPoint PPT Presentation

Citation preview

Page 1: 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

Page 2: Modelowanie za pomocą więzów w dziedzinach skończonych

2

Modelling wth Finite DomainsModelling wth Finite Domains

Domains and Labelling Complex Constraints Labelling Different Problem Modellings Example: Scheduling

Page 3: Modelowanie za pomocą więzów w dziedzinach skończonych

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]

Page 4: Modelowanie za pomocą więzów w dziedzinach skończonych

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

Page 5: Modelowanie za pomocą więzów w dziedzinach skończonych

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

Page 6: Modelowanie za pomocą więzów w dziedzinach skończonych

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).

Page 7: Modelowanie za pomocą więzów w dziedzinach skończonych

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.

Page 8: Modelowanie za pomocą więzów w dziedzinach skończonych

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.

Page 9: Modelowanie za pomocą więzów w dziedzinach skończonych

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

Page 10: Modelowanie za pomocą więzów w dziedzinach skończonych

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)

Page 11: Modelowanie za pomocą więzów w dziedzinach skończonych

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])

Page 12: Modelowanie za pomocą więzów w dziedzinach skończonych

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)]

Page 13: Modelowanie za pomocą więzów w dziedzinach skończonych

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)]

Page 14: Modelowanie za pomocą więzów w dziedzinach skończonych

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).

Page 15: Modelowanie za pomocą więzów w dziedzinach skończonych

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

Page 16: Modelowanie za pomocą więzów w dziedzinach skończonych

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

Page 17: Modelowanie za pomocą więzów w dziedzinach skończonych

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

Page 18: Modelowanie za pomocą więzów w dziedzinach skończonych

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).

Page 19: Modelowanie za pomocą więzów w dziedzinach skończonych

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ć”

Page 20: Modelowanie za pomocą więzów w dziedzinach skończonych

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ń

Page 21: Modelowanie za pomocą więzów w dziedzinach skończonych

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’’

Page 22: Modelowanie za pomocą więzów w dziedzinach skończonych

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).

Page 23: Modelowanie za pomocą więzów w dziedzinach skończonych

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

Page 24: Modelowanie za pomocą więzów w dziedzinach skończonych

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

Page 25: Modelowanie za pomocą więzów w dziedzinach skończonych

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

Page 26: Modelowanie za pomocą więzów w dziedzinach skończonych

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.

Page 27: Modelowanie za pomocą więzów w dziedzinach skończonych

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

Page 28: Modelowanie za pomocą więzów w dziedzinach skończonych

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

Page 29: Modelowanie za pomocą więzów w dziedzinach skończonych

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:

Page 30: Modelowanie za pomocą więzów w dziedzinach skończonych

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

Page 31: Modelowanie za pomocą więzów w dziedzinach skończonych

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

Page 32: Modelowanie za pomocą więzów w dziedzinach skończonych

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

Page 33: Modelowanie za pomocą więzów w dziedzinach skończonych

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 ?????

Page 34: Modelowanie za pomocą więzów w dziedzinach skończonych

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

Page 35: Modelowanie za pomocą więzów w dziedzinach skończonych

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

Page 36: Modelowanie za pomocą więzów w dziedzinach skończonych

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

Page 37: Modelowanie za pomocą więzów w dziedzinach skończonych

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)]

Page 38: Modelowanie za pomocą więzów w dziedzinach skończonych

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

Page 39: Modelowanie za pomocą więzów w dziedzinach skończonych

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).

Page 40: Modelowanie za pomocą więzów w dziedzinach skończonych

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).

Page 41: Modelowanie za pomocą więzów w dziedzinach skończonych

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.

Page 42: Modelowanie za pomocą więzów w dziedzinach skończonych

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

Page 43: Modelowanie za pomocą więzów w dziedzinach skończonych

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

Page 44: Modelowanie za pomocą więzów w dziedzinach skończonych

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!

Page 45: Modelowanie za pomocą więzów w dziedzinach skończonych

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({ , , })

Page 46: Modelowanie za pomocą więzów w dziedzinach skończonych

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

Page 47: Modelowanie za pomocą więzów w dziedzinach skończonych

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)

Page 48: Modelowanie za pomocą więzów w dziedzinach skończonych

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).

Page 49: Modelowanie za pomocą więzów w dziedzinach skończonych

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)

Page 50: Modelowanie za pomocą więzów w dziedzinach skończonych

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

Page 51: Modelowanie za pomocą więzów w dziedzinach skończonych

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

Page 52: Modelowanie za pomocą więzów w dziedzinach skończonych

52

Page 53: Modelowanie za pomocą więzów w dziedzinach skończonych

53

Page 54: Modelowanie za pomocą więzów w dziedzinach skończonych

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