Constraint-Algorithmen in Kürze - Mit der Lösung zur Path-Consistency-Aufgabe 9 Prof. Dr. W. Conen Version 1.0c Januar 2009
Genereller Ablauf der Suche Gegeben: Variablen X, Domains D, Constraints R (explizit oder implizit gegeben) SOLVE(Assignment A, Freie Variablen X, Constraints C, Domains D) Variable x auswählen; x aus X entfernen; Werte sichern solange noch keine konsistente Lösung gefunden (auf frischen Kopien A,... der gesicherten Werte arbeiten nur bereits erfolglos probierte Werte werden zusätzlich aus dem Domain von x entfernt) Wert v für die Variable auswählen und Constraints propagieren, falls dies möglich ist Wenn nicht, unlösbar zurückgeben, sonst v aus D x entfernen; <x,v> zu A hinzufügen SOLVE(A,X,C,D ); Werte für A,X,C,D aus der letzten Runde übernehmen Lösbar zurückgeben (Lösung ist in A) Version 1.0b 2
Genereller Ablauf der Suche Gegeben: Variablen X, Domains D, Constraints R SOLVE(Assignment A, Freie Variablen X, Constraints C, Domains D) if (X == {}) return true; x SELECT_VARIABLE(A,X,C,D); X X {x}; consistent false; D s D; while NOT consistent do A A; D D s ; C C; X X; // Neue Arbeitskopien v SELECT_VALUE(x,A,X,C,D ); // inkl. Propagierung if (v == inconsistent ) return false; else D s x Ds x {v} A A <x,v>; consistent Solve(A,X,C,D ); A A ; X = X ; C C ; D = D ; return true; Vor dem ersten Aufruf von Solve kann es Sinn machen, eine einfache Form des Konsistenzchecks, z.b. Arc-Consistency (s. weiter hinten), als Vorverarbeitungsschritt zum Verkleineren der initialen Domains einzusetzen. Version 1.0b 3
Genereller Ablauf der Suche SELECT_VARIABLE(Freie Variablen X, Constraints C, Domains D) first true; foreach x X do if (first OR ( D x < min)) then minvar x; min D x ; first false; return minvar; Hier kann man natürlich auch kompliziertere Betrachtungen anstellen zur Variablenauswahl Wir wählen hier die Variable, die die wenigsten Restwerte im Domain hat (also am stärksten constrained ist) Es macht übrigens keinen Sinn, nach einem Scheitern von Solve auf der darüberliegenden Ebene eine andere Variablenreihenfolge zu probieren Anmerkung: X,C,D sind jeweils Mengen (ebenso A auf der vorigen Folie) Version 1.0b 4
Genereller Ablauf der Suche SELECT_VALUE(x,A,X,C,D); // Annahme: in den Domains sind nur Werte, die, einzeln betrachtet, konsistent zur Teillösung A sind (wegen der letzten Propagierung) consistent false; value inconsistent foreach v D x do A A <x,v>; D x D x {v}; D D; C C if PROPAGATE(<x,v>,A,X,D,C ) then if NOT consistent OR BETTER(X,D,C,D c,c c ) then A c A, D c D ; C c C ; value v; consistent true; if consistent A A c ; D D c ; C C c ; return value; // inconsistent im Inkonsistenzfall Hier könnte man auch auf das BETTER verzichten und nur solange auf der zufälligen Reihenfolge der Werte arbeiten, bis man etwas konsistentes gefunden hat Version 1.0b 5
Genereller Ablauf der Suche BETTER (X,D,C,D c,c c ); count_d 0; // Kummulierte Größe der verbleibenden Domainen count_d c 0; foreach x X do count_d count_d + D x ; count_d c count_d c + D c x ; if (count_d > count_d c ) then return true else false; Das ist eine mögliche Bewertung: wieviele Werte verbleiben in den Domains der noch freien Variablen? Vieles anderes (auch mit Gewichtungen der Wichtigkeit von Werten/Variablen) ist denkbar... Wir können dieses hier verwenden, oder auch die Paare zählen, die in den Constraints verbleiben (sinnvoller bei Pathconsistency) Version 1.0b 6
Genereller Ablauf der Suche PROPAGATE(<x,v>,A,X,C,D); // Variante 1: Forward Checking foreach y X do // Über jede freie Variable laufen foreach v y D y do if Constraint_Verletzt(A <y,v y >,C,D) then D y D y {v y } If D y == {} then return false; return true; // 2. Variante: Arc Consistency // 3. Variante (paßt nicht unmittelbar): Path Consistency Version 1.0b 7
Arc Consistency Version 1.0b 8
Arc Consistency Version 1.0b 9
Vergleich FC = Forward Checking+DVO, AC=Arc consistency nach der Wertwahl. Uns fehlen noch viele weiterführende Details, aber FC+AC ist schon nicht so schlecht für die aufgeführten Benchmarkprobleme! Version 1.0b 10
Sonst noch: Path Consistency verändert Constraints! Version 1.0b 11
Path consistency (Aufgabe 9) Lösung: 1 2 3 4 5 6 7 8 ------------------------------------------- 1 2 2 3 3 1 1 1 1 2 2 4 4 1 1 1 1 3 3 4 4 1 1 1 1 3 3 4 4 1 2 1 1 3 3 4 4 2 1 1 1 3 3 4 4 2 2 1 2 3 3 4 4 1 2 1 2 3 3 4 4 1 2 2 2 3 3 4 4 2 2 1 2 3 3 4 4 2 2 2 Version 1.0b 12
Path consistency (Aufgabe 9) Arc-consistentes Netz 12 13 14 15 16 17 18 23 24 25 26 27 28 ---------------------------------------------------- 1,2 1,2 1,3 1,3 1,1 1,1 1,1 2,2 2,3 2,3 2,1 2,1 2,1 1,3 1,3 1,4 1,4 1,2 1,2 2,1 3,3 2,4 2,4 2,2 2,2 2,2 2,3 2,2 2,3 2,3 2,1 2,2 2,2 3,4 3,3 3,1 3,1 3,1 2,3 2,4 2,4 2,2 3,4 3,2 3,2 3,2 34 35 36 37 38 45 46 47 48 56 57 58 67 68 78 ----------------------------------------------------------- 2,3 2,3 2,1 2,1 2,1 3,3 3,1 3,1 3,1 3,1 3,1 3,1 1,1 1,1 1,1 2,4 2,4 3,1 3,1 2,2 4,4 3,2 3,2 3,2 3,2 3,2 3,2 1,2 1,2 2,1 3,3 3,4 3,2 3,2 3,1 4,1 4,1 4,1 4,1 4,1 4,1 2,1 2,1 2,2 3,4 3,2 4,2 4,2 4,2 4,2 4,2 4,2 2,2 2,2 Version 1.0b 13
Path consistency (Aufgabe 9) Arc-consistentes Netz 13 gegen 2 checken 12 13 14 15 16 17 18 23 24 25 26 27 28 ---------------------------------------------------- 1,2 1,2 1,3 1,3 1,1 1,1 1,1 2,2 2,3 2,3 2,1 2,1 2,1 1,3 1,3 1,4 1,4 1,2 1,2 2,1 3,3 2,4 2,4 2,2 2,2 2,2 2,3 2,2 2,3 2,3 2,1 2,2 2,2 3,4 3,3 3,1 3,1 3,1 2,3 2,4 2,4 2,2 3,4 3,2 3,2 3,2 34 35 36 37 38 45 46 47 48 56 57 58 67 68 78 ----------------------------------------------------------- 2,3 2,3 2,1 2,1 2,1 3,3 3,1 3,1 3,1 3,1 3,1 3,1 1,1 1,1 1,1 2,4 2,4 3,1 3,1 2,2 4,4 3,2 3,2 3,2 3,2 3,2 3,2 1,2 1,2 2,1 3,3 3,4 3,2 3,2 3,1 4,1 4,1 4,1 4,1 4,1 4,1 2,1 2,1 2,2 3,4 3,2 4,2 4,2 4,2 4,2 4,2 4,2 2,2 2,2 Version 1.0b 14
Path consistency (Aufgabe 9) Arc-consistentes Netz 13 gegen 2 checken 12 13 14 15 16 17 18 23 24 25 26 27 28 ---------------------------------------------------- 1,2 1,2 1,3 1,3 1,1 1,1 1,1 2,2 2,3 2,3 2,1 2,1 2,1 1,3 1,3 1,4 1,4 1,2 1,2 2,1 3,3 2,4 2,4 2,2 2,2 2,2 2,3 2,2 2,3 2,3 2,1 2,2 2,2 3,4 3,3 3,1 3,1 3,1 2,3 2,4 2,4 2,2 3,4 3,2 3,2 3,2 34 35 36 37 38 45 46 47 48 56 57 58 67 68 78 ----------------------------------------------------------- 2,3 2,3 2,1 2,1 2,1 3,3 3,1 3,1 3,1 3,1 3,1 3,1 1,1 1,1 1,1 2,4 2,4 3,1 3,1 2,2 4,4 3,2 3,2 3,2 3,2 3,2 3,2 1,2 1,2 2,1 3,3 3,4 3,2 3,2 3,1 4,1 4,1 4,1 4,1 4,1 4,1 2,1 2,1 2,2 3,4 3,2 4,2 4,2 4,2 4,2 4,2 4,2 2,2 2,2 Version 1.0b 15
Path consistency (Aufgabe 9) Arc-consistentes Netz 13 gegen 2 checken 12 13 14 15 16 17 18 23 24 25 26 27 28 ---------------------------------------------------- 1,2 1,2 1,3 1,3 1,1 1,1 1,1 2,2 2,3 2,3 2,1 2,1 2,1 1,3 1,3 1,4 1,4 1,2 1,2 2,1 3,3 2,4 2,4 2,2 2,2 2,2 2,3 2,2 2,3 2,3 2,1 2,2 2,2 3,4 3,3 3,1 3,1 3,1 2,3 2,4 2,4 2,2 3,4 3,2 3,2 3,2 34 35 36 37 38 45 46 47 48 56 57 58 67 68 78 ----------------------------------------------------------- 2,3 2,3 2,1 2,1 2,1 3,3 3,1 3,1 3,1 3,1 3,1 3,1 1,1 1,1 1,1 2,4 2,4 3,1 3,1 2,2 4,4 3,2 3,2 3,2 3,2 3,2 3,2 1,2 1,2 2,1 3,3 3,4 3,2 3,2 3,1 4,1 4,1 4,1 4,1 4,1 4,1 2,1 2,1 2,2 3,4 3,2 4,2 4,2 4,2 4,2 4,2 4,2 2,2 2,2 Version 1.0b 16
Path consistency (Aufgabe 9) Arc-consistentes Netz 13 gegen 2 checken 12 13 14 15 16 17 18 23 24 25 26 27 28 ---------------------------------------------------- 1,2 1,2 1,3 1,3 1,1 1,1 1,1 2,2 2,3 2,3 2,1 2,1 2,1 1,3 1,3 1,4 1,4 1,2 1,2 2,1 3,3 2,4 2,4 2,2 2,2 2,2 2,3 2,3 2,3 2,1 2,2 2,2 3,4 3,3 3,1 3,1 3,1 2,3 2,4 2,4 2,2 3,4 3,2 3,2 3,2 34 35 36 37 38 45 46 47 48 56 57 58 67 68 78 ----------------------------------------------------------- 2,3 2,3 2,1 2,1 2,1 3,3 3,1 3,1 3,1 3,1 3,1 3,1 1,1 1,1 1,1 2,4 2,4 3,1 3,1 2,2 4,4 3,2 3,2 3,2 3,2 3,2 3,2 1,2 1,2 2,1 3,3 3,4 3,2 3,2 3,1 4,1 4,1 4,1 4,1 4,1 4,1 2,1 2,1 2,2 3,4 3,2 4,2 4,2 4,2 4,2 4,2 4,2 2,2 2,2 Version 1.0b 17
Path consistency (Aufgabe 9) Nach der ersten Runde von PC-1: 12 13 14 15 16 17 18 23 24 25 26 27 28 ---------------------------------------------------- 1,2 1,2 1,3 1,3 1,1 1,1 1,1 2,2 2,3 2,3 2,1 2,1 2,1 1,3 1,3 1,4 1,4 1,2 1,2 2,1 3,3 2,4 2,4 2,2 2,2 2,3 2,3 2,1 2,2 2,2 3,4 3,1 3,1 3,1 2,3 2,4 2,4 2,2 3,4 3,2 3,2 3,2 34 35 36 37 38 45 46 47 48 56 57 58 67 68 78 ----------------------------------------------------------- 2,3 2,3 2,1 2,1 2,1 3,3 3,1 3,1 3,1 3,1 3,1 3,1 1,1 1,1 1,1 2,4 2,4 3,1 3,1 4,4 3,2 3,2 3,2 3,2 1,2 1,2 2,1 3,4 3,2 3,2 3,1 4,1 4,1 4,1 4,1 4,1 4,1 2,1 2,1 2,2 3,4 3,2 4,2 4,2 4,2 4,2 4,2 4,2 2,2 2,2 13 gg. 2; 14 gg. 2; 25 gg, 4; 28 gg. 1; 34 gg. 2; 38 gg. 7; 56 gg. 3; 57 gg. 3 Version 1.0b 18
Path consistency (Aufgabe 9) Nochmals nach der ersten Runde Entfernte Tupel rot 12 13 14 15 16 17 18 23 24 25 26 27 28 ---------------------------------------------------- 1,2 1,2 1,3 1,3 1,1 1,1 1,1 2,2 2,3 2,3 2,1 2,1 2,1 1,3 1,3 1,4 1,4 1,2 1,2 2,1 3,3 2,4 2,4 2,2 2,2 2,2 2,3 2,2 2,3 2,3 2,1 2,2 2,2 3,4 3,3 3,1 3,1 3,1 2,3 2,4 2,4 2,2 3,4 3,2 3,2 3,2 34 35 36 37 38 45 46 47 48 56 57 58 67 68 78 ----------------------------------------------------------- 2,3 2,3 2,1 2,1 2,1 3,3 3,1 3,1 3,1 3,1 3,1 3,1 1,1 1,1 1,1 2,4 2,4 3,1 3,1 2,2 4,4 3,2 3,2 3,2 3,2 3,2 3,2 1,2 1,2 2,1 3,3 3,4 3,2 3,2 3,1 4,1 4,1 4,1 4,1 4,1 4,1 2,1 2,1 2,2 3,4 3,2 4,2 4,2 4,2 4,2 4,2 4,2 2,2 2,2 Hier wurde zunächst für alle Tupel bestimmt, ob sie entfernt werden müssen und dann alle auf einmal entfernt. Version 1.0b 19
Path consistency (Aufgabe 9) Am Ende: 12 13 14 15 16 17 18 23 24 25 26 27 28 ---------------------------------------------------- 1,2 1,2 1,3 1,3 1,1 1,1 1,1 2,2 2,3 2,3 2,1 2,1 2,1 1,3 1,3 1,4 1,4 1,2 1,2 2,1 3,3 2,4 2,4 2,3 2,1 2,2 2,2 3,4 3,1 3,1 3,1 2,3 2,4 2,4 2,2 3,4 3,2 3,2 3,2 34 35 36 37 38 45 46 47 48 56 57 58 67 68 78 ----------------------------------------------------------- 2,3 2,3 2,1 2,1 2,1 3,3 3,1 3,1 3,1 3,1 3,1 3,1 1,1 1,1 1,1 2,4 2,4 3,1 3,1 4,4 1,2 1,2 2,1 3,4 3,2 3,2 3,1 4,1 4,1 4,1 4,1 4,1 4,1 2,1 2,1 2,2 3,4 3,2 4,2 4,2 4,2 4,2 4,2 4,2 2,2 2,2 Version 1.0b 20
Path consistency (Aufgabe 9) Am Ende, entfernte Tupel rot 12 13 14 15 16 17 18 23 24 25 26 27 28 ---------------------------------------------------- 1,2 1,2 1,3 1,3 1,1 1,1 1,1 2,2 2,3 2,3 2,1 2,1 2,1 1,3 1,3 1,4 1,4 1,2 1,2 2,1 3,3 2,4 2,4 2,2 2,2 2,3 2,3 2,1 2,2 2,2 3,4 3,1 3,1 3,1 2,3 2,4 2,4 2,2 3,4 3,2 3,2 3,2 34 35 36 37 38 45 46 47 48 56 57 58 67 68 78 ----------------------------------------------------------- 2,3 2,3 2,1 2,1 2,1 3,3 3,1 3,1 3,1 3,1 3,1 3,1 1,1 1,1 1,1 2,4 2,4 3,1 3,1 4,4 3,2 3,2 3,2 3,2 1,2 1,2 2,1 3,4 3,2 3,2 3,1 4,1 4,1 4,1 4,1 4,1 4,1 2,1 2,1 2,2 3,4 3,2 4,2 4,2 4,2 4,2 4,2 4,2 2,2 2,2 Version 1.0b 21
Path consistency (Aufgabe 9) Ablauf des Python-Programms Runde 1 Checking C_1_3 with x_2: REMOVED (2, 2) Checking C_1_4 with x_2: REMOVED (2, 3) Checking C_1_5 with x_3: REMOVED (2, 3) Checking C_2_5 with x_3: REMOVED (3, 3) Checking C_2_6 with x_3: REMOVED (2, 2) Checking C_2_7 with x_3: REMOVED (2, 2) Checking C_2_8 with x_1: REMOVED (2, 2) Checking C_3_4 with x_2: REMOVED (3, 3) Checking C_3_8 with x_1: REMOVED (2, 2) Checking C_4_6 with x_2: REMOVED (3, 2) Checking C_4_7 with x_2: REMOVED (3, 2) Checking C_4_8 with x_1: REMOVED (3, 2) Checking C_5_6 with x_2: REMOVED (3, 2) Checking C_5_7 with x_2: REMOVED (3, 2) Checking C_5_8 with x_1: REMOVED (3, 2) Runde 2 Nothing changed Hier wurde SOFORT entfernt und nur noch eine Runde benötigt auch von der Prüfreihenfolge abhängig! Version 1.0b 22