Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

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

Podobne prezentacje


Prezentacja na temat: "1 Modelowanie za pomocą więzów w dziedzinach skończonych."— Zapis prezentacji:

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

2 2 Modelling wth Finite Domains u Domains and Labelling u Complex Constraints u Labelling u Different Problem Modellings u Example: Scheduling

3 3 Dziedziny i wyliczanie u 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] u Gdy dziedzina nieokreślona wybieramy pewien zasięg (np [ ]

4 4 Przykł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

5 5 Wyliczanie 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:

6 6 Ogranicz i generuj u Typowa postać programu FD u defininiujemy zmienne i dziedziny u podane są więzy modelujące program u,,uzupełnianie za pomocą wyliczania u 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 7 Send+More=Money. Przykład Problem kryptoarytmetyczny, każda cyfra inna i zachodzi równanie smm(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 *M + 100*O + 10*R + E = 10000*M *O + 100*R + 10*E + Y.

8 8 Send+More=Money. Przykład Po deklaracji dziedzin: Po mamy alldifferent_neq dodaje nierówn. (bez zmian) ostatecznie: (jedna reguła propagacji) Dla bieżącej dziedziny:

9 9 Send+More=Money. Przykład Zatem D(M) = [1..1] Propagacja trwa dalej dając 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

10 10 Generuj 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 wyborów przed znalezieniem rozwiązania, poprzedni jedynie 35 (z tego dwa nie dawały bezpośredniego nawrotu)

11 11 Złożone więzy u Złożone więzy: alldifferent, cumulative i element u Bardziej zwięzłe modele u Lepsza propagacja = większa efektywność u Zamieńmy w przykładzie alldifferent_neq([S,E,N,D,M,O,R,Y]) u alldifferent([S,E,N,D,M,O,R,Y])

12 12 Złożone więzy 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 13 Złożone więzy Każda dziewczynka to pudełko o szerokości 3 wkładana do pudełka o szer 13 Pasuje do więzu cumulative [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 14 Wyliczanie u 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 15 Wyliczanie u Wykorzystuje bierzące wartości dziedziny u Przykład (Send-More-Money) Labelling próbuje S=9. potem E=4 (zawodzi w końcu), potem E=5 co daje Labelling dodadje N=6, D=7, M=1, O=0, R=9 i Y=2, i kończy z sukcesem

16 16 Wyliczanie u Dwa wybory w labelling u którą zmienną wyliczamy na początku u kolejność próbowanych wartości u Domyślny labelling u sprawdza zmienne w kolejności z listy u wartości od min do max u Możemy zaprogramować inne strategie

17 17 Wybór zmiennych u Wybór zmiennych wpływa na wielkość drz. wypr. u Wybieramy zmienną o najmniejszej bieżącej dziedzinie u Przykład Labelling najpierw bierze S, M, O (nic nie trzeba robić), potem E lub N. Lepiej niż Y jako pierwsza

18 18 Wyliczanie 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 19 Wyliczanie 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. u Zastosowanie zasady first-fail u Aby wygrać, próbuj najpierw to, gdzie najłatwiej przegrać

20 20 Wybór wartości zmiennych u Wybór wartości wpływa na porządek eksploracji gałęzi drzewa u Stosując wiedzę specyficzną problemowi można szybciej dojść do rozw. u Ważne dla optymalizacji u dobre rozwiązanie szybko redukuje potem przestrzeń przeszukiwań

21 21 N-hetmanów Q1Q2Q3Q Problem umieszczenia N hetmanów na szachownicy NxN Dla dużych N w rozwiązaniach wartości bardziej,,środkowe

22 22 Porzą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 23 Porzą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 24 Efektywność wyliczania u Możemy jednocześnie użyć porządkowania zmiennych i wartości Rożna liczba wyborów w różnych zasięgach

25 25 Dzielenie dziedzin u Labelling to nie musi być przypisywanie zmiennym wartości u Należy zmniejszać dziedziny zmiennych u Domain splitting rozdwaja dziedzinę bieżącej zmiennej

26 26 Dzielenie 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 27 Dzielenie 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 od M

28 28 Jeden problem - różne modele u Różne spojrzenia na problem dają różne modele u Inny modell = inne zbiory zmiennych u W zależności od właściwości solwera modele mogą dawać szybciej wynik u Być może trzeba sprawdzić empirycznie

29 29 Roż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 Macierz zysków:

30 30 Model z badań operacyjnych 16 zmiennych logicznych Bij, każda mówi, że robotnik i jest przypisany do produktu j 11 więzów baz. 28 wyborów, by znaleźć 4 rozwiązania B23

31 31 Lepszy model Używamy więzów złożonych. Zmienne W1,W2,W3,W4 odpowiadają robotnikom 7 więzów bazowych 14 wyborów W1 W2 W3 W

32 32 Inny model Zmienne T1,T2,T3,T4 odpowiadające produktom. 7 więzów bazowych 7 wyborów T1 T2 T3 T4

33 33 Porównywanie modeli u Różnice w efektywności pochodzą z u bardziej bezpośredniego użycia więzów bazowych u mniejszej ilości zmiennych u zwykle wymaga sprawdzenia u Inne kryteria: łatwość wprowadzania dod. ogr. u np.. Robotnik 3 pracuje nad produktem > niż rob. 2

34 34 Łączenie modeli u Można łączyć modele wyrażając relację pomiędzy zmiennymi z różnych modeli u np. B13 = 1 oznacza W1 = 3, co oznacza T3 = 1 u potencjalnie lepsza propagacja dla łączonych modeli u założymy istnienie więzu bazowego iff(V1,D1,V2,D2), który oznacza V1=D1 iff V2=D2

35 35 Modele łączone 39 prim. constraints. 5 choices to find all solutions

36 36 Przykład: przydzielanie u Dany zbiór zadań u zależności czasowe (koniec jednego przed pocz. Innego) u i dzielone zasoby (zadania na tej samej maszynie) u zaplanuj zadania, aby u więzy były spełnione u czas pracy był minimalny u Na początku pytamy, czy się da w zadanym czasie

37 37 Przykładowe dane 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 38 Program u Plan programu Definicja zmiennych: makejobs u Variables: początek każdego zadania u association list: job(name,duration,StartVar) Zależności czasowe: precedences Więzy maszynowe: machines Wyliczanie: labeltasks u bierze zmienne z job list oraz label

39 39 Program 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 :: [ ], TS + D <= End, makejobs(Ts,Js,End). getjob(JL,N,D,TS) :- member(job(N,D,TS),JL).

40 40 Zależ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 41 Maszyny 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 42 Wykonywanie 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)] Początkowe dziedziny:

43 43 Wykonywanie programu precedences : dodaje więzy, zmienia dziedziny machines : dodaje punkty wyboru, zmienia dziedziny

44 44 Wyliczanie Pierwsza z brzegu wartość dla każdej zmiennej. Znalezione rozwiązanie!

45 45 Poprawianie programu u Informacja nadmiarowa u Przypuśćmy, że t1,..., tn to zadania do wykonania na tej samej maszynie, które muszą być skończone przed t0 u t0 must start after the sum of the durations added to the earliest start time u Oblicz poprzedników każdego zadania i dodaj extra więzy u Zmniejszona przestrzeń poszukiwań

46 46 Poprawianie programu u wiez cumulative może śłużyć do wyrażenia ograniczeń,,maszynowych u cumulative([TS1,TS2,TS3],[3,8,8],[1,1,1],1) u cumulative([TS4,TS5,TS6],[6,3,4],[1,1,1],1) Nowa wersja machines u Nie ma punktów wyboru. Wynik:

47 47 Metody wyliczania u Oryginalne sformułowanie: u Picking the minimum value for each value must be a solution. (default labelling is fine) u Dla cumulative u Znajdź zadanie z minimalnym czasem startu u albo umieść zadanie w tym momencie u albo zabroń umieszczać w tej pozycji u Powtarzaj (jakie zadanie teraz ma najmniejszy czas)

48 48 Labelling 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 M2=M1, TS2=TS1, RTs=[TS0|Rs] ; M2=M0, TS2=TS0, RTs=[TS1|Rs]), find_min(Ts,TS2,M2,TS,M,Rs).

49 49 Labelling the Earliest Label TS1 = 0Label TS4 = 0Label TS2 = 3 Label TS5 = 6Label TS6 = 9Label TS3 = 11 Rozwiązanie (minimalne)

50 50 Więzy reifikowane u Więz reifikowany c B zmienną boolowską B z więzem bazowym c u Jeśli c to B = 1 u Jeśli c nie zachodzi to B = 0 u Propagacja w obu kierunkach u Używane do budowania złożonych więzów

51 51 Wię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}

52 52

53 53

54 54 Modelling with Finite Domains Summary u Domains must be initialized u Labelling to invoke a complete solver u Many strategies are possible u Choice of variable u Choice of value u Complex constraints can reduce search u Problems usually have different modellings of different efficiencies


Pobierz ppt "1 Modelowanie za pomocą więzów w dziedzinach skończonych."

Podobne prezentacje


Reklamy Google