Constraint Solving & 15. Dezember 2015
Was bisher geschah Generate-Test Generieren eines Lösungskandidaten Prüfen ob valide Lösung Backtracking für weitere Lösungen
Was jetzt geschieht Test-Generate Aufsetzen der Tests im Voraus Fail Early! Lösungen nur so weit wie nötig generieren Nur notwendige Tests ausführen
Constraint Programming Beschreibung der Eingeschaften einer gültigen Lösung In Form von Anforderungen an die Variablen Lösungsfindung automatisch
Begrifflichkeiten Domäne: Menge aller gültigen Werte, die eine Variable annehmen kann Constraint: Anforderung an eine Variable, Beschränkung Domäne wird durch zusätzliche höchstens kleiner!
Bibliotheken clpfd: Constraint Logic Programming over Finite Domains clpqr: Constraint Logic Programming over Rationals and Reals chr: Constraint Handling Rules - In Prolog eingebettete Programmiersprache
Domänen?Var in +D Variable Var ist in Domäne D Mögliche Domänen: Integer UntereGrenze.. ObereGrenze D1 \/ D2 Vereinigung von Domänen
Domänen 2?Vars in +D Variablen in Liste Vars sind in Domäne D indomain(var), bindet Variable auf Wert aus D + Backtracking
Ungleichheit: A # >= B, A # > B,... Gleichheit: A # = B,... Expressions: max(a,b), min(a,b), abs(a),... all different(vs), all distinct(vs)
Beispiele Beispiele für CLPFD
Frage Ist all different == paarweise Ungleichheit?
Spezielle Planung, Scheduling Automaten...
Nachdem alle Inferenzen ausgeschöpft sind Systematische oder randomisierte Suche nach Lösungen Beschränkt auf endliche Domänen
Labeling Cleveres Ausprobieren Aller noch möglichen Lösungen
Prädikate label/1 labeling/2, mit Optionen
Optionen für Variablenauswahl leftmost - default, Von Links nach Rechts ff - First Fail, kleinste Domäne zuerst ffc - First Fail most Constrained - kleinste Domäne + meiste min - Kleinste untere Grenze einer Expression max - Kleinste obere Grenze einer Expression
Optionen für Reihenfolge up - default down
Optionen für Branching step - default, für jede Variable Fallunterscheidung X # = V und X # = V enum, für jede Variable Auswahl aus X = V1, X=V2,... für alle V aus der Domäne bisect, für jede Variable FallunterscheidungX # =< M und X # > M, wobei M der Mittelpunkt der Domäne ist
Beispiele Beispiele Labeling und Optionen
Fazit Setzen der Optionen schwierig Optionen teilweise stark abhängig von der Problemstellung
Typisches Szenario Posten aller Modellierung unabhängig von der Suche nach einer Lösung! Domänen einschränken soweit möglich zur Suche nach Lösungen
Beispiele Kryptographische Puzzle
Zusätzlich zu Variablen im Constraint Boolsche Variable mit Ergebnis Ermöglicht negative Kann verschiedene Solver miteinander Verknüpfen
Beispiele Beispiele für