Constraint-Erfüllungsprobleme
MittelEinheit 3 von 10 in Kurs: Künstliche Intelligenz – Suche, Logik, Wahrscheinlichkeit und Lernen
Was du lernst
- Beschreibe ein Problem durch seine Variablen, Wertebereiche und Constraints, erkenne die Arten von Constraints und überführe Ablaufplanungs- und Zuordnungsaufgaben aus der Praxis in wohldefinierte Constraint-Erfüllungsprobleme.
- Beschreibe die Bestandteile eines Constraint-ErfüllungsproblemsBenenne die Variablen, Wertebereiche und Constraints eines Problems, unterscheide partielle, konsistente und vollständige Belegungen und zeichne den Constraint-Graphen.
- Unterscheide die Arten von ConstraintsOrdne Constraints als unär, binär, höherstellig oder global ein, schreibe höherstellige Constraints als binäre um und unterscheide harte Constraints von Präferenzen.
- Modelliere Ablaufplanungs- und Zuordnungsprobleme als CSPsÜberführe Stundenplanung, Werkstattfertigungsplanung, Zuordnungsaufgaben und Rätsel in CSPs und wähle Variablen und Wertebereiche so, dass die Constraints einfach bleiben.
- Beschreibe die Bestandteile eines Constraint-Erfüllungsproblems
- Suche nach einer Lösung, indem du jeweils eine Variable belegst, gehe an Sackgassen zurück und wähle die Reihenfolge von Variablen und Werten so, dass die Suche mit deutlich weniger Aufwand eine Lösung findet oder beweist, dass es keine gibt.
- Führe eine Backtracking-Suche Schritt für Schritt durchErkläre, warum Backtracking pro Ebene eine Variable belegt, führe den Algorithmus von Hand aus und gib seine Vollständigkeit und seinen Aufwand an.
- Wähle Variablen und Werte mithilfe von Reihenfolgeheuristiken ausWende die MRV-Heuristik, die Gradheuristik und den am wenigsten einschränkenden Wert an, erkläre, warum sie in entgegengesetzte Richtungen weisen, und miss ihre Wirkung auf eine Suche.
- Gehe nach einer Sackgasse gezielt zu früheren Entscheidungen zurückNutze Konfliktmengen, um beim Backjumping Variablen zu überspringen, die einen Fehlschlag nicht verursacht haben, und halte Nogoods fest, damit sich derselbe Fehlschlag nicht wiederholt.
- Führe eine Backtracking-Suche Schritt für Schritt durch
- Entferne vor und während der Suche durch Schlussfolgerungen Werte, die zu keiner Lösung gehören können, und beurteile, was Forward Checking, Kantenkonsistenz und stärkere Konsistenz jeweils garantieren.
- Wende während der Suche Forward Checking anBeschneide die Wertebereiche der Nachbarn einer neu belegten Variablen, erkenne leere Wertebereiche, stelle Werte beim Backtracking wieder her und erkenne, was Forward Checking übersieht.
- Stelle mit AC-3 Kantenkonsistenz herWende Knoten- und Kantenkonsistenz an, führe AC-3 von Hand aus, kenne seinen Aufwand und seine Grenzen und erhalte die Kantenkonsistenz während der Suche aufrecht.
- Nutze stärkere Konsistenzbegriffe und globale ConstraintsErkläre Pfad- und k-Konsistenz, propagiere Alldiff- und Schranken-Constraints und wäge die zusätzliche Beschneidung gegen ihren Aufwand ab.
- Wende während der Suche Forward Checking an
- Beginne mit einer vollständigen Belegung und repariere sie mit der Min-Konflikte-Heuristik, überwinde Plateaus und lokale Minima und beurteile, wann lokale Suche oder Backtracking das bessere Verfahren ist.
- Repariere Belegungen mit der Min-Konflikte-HeuristikFühre die Min-Konflikte-Heuristik bei einer vollständigen Zustandsformulierung von Hand aus, erkläre, warum sie bei großen Problemen gut funktioniert, und repariere damit einen Zeitplan nach einer Änderung.
- Überwinde Plateaus und lokale Minima und wähle zwischen lokaler Suche und BacktrackingNutze Seitwärtsschritte, Tabusuche, Constraint-Gewichtung und Neustarts und entscheide, welches Verfahren zu einem gegebenen Problem passt.
- Repariere Belegungen mit der Min-Konflikte-Heuristik
- Interpretiere den Constraint-Graphen, um ein Problem in unabhängige Teile zu zerlegen, löse baumförmige Probleme in linearer Zeit und führe nahezu baumförmige Probleme auf Bäume zurück.
- Zerlege ein Problem in unabhängige Teilprobleme und löse baumstrukturierte CSPsFinde unabhängige Teilprobleme im Constraint-Graphen und löse ein baumstrukturiertes CSP mit dem Rückwärts- und Vorwärtsdurchlauf des Baumalgorithmus.
- Führe nahezu baumstrukturierte Probleme auf Bäume zurückWende Schnittmengenkonditionierung und Baumzerlegung an, setze ihren Aufwand zur Größe der Schnittmenge und zur Baumweite in Beziehung und brich Wertesymmetrie auf.
- Zerlege ein Problem in unabhängige Teilprobleme und löse baumstrukturierte CSPs
Constraint-Erfüllungsprobleme einfach erklärt
1Formuliere Probleme als Constraint-Erfüllungsprobleme
Die Wahl eines Stundenplans oder die Zuordnung von Prüfenden beginnt mit einem Modell: Was benötigt einen Wert, welche Werte sind möglich und welche Kombinationen sind erlaubt? Ein klares Modell ermöglicht es, dieselben Lösungsverfahren für sehr unterschiedliche Aufgaben einzusetzen. Du erstellst dieses Modell, unterscheidest Anforderungen von Präferenzen und siehst, wie die Wahl der Variablen den Aufwand eines Lösers verändert. Kleine Ablaufplanungs- und Rätselbeispiele machen jeden Teil anschaulich.
1.1 Beschreibe die Bestandteile eines Constraint-Erfüllungsproblems
Ein Constraint-Erfüllungsproblem, kurz CSP, beschreibt eine Reihe von Wahlmöglichkeiten und die Regeln, die sie verbinden. Sein Zustand ist eine faktorisierte Repräsentation: Du kannst einzelne Variablen und ihre Werte betrachten und dann allgemeine Verfahren zur Beschneidung und Suche wiederverwenden.
Variablen, Wertebereiche und Constraints
Eine Variable bezeichnet etwas, das gewählt werden muss. Ihr Wertebereich listet ihre erlaubten Werte auf. Ein Constraint legt fest, welche Kombinationen gemeinsam auftreten dürfen. Für die Workshops A und B sei jeder Wert ein Zeitfenster aus . Die Regel „A findet vor B statt“ hat den Geltungsbereich und die Relation . Die Schreibweise drückt dieselbe Relation kompakt aus.
Der Geltungsbereich benennt die beteiligten Variablen; die Relation gibt die erlaubten Wertetupel an. Wer beides verwechselt, erstellt möglicherweise ein Modell, in dem „Rot“ zur Variablen wird. Bei der Kartenfärbung sind Regionen Variablen und Farben Werte.
Was zählt als Lösung?
Eine Belegung weist Variablen Werte zu. Drei Prüfungen beschreiben ihren Status:
- Sie ist partiell, wenn einige Variablen keinen Wert haben.
- Sie ist vollständig, wenn jede Variable einen Wert hat.
- Sie ist konsistent, wenn sie keinen Constraint zwischen den belegten Variablen verletzt.
Eine Lösung muss vollständig und konsistent sein. Bei alleinigem ist die Belegung konsistent, aber partiell. Ergänzt man , wird sie vollständig und inkonsistent. Mit ergibt sich eine Lösung für dieses Beispiel mit zwei Variablen. Eine konsistente partielle Belegung lässt sich möglicherweise dennoch nicht vervollständigen: Unbelegten Variablen können die passenden Wahlmöglichkeiten ausgehen.
Einen Constraint-Graphen interpretieren
Zeichne für ein binäres CSP pro Variable einen Knoten und für jedes durch einen Constraint verbundene Paar eine Kante. Auf einer vereinfachten Australienkarte sind die Variablen WA, NT, SA, Q, NSW, V und T, jeweils mit dem Wertebereich {Rot, Grün, Blau}. Die benachbarten Paare sind WA–NT, WA–SA, NT–SA, NT–Q, SA–Q, SA–NSW, SA–V, Q–NSW und NSW–V. Jede Kante verlangt verschiedene Farben.
Eine Lösung ist WA Rot, NT Grün, SA Blau, Q Rot, NSW Grün, V Rot und T Rot. Prüfe jede Kante, auch SA–V. T hat keine Kante, daher ist seine Farbe unabhängig vom Festland. Es gibt 6 Färbungen des Festlands und 3 Möglichkeiten für T, also 18 Lösungen. Ein Constraint, der mehrere Variablen betrifft, benötigt eine Darstellung als Hypergraph; ein zusätzlicher Constraint-Knoten kann mit jeder Variablen in seinem Geltungsbereich verbunden werden.
Wertebereiche und Größe des Suchraums
Ein endlicher diskreter Wertebereich ist eine feste Liste, etwa drei Farben. Ein unendlicher diskreter Wertebereich könnte jede nichtnegative ganzzahlige Startzeit enthalten. Ein kontinuierlicher Wertebereich könnte reellwertige Zeiten enthalten. Die beiden letzteren benötigen Darstellungen und Verfahren, die zu diesen Wertebereichen passen; lineare Programmierung behandelt kontinuierliche lineare Constraints.
Für Variablen mit je Werten gibt es vollständige Belegungen. Die Karte hat Kandidaten, bevor Constraints welche entfernen. Endliche CSPs umfassen NP-vollständige Probleme, daher ist kein allgemeines Lösungsverfahren mit polynomialer Laufzeit bekannt. Ihre innere Struktur ermöglicht dennoch Beschneidung: Der Löser kann eine Wahl ausschließen, ohne jede vollständige Belegung aufzulisten, die sie enthält. Ob die Antwort zulässig ist, hängt nur von den endgültigen Werten ab; der Weg, auf dem sie gefunden wurden, ist unerheblich.
Wichtige Erkenntnisse
- Ein CSP legt Variablen, ihre Wertebereiche und Constraints über Wertekombinationen fest.
- Eine Lösung ist sowohl vollständig als auch konsistent.
- Ein binärer Constraint-Graph zeigt, welche Variablen sich unmittelbar gegenseitig beeinflussen.
- Bei gleich großen Wertebereichen beträgt die Anzahl vollständiger Belegungen .
1.2 Unterscheide die Arten von Constraints
Constraints unterscheiden sich darin, wie viele Variablen sie verbinden und ob sie Anforderungen oder Präferenzen angeben. Wenn du diese Struktur erkennst, kannst du ein wirklichkeitsgetreues Modell schreiben und geeignete Propagationsverfahren wählen.
Den Geltungsbereich einordnen
Ein unärer Constraint schränkt eine Variable ein. Kann Workshop E nicht in Zeitfenster 1 stattfinden, wende an, indem du seinen Wertebereich vor der Suche von auf verkleinerst. Ein binärer Constraint setzt zwei Variablen zueinander in Beziehung, etwa oder . Ein binäres CSP enthält nur unäre und binäre Constraints.
Ein Constraint höherer Stelligkeit betrifft mindestens drei Variablen. Müssen die Aufgabendauern X, Y und Z 10 Stunden ausfüllen, schreibe . Liegt jede Dauer in , scheitert das Tupel , während funktioniert. Bei der Prüfung einer höherstelligen Regel müssen die Werte zusammenpassen.
Nützliche globale Constraints beibehalten
Ein globaler Constraint gibt eine benannte Regel für eine Gruppe variabler Größe an. verlangt für jedes Paar verschiedene Werte. Seine Lösungsmenge entspricht der durch paarweise Ungleichungen definierten Menge. Für neun Sudoku-Zellen sind das 36 binäre Constraints.
Die globale Form ermöglicht einem Löser außerdem Schlussfolgerungen über die Gruppe. Drei Variablen, die auf zwei verschiedene Werte beschränkt sind, können nicht alle verschieden sein, obwohl jedes Paar einzeln eine vereinbare Belegung hat. Gleiche Lösungsmengen garantieren keine gleich starke Beschneidung.
Auch eine Kapazitätsregel kann global sein. Hier bedeutet dasselbe wie : Die Gesamtzahl der Personen, die den drei Aufgaben zugeordnet sind, darf zehn nicht überschreiten. Die Argumente stehen für Größen, die addiert werden; daher erlaubt diese Regel zum Beispiel .
Einen endlichen Constraint in binäre Form umwandeln
Führe eine Hilfsvariable U ein, deren Werte die erlaubten Tripel für sind. Ein möglicher Wert ist . Füge drei binäre Constraints hinzu: Die erste Komponente von U ist gleich X, die zweite gleich Y und die dritte gleich Z. Wird dieser Wert für U gewählt, muss folglich , und gelten.
Jedes ursprünglich zulässige Tripel entspricht einem Wert von U, und jede konsistente Belegung mit U ergibt ein gültiges ursprüngliches Tripel. Mit dieser Konstruktion können binäre Verfahren einen endlichen höherstelligen Constraint behandeln. Der Preis ist der möglicherweise große Tupelwertebereich, weshalb Löser oft die ursprüngliche globale oder höherstellige Regel beibehalten.
Anforderungen und Präferenzen
| Art | Bedeutung | Beispiel aus der Ablaufplanung |
|---|---|---|
| Harter Constraint | Jede Lösung muss ihn erfüllen. | Eine Lehrkraft kann nicht zwei Workshops gleichzeitig unterrichten. |
| Weicher Constraint | Eine Verletzung verursacht bei einer ansonsten zulässigen Wahl Kosten. | Eine Lehrkraft bevorzugt eine Veranstaltung am Nachmittag. |
Mit weichen Constraints wird die Aufgabe zu einem Constraint-Optimierungsproblem, kurz COP: Erfülle alle harten Regeln und minimiere die Gesamtkosten der Präferenzen. Für die Optimierung können Branch-and-Bound und lokale Suche eingesetzt werden.
Teste das Modell an einer bekanntermaßen zulässigen und einer bekanntermaßen unzulässigen Belegung. Eine erfundene Ungleichung zwischen unabhängigen Workshops entfernt zulässige Zeitpläne; ein fehlender Constraint für eine gemeinsame Lehrkraft lässt unmögliche zu. Auch bei Präferenzen ist Vorsicht nötig: Wird aus „Nachmittag bevorzugt“ ein „Nachmittag erforderlich“, kann jeder zulässige Zeitplan ausgeschlossen werden.
Wichtige Erkenntnisse
- Unäre Constraints beschneiden einen Wertebereich; binäre Constraints verbinden zwei Variablen.
- Alldiff verlangt paarweise verschiedene Werte, kann aber eine stärkere Beschneidung anhand der Gruppe ermöglichen.
- Hilfsvariablen mit Tupelwerten können endliche höherstellige Constraints in binäre Form umwandeln.
- Harte Constraints bestimmen die Zulässigkeit; weiche Constraints ordnen zulässige Wahlmöglichkeiten nach ihrer Güte.
- Prüfe beim Testen eines Modells sowohl einen zulässigen als auch einen unzulässigen Fall.
1.3 Modelliere Ablaufplanungs- und Zuordnungsprobleme als CSPs
Ein Modell sollte die Entscheidungen so direkt beschreiben, dass sich die Regeln leicht ausdrücken lassen. Bestimme zuerst, was gewählt werden muss, weise dann Wertebereiche zu und übersetze jede Anforderung über die Variablen, die sie tatsächlich betrifft.
Einen Workshop-Zeitplan erstellen
Fünf Workshops von je einem Zeitfenster teilen sich drei Zeitfenster: 1 Vormittag, 2 Mittag und 3 Nachmittag. A stehe für Python-Grundlagen, B für Python für Fortgeschrittene, C für Statistik, D für Datenbanken und E für Ethik. Jeder Workshop ist eine Variable mit dem anfänglichen Wertebereich .
Gemeinsame Teilnehmende erfordern , , , , und . Grundlagen muss vor Fortgeschrittene stattfinden, also . Die Lehrkraft für Ethik kommt mittags an, also . Das ergibt sieben binäre Kanten und eine unäre Regel; C hat vier Nachbarn.
Die Belegung erfüllt jede Regel: Jedes Paar mit gemeinsamen Teilnehmenden ist verschieden belegt, Grundlagen findet vor Fortgeschrittene statt und Ethik liegt nicht in Zeitfenster 1. Sie ist die einzige zulässige Belegung unter den Kandidaten. Die Workshops B und D dürfen beide Zeitfenster 3 nutzen, weil keine Regel verschiedene Werte für sie verlangt.
Würde stattdessen pro Zeitfenster eine Variable gewählt, wäre jeder Wert eine Teilmenge der Workshops, mit bis zu möglichen Teilmengen pro Zeitfenster. Die Regeln müssten dann diese Mengen betrachten und sicherstellen, dass jeder Workshop einmal stattfindet. Werden Workshops als Variablen gewählt, bleiben die Constraints einfacher.
Aufgabenzeiten und gemeinsam genutzte Ressourcen ausdrücken
Verwende bei der Werkstattfertigungsplanung für jede Aufgabe eine Startzeitvariable. Vorbereiten dauert 20 Minuten, Analysieren 40 und Bericht erstellen 30. Die Startzeiten sind nichtnegative ganze Minuten. Die Reihenfolge und die Frist von 120 Minuten ergeben
Die frühesten Startzeiten sind 0, 20 und 60. Rechnet man von der Frist zurück, ergeben sich die spätesten Startzeiten 30, 50 und 90. Die Zeitfenster sind also , und .
Zwei Aufgaben, die sich eine Maschine teilen, benötigen einen disjunktiven Constraint: oder . Jede der beiden Aufgaben darf zuerst kommen, aber sie dürfen sich nicht überschneiden. Eine einfache Vorrangbedingung würde eine bestimmte Reihenfolge erzwingen und die andere Möglichkeit ausschließen.
Zuordnungen und Rätsel modellieren
Für drei Berichte, die drei Prüfenden zugeordnet werden, machst du jeden Bericht zu einer Variablen mit Prüfenden als Werten. Verwende Alldiff, wenn jede prüfende Person einen Bericht bearbeitet. Ein Interessenkonflikt entfernt eine prüfende Person aus dem Wertebereich des betreffenden Berichts.
Beim n-Damen-Problem sei die Zeile der Dame in Spalte . Eine Dame pro Spalte ist im Modell angelegt. Verlange für jedes Paar und , um Angriffe in Zeilen und auf Diagonalen zu verhindern. Für acht Damen verringert dies den Raum der Möglichkeiten von der Wahl von 8 Feldern aus 64, also Platzierungen, auf Belegungen. Es gibt 92 Lösungen.
Bei Sudoku haben die 81 Zellvariablen die Wertebereiche 1–9. Vorgegebene Ziffern ergeben unäre Constraints, und die 9 Zeilen, 9 Spalten und 9 Boxen ergeben jeweils Alldiff.
Wähle die gröbsten Zeiteinheiten, die noch jeden erlaubten Beginn darstellen. Für Veranstaltungen zur vollen Stunde reichen stündliche Wahlmöglichkeiten; Wertebereiche in einzelnen Minuten würden den Aufwand vergrößern, ohne einen nützlichen Zeitplan hinzuzufügen. Trenne abschließend Präferenzen von harten Regeln und prüfe einen kleinen Fall mit bekannter Antwort.
Wichtige Erkenntnisse
- Wähle Variablen, die Constraints einfach halten, und Wertebereiche, die nicht feiner als nötig sind.
- Vorrangbedingungen verlangen durch Ungleichungen das Ende vor dem Beginn; gemeinsam genutzte Ressourcen dürfen sich zeitlich nicht überschneiden.
- Eine Dame pro Spalte kann in der Wahl der Variablen angelegt werden.
- Ein korrektes Modell enthält implizite Ressourcenregeln und erhält zulässige gemeinsame Zeitfenster.
2Löse CSPs mit Backtracking-Suche
Eine Suche kann den größten Teil ihres Aufwands darauf verwenden, dieselben Wahlmöglichkeiten erneut zu besuchen oder Konflikte zu spät zu entdecken. Backtracking baut eine Belegung Variable für Variable auf und kehrt zu früheren Entscheidungen zurück, wenn ein Zweig scheitert. Die Reihenfolge von Variablen und Werten hilft, brauchbare Zweige früher zu finden, während die Konfliktanalyse bestimmt, welche Entscheidungen eine Sackgasse verursacht haben. Das Nachvollziehen der Entscheidungen erleichtert die Beurteilung des Grundverfahrens und seiner Verbesserungen.
2.1 Führe eine Backtracking-Suche Schritt für Schritt durch
Backtracking baut mittels Tiefensuche eine partielle Belegung auf. Es wählt eine Variable, versucht einen Wert und macht weiter, bis es eine Lösung findet oder eine Wahl rückgängig machen muss. Die Suche behält die brauchbaren früheren Entscheidungen bei, wenn eine spätere scheitert.
Nach Werten verzweigen, jeweils für eine Variable
A und dann B zu belegen ergibt dieselbe endgültige Belegung wie B und dann A zu belegen. Dank dieser Kommutativität kann ein CSP-Löser auf jeder Ebene eine Variable wählen und nach ihren Werten verzweigen. Würde jede Variablenreihenfolge zugelassen, ergäbe das Blätter für nur verschiedene vollständige Belegungen. Für fünf Variablen mit drei Werten sind das 29.160 Blätter statt 243.
Die nächste Variable kann von den aktuellen Wertebereichen abhängen. Entscheidend ist, an einem Knoten eine einzige nächste Variable zu wählen; die Suche benötigt keine getrennten Zweige für alle möglichen Belegungsreihenfolgen.
Die rekursiven Schritte nachvollziehen
- Ist die Belegung vollständig und konsistent, gib sie zurück.
- Wähle eine unbelegte Variable.
- Versuche jeden Wert ihres Wertebereichs, der mit der aktuellen Belegung konsistent ist.
- Rufe das Verfahren nach dem Hinzufügen eines Werts rekursiv auf. Scheitert der rekursive Aufruf, entferne diese Belegung und versuche den nächsten Wert.
- Funktioniert kein Wert, gib einen Fehlschlag an den aufrufenden Schritt zurück.
Einfaches Backtracking prüft einen Constraint, sobald alle Variablen in seinem Geltungsbereich Werte haben. Bei und unbelegtem B gibt es für kein vollständiges Paar, das verworfen werden könnte. Der Versuch scheitert dann sofort. Wartete man, bis jede Variable belegt ist, würde diese einfache Zurückweisung aufgeschoben.
Eine Sackgasse nachvollziehen
Verwende die Workshop-Regeln: . Nimm die Variablen in der Reihenfolge A, B, C, D, E und versuche die Werte 1, 2, 3.
- Setze . Verwirf und wähle .
- Verwirf wegen A und wegen B; wähle .
- Verwirf wegen A; wähle .
- E hat keinen zulässigen Wert: 1 ist verboten, 2 steht mit D und 3 mit C in Konflikt.
Der Fehlschlag bei E führt zu D zurück. Dessen nächster Wert, 3, steht mit C in Konflikt. C hat keinen späteren Wert, daher geht die Suche zu B zurück. Der Versuch führt unter schließlich zu einer weiteren Sackgasse. Die Suche versucht dann und erreicht . In dieser Reihenfolge prüft einfaches Backtracking insgesamt 32 mögliche Werte, einschließlich der verworfenen.
Was das Verfahren garantiert
| Eigenschaft | Einfaches Backtracking bei endlichen Wertebereichen |
|---|---|
| Vollständigkeit | Findet eine Lösung, falls eine existiert; das Ausschöpfen der Suche weist die Unlösbarkeit nach. |
| Suchgröße im schlimmsten Fall | Exponentiell, in der üblichen Schranke Belegungen. |
| Speicher für den Suchpfad | Linear in ; ein aktiver Pfad wird gespeichert. |
Auch das Prüfen von Constraints und das Speichern des Modells verursachen Aufwand. Die Angabe zum linearen Speicher betrifft den Suchpfad; Propagation kann zusätzlich Wertebereiche und Änderungsprotokolle speichern.
Chronologisches Backtracking kehrt zur letzten Entscheidung zurück. Schnellere Varianten verbessern vier getrennte Entscheidungen: die nächste Variable, die Reihenfolge ihrer Werte, die nach einer Wahl abgeleiteten Folgen und die frühere Entscheidung, zu der nach einem Fehlschlag zurückgekehrt wird. Diese Verbesserungen verringern den praktischen Aufwand, ohne zu ändern, was als Lösung zählt.
Wichtige Erkenntnisse
- Dank Kommutativität müssen nicht alle Belegungsreihenfolgen durchsucht werden.
- Backtracking belegt eine Variable pro Ebene und verwirft Belegungen, die vollständig belegte Constraints verletzen.
- Bei einem gescheiterten rekursiven Aufruf wird seine Wahl rückgängig gemacht und ein anderer Wert versucht.
- Backtracking bei endlichen Wertebereichen ist vollständig, hat aber im schlimmsten Fall einen exponentiellen Suchaufwand.
- Der lineare Speicherbedarf für den Suchpfad umfasst nicht den gesamten Speicher für Modell und Propagation.
2.2 Wähle Variablen und Werte mithilfe von Reihenfolgeheuristiken aus
Eine gute Reihenfolge kann einen Fehlschlag weit oben im Suchbaum aufdecken oder brauchbare Wahlmöglichkeiten für später erhalten. Die Reihenfolge der Variablen und die der Werte dienen unterschiedlichen Zwecken; daher erscheint jeweils eine andere Richtung am besten.
Die am stärksten eingeschränkte Variable wählen
Die MRV-Heuristik wählt die unbelegte Variable mit den wenigsten aktuell zulässigen Werten. Sie wird auch Heuristik der am stärksten eingeschränkten Variablen oder Fail-First-Heuristik genannt. Ein nahezu erschöpfter Wertebereich deckt wahrscheinlich bald einen Widerspruch auf. Ist ein Wertebereich leer, scheitert der Zweig sofort.
Zähle die aktuellen Werte nach der Beschneidung, nicht die ursprünglichen Größen der Wertebereiche. Ohne gespeicherte Wertebereiche muss ein Löser vor der Anwendung von MRV bestimmen, welche ursprünglichen Werte noch mit der Belegung konsistent sind.
Die Gradheuristik löst einen Gleichstand bei MRV auf, indem sie die Variable mit den meisten Constraints zu anderen unbelegten Variablen wählt. Eine solche Wahl beeinflusst mehr verbleibende Entscheidungen. Bereits belegte Nachbarn zählen nicht zu diesem verbleibenden Grad. Zu Beginn der Australienkarte liegen die gleich großen Wertebereiche mit drei Farben gleichauf; die fünf Nachbarn von SA geben ihm den höchsten Grad.
Bei der Wertwahl Möglichkeiten offenhalten
Der am wenigsten einschränkende Wert (LCV) wird zuerst versucht: Er entfernt die wenigsten Werte aus den Wertebereichen unbelegter Nachbarn. Die Bewertung möglicher Werte verursacht zusätzlichen Rechenaufwand, kann aber einen aufwendigen gescheiterten Zweig vermeiden.
Bei WA Rot und NT Grün kann SA nur Blau sein, während Q Rot oder Blau sein kann. Die Wahl Q Blau würde den Wertebereich von SA leeren. Die Wahl Q Rot entfernt Rot aus dem Wertebereich von NSW und erhält Blau für SA. LCV versucht daher Q Rot.
| Reihenfolgeentscheidung | Bevorzugte Wahl | Grund |
|---|---|---|
| Nächste Variable | Wenigste verbliebene Werte | Einen wahrscheinlichen Fehlschlag früh aufdecken. |
| Variable bei Gleichstand | Meiste unbelegte Nachbarn | Mehr verbleibende Entscheidungen beeinflussen. |
| Nächster Wert | Wenigste entfernte Nachbarwerte | Chancen auf Vervollständigung der Belegung erhalten. |
Jede Variable muss irgendwann einen Wert erhalten, weshalb die frühe Prüfung einer kritischen Variablen nützlich ist. Um eine erste Lösung zu vervollständigen, wird nur ein Wert benötigt. Das spricht für einen Wert, der Spielraum für andere Entscheidungen lässt.
Reihenfolge mit Forward Checking kombinieren
Wende im Workshop-Zeitplan zuerst an. E hat zwei Werte; A, B, C und D haben jeweils drei. MRV wählt E. Versuche , und Forward Checking entfernt 2 aus den Wertebereichen von C und D.
C und D liegen nun mit den Wertebereichen gleichauf. C hat drei unbelegte Nachbarn, A, B und D; D hat zwei, A und C. Die Gradheuristik wählt C. Wähle , wodurch und bleiben. MRV wählt , was erzwingt; die Vorrangbedingung ergibt dann . Fünf Belegungen führen ohne Backtracking zur Lösung. Eine feste Variablenreihenfolge mit Forward Checking benötigt 12 Belegungen und erreicht zwei Sackgassen.
Die Reihenfolge erhält die Vollständigkeit, weil sie die Abfolge der Entscheidungen ändert, ohne zulässige Zweige zu verwerfen. Der Suchaufwand bleibt im schlimmsten Fall exponentiell. Werden alle Lösungen aufgezählt oder wird Unlösbarkeit bewiesen, müssen schließlich alle relevanten Werte untersucht werden. Daher ist der Vorteil von LCV für einen frühen Erfolg geringer. Der Hauptnutzen liegt darin, eine erste Lösung früher zu finden.
Wichtige Erkenntnisse
- MRV nutzt die aktuelle Anzahl zulässiger Werte.
- Die Gradheuristik löst Gleichstände anhand der Constraints zu unbelegten Variablen auf.
- LCV erhält beim Versuch eines Werts Wahlmöglichkeiten für Nachbarn.
- Die Reihenfolge verändert den Suchaufwand und erhält dabei die Vollständigkeit.
2.3 Gehe nach einer Sackgasse gezielt zu früheren Entscheidungen zurück
Eine Sackgasse hat oft eine kleinere Ursache als die gesamte aktuelle Belegung. Backjumping nutzt diese Ursache, um zu entscheiden, wohin zurückgekehrt wird, und Constraint-Lernen merkt sich einen Fehlschlag, damit er nicht erneut entdeckt werden muss.
Die Entscheidungen finden, die den Fehlschlag verursacht haben
Nimm auf der Australienkarte die Belegungsreihenfolge Q, NSW, V, T, SA. Q sei Rot, NSW Grün, V Blau und T Rot. SA grenzt an Q, NSW und V, daher sind alle drei Farben verboten. Seine Konfliktmenge ist : frühere Variablen, deren gewählte Werte seine Werte ausschließen.
Chronologisches Backtracking würde versuchen, T zu ändern. Tasmanien hat keine Kante zu SA, daher kann eine Änderung seiner Farbe keine Möglichkeit für SA wiederherstellen. Backjumping kehrt zu V zurück, dem zuletzt belegten Mitglied der Konfliktmenge, und überspringt T.
Eine Konfliktmenge enthält Variablen; ein Nogood hält bestimmte Belegungen fest. Dieser Unterschied ist wichtig: Eine andere Farbe für V kann den Fehlschlag beheben, obwohl V weiterhin ein Nachbar von SA ist.
Einen Konflikt durch frühere Fehlschläge weitertragen
Einfaches Backjumping nutzt die direkte Konfliktmenge des aktuellen Fehlschlags. Konfliktgesteuertes Backjumping trägt Informationen durch mehrere gescheiterte Ebenen. Springt eine gescheiterte Variable X zu Y zurück, übernimmt Y die Konfliktmenge von X ohne Y. Sind später alle Werte von Y ausgeschöpft, weist seine vereinigte Menge auf eine weiter zurückliegende Ursache in der Belegung hin.
Verwende zum Beispiel die Reihenfolge WA, NSW, T, NT, Q, V, SA und beginne mit WA Rot, NSW Rot, T Rot. WA und NSW sind keine Nachbarn, daher ist diese partielle Belegung konsistent. Ihre gewählten Werte entfernen Rot aus den Wertebereichen von NT, Q und SA. Diese drei Regionen bilden ein Dreieck, das sich nicht nur mit Grün und Blau färben lässt.
Keine Wahl für T verändert dieses Dreieck. Konfliktinformationen können durch die gescheiterten Versuche zurückgetragen werden und WA und NSW als zugrunde liegende Ursache identifizieren. Die Suche kehrt zu NSW zurück, der späteren dieser beiden Entscheidungen, statt Zeit mit dem Umfärben von T zu verbringen.
Die gescheiterte Kombination lernen
Ein Löser kann als Nogood festhalten. Wann immer beide Entscheidungen erneut auftreten, folgt derselbe Widerspruch im Dreieck, sodass der Zweig sofort verworfen werden kann. Es wäre falsch, WA Rot für sich allein zu verbieten: WA kann in gültigen Lösungen mit einer anderen Farbe für NSW Rot sein.
Das Lernen fügt einen Constraint oder eine zwischengespeicherte verbotene Kombination hinzu. Die gelernte Bedingung muss aus den ursprünglichen Constraints folgen; ein Fehlschlag allein aufgrund einer erreichten Zeitgrenze liefert keine solche logische Begründung. Ein nützliches Nogood enthält genügend Belegungen, um die Unmöglichkeit zu erklären, ohne unbeteiligte Entscheidungen einzuschließen.
Vorausschau und Rückblick kombinieren
Forward Checking und Kantenkonsistenz entfernen Werte ohne Unterstützung, bevor ein Fehlschlag tief im Baum auftritt. Backjumping untersucht einen Fehlschlag, nachdem er aufgetreten ist. Einfaches direktes Backjumping beschneidet nicht mehr, als Forward Checking bereits erkennt. Konfliktgesteuerte Verfahren können aber Erklärungen tieferer Fehlschläge kombinieren. Lernen erhält diese Erklärungen für spätere Zweige.
Wichtige Erkenntnisse
- Eine Konfliktmenge bezeichnet frühere Variablen, die für einen Fehlschlag verantwortlich sind.
- Backjumping überspringt Entscheidungen, die mit diesem Fehlschlag nichts zu tun haben.
- Konfliktgesteuertes Backjumping kombiniert Konfliktinformationen über gescheiterte Ebenen hinweg.
- Ein Nogood verbietet eine unmögliche Kombination von Belegungen, nicht jede Belegung einzeln.
- Vorausschauende Beschneidung und gelernte Erklärungen können zusammenwirken.
3Verkleinere Wertebereiche durch Constraint-Propagation
Ein Wert kann bereits unmöglich sein, bevor seine Variable gewählt wird. Constraint-Propagation verfolgt die Folgen aktueller Wertebereiche und Belegungen und entfernt Werte, denen die nötige Unterstützung fehlt. Die Verfahren unterscheiden sich darin, wie weit sie vorausschauen: von den unmittelbaren Nachbarn einer Entscheidung über Paare und Tripel bis hin zu ganzen Variablengruppen. Durchgerechnete Änderungen der Wertebereiche zeigen, was jedes Verfahren erkennt, was es übersieht und wann sich der zusätzliche Aufwand lohnt.
3.1 Wende während der Suche Forward Checking an
Forward Checking prüft, was eine neue Belegung für unbelegte Nachbarn unmittelbar ausschließt. Es entfernt unvereinbare Werte, bevor die Suche diese Variablen erreicht, und macht so manche Sackgassen mehrere Ebenen früher sichtbar.
Nach einer Belegung beschneiden
Untersuche nach der Wahl jede unbelegte Variable Y, die mit X einen Constraint teilt. Entferne jeden Wert aus , der mit der Wahl in Konflikt steht. Ein leerer Wertebereich bedeutet, dass der aktuelle Zweig keine Vervollständigung zulässt. Gehe daher sofort zurück.
Bei entfernt die Belegung die 2 aus dem Wertebereich von Y. Bei entfernt jeden Wert von Y, der höchstens 2 ist. Die jeweilige Relation bestimmt, was entfernt wird; Forward Checking ist nicht darauf beschränkt, gleiche Werte zu entfernen.
Die Beschneidung verändert die Wertebereiche des aktuellen Zweigs. Halte jede durch die Wahl verursachte Entfernung in einem Änderungsprotokoll fest. Wird die Wahl rückgängig gemacht, stelle die entfernten Werte wieder her und behalte dabei Einschränkungen aus früheren Entscheidungen bei. Eine andere Implementierung verwendet auf jeder Ebene Kopien der Wertebereiche.
Die Wertebereiche der Workshops verfolgen
Verwende die Zeitfenster 1–3 und die Regeln . Wende die unäre Regel an, um zu erhalten, und verwende dann die feste Reihenfolge A, B, C, D, E.
- Nach bleibt für B, C und D jeweils .
- Nach bleibt für C .
- Nach bleibt für D und E jeweils .
- entfernt 2 aus dem Wertebereich von E und leert ihn. Gehe zurück.
Nach dem Wiederherstellen der Wertebereiche erzwingt der Versuch für C den Wert 2. Für D und E bleibt jeweils 3, sodass die Belegung von D den Wertebereich von E erneut leert. Die Suche muss A ändern. Mit kann sie erreichen. Dieser Ablauf versucht 12 Werte, gegenüber 32 geprüften Kandidaten beim einfachen Backtracking in derselben Reihenfolge.
Die Grenze der Prüfung in einem Schritt erkennen
Nach Schritt 3 haben D und E beide nur den Wert 2 und müssen verschieden sein. Forward Checking hat diesen Constraint noch nicht geprüft: Weder D noch E wurde neu belegt. Es erkennt den Fehlschlag erst, wenn D seinen Wert erhält.
Das ist die zentrale Grenze von Forward Checking. Es prüft die belegte Variable gegen ihre unbelegten Nachbarn, ohne den verkleinerten Wertebereich eines Nachbarn weiterzupropagieren. Kantenkonsistenz kann diese Folgen zwischen unbelegten Variablen verfolgen.
Die aktuell gehaltenen Wertebereiche nutzen
MRV kann nun direkt den kleinsten verbleibenden Wertebereich wählen. Ein Wertebereich mit nur einem Wert wird oft als Nächstes gewählt; ein leerer Wertebereich zeigt einen Fehlschlag an, ohne eine weitere Belegung hinzuzufügen. Aktuelle Wertebereiche helfen sowohl beim Schlussfolgern als auch bei der Reihenfolge.
Bei höchstens Nachbarn und höchstens Werten pro Nachbar benötigt ein Forward-Checking-Durchlauf etwa binäre Prüfungen, sofern eine Relationsprüfung konstante Zeit benötigt. Er entfernt nur Werte, die mit der aktuellen Belegung unvereinbar sind, sodass Backtracking vollständig bleibt. Wird vergessen, einen entfernten Wert wiederherzustellen, kann ein späterer Zweig eine gültige Lösung verlieren; das Beschneiden einer unbeteiligten Variablen kann dasselbe bewirken.
Wichtige Erkenntnisse
- Forward Checking beschneidet die unbelegten Nachbarn der neu belegten Variablen.
- Ein leerer Wertebereich verwirft den aktuellen Zweig sofort.
- Stelle beim Rückgängigmachen einer Wahl die zu diesem Zweig gehörenden entfernten Werte wieder her.
- Forward Checking propagiert nicht zwischen zwei unbelegten Variablen.
3.2 Stelle mit AC-3 Kantenkonsistenz her
Ein Wert benötigt in jedem benachbarten Wertebereich einen vereinbaren Partner. Kantenkonsistenz macht diese Unterstützungsanforderung ausdrücklich und verfolgt die Auswirkungen von Änderungen der Wertebereiche durch ein binäres CSP.
Unterstützung hat eine Richtung
Knotenkonsistenz entfernt zunächst Werte, die durch unäre Regeln verboten sind. Bei einem binären Constraint ist die gerichtete Kante konsistent, wenn jeder Wert von X mindestens einen vereinbaren Wert in Y hat. Dieser Wert in Y ist eine Unterstützung. Die Revision der Kante entfernt Werte ohne Unterstützung aus ihrem Ausgangsknoten X.
Bei mit den Wertebereichen auf beiden Seiten entfernt die Revision von die 3 aus dem Wertebereich von A. Die Revision von entfernt die 1 aus dem Wertebereich von B. Die resultierenden Wertebereiche sind und . Ein verbliebener Wert kann für jeden Nachbarn eine andere Unterstützung haben; diese Unterstützungen müssen keine gemeinsame Lösung bilden.
AC-3 ausführen
AC-3 verwendet eine Warteschlange gerichteter Kanten:
- Lege anfangs jede Kante in die Warteschlange.
- Entnimm und revidiere X mithilfe des Wertebereichs von Y.
- Wird der Wertebereich von X leer, halte mit einem Fehlschlag an.
- Schrumpft der Wertebereich von X, füge für jeden anderen Nachbarn Z von X außer Y die Kante hinzu.
- Fahre fort, bis die Warteschlange leer ist.
Eine Entfernung in X kann eine Unterstützung für Z beseitigen, daher muss die Kante in der Warteschlange zurück zum geänderten Wertebereich zeigen. Die Kante von Y muss nicht sofort erneut geprüft werden: Die entfernten Werte von X unterstützten keinen Wert in Y, da keiner von ihnen überhaupt mit Y vereinbar war. Sind die Wertebereiche nach Abschluss nicht leer, hängen sie nicht von der Bearbeitungsreihenfolge ab; bei verschiedenen Reihenfolgen kann ein Fehlschlag jedoch bei verschiedenen leeren Wertebereichen auftreten.
Eine Workshop-Entscheidung propagieren
Bei den Workshop-Regeln entfernt der anfängliche AC-3-Durchlauf die 3 aus dem Wertebereich von A und die 1 aus dem von B. Für C und D bleibt jeweils und für E .
Entscheide nun . Die Kante entfernt die 1 aus dem Wertebereich von A, sodass bleibt. Die Revision von B anhand von A erzwingt . D ist von C und A verschieden, also gilt . E ist von D verschieden und kann nicht 1 sein, also gilt . Die Verkleinerungen der Wertebereiche haben sich über die unmittelbaren Nachbarn der ursprünglichen Entscheidung hinaus fortgepflanzt.
Die Aufrechterhaltung der Kantenkonsistenz (MAC) wendet diese Schlussfolgerung nach jeder Suchentscheidung an. Ausgehend von kantenkonsistenten Wertebereichen benötigt die Einschränkung auf eine Warteschlange mit eingehenden Kanten von den unbelegten Nachbarn. Entfernte Werte müssen wiederhergestellt werden, wenn die Suche den Zweig rückgängig macht.
Ergebnis und Aufwand deuten
| Ergebnis nach Knoten- und Kantenkonsistenz | Bedeutung |
|---|---|
| Ein leerer Wertebereich | Keine Lösung erweitert die aktuellen Einschränkungen. |
| Jeder Wertebereich enthält einen einzigen Wert | Die einzige verbleibende Belegung erfüllt das binäre CSP. |
| Einige Wertebereiche enthalten mehrere Werte | Weitere Schlussfolgerungen oder eine Suche können nötig sein. |
Ein Dreieck mit den Wertebereichen {Rot, Blau} und Ungleichungen auf allen drei Kanten bleibt kantenkonsistent, hat aber keine Lösung. Jede Kante hat für sich Unterstützungen, doch die drei Wahlmöglichkeiten passen nicht zusammen.
Bei binären Constraints und der maximalen Wertebereichsgröße benötigt AC-3 Zeit: Eine Kantenrevision prüft bis zu Paare, und jede Kante kann bis zu Durchläufe benötigen, während ihr Zielknoten Werte verliert. MAC wendet pro Suchknoten mehr auf als Forward Checking und erhält dafür oft einen viel kleineren Suchbaum.
Wichtige Erkenntnisse
- Die Revision von entfernt Werte ohne Unterstützung aus dem Wertebereich von X.
- Nachdem der Wertebereich von X geschrumpft ist, prüft AC-3 die zu X führenden Kanten erneut.
- Nicht leere kantenkonsistente Wertebereiche können dennoch ein unlösbares CSP beschreiben.
- MAC erhält die Kantenkonsistenz nach Suchentscheidungen aufrecht.
- Für AC-3 gilt im schlimmsten Fall die Standardschranke .
- Schlussfolgerungen aus Wertebereichen mit je einem Wert setzen voraus, dass unäre und binäre Constraints durchgesetzt wurden.
3.3 Nutze stärkere Konsistenzbegriffe und globale Constraints
Getrennte paarweise Unterstützungen können einen Widerspruch in einer Gruppe verbergen. Stärkere Konsistenz und spezialisierte globale Propagation untersuchen Kombinationen, die Kantenkonsistenz übersieht, während numerische Schranken große Wertebereiche zu nützlichen Intervallen zusammenfassen können.
Belegungen um eine weitere Variable erweitern
Pfadkonsistenz untersucht Tripel. Jede konsistente Belegung zweier Variablen muss sich um einen Wert für eine dritte erweitern lassen, der mit beiden vereinbar ist. In einem rot oder blau gefärbten Dreieck lassen X Rot und Y Blau keinen Wert für Z übrig. Pfadkonsistenz entfernt dieses erlaubte Paar und deckt schließlich die Unlösbarkeit auf. Sie kann Tupel aus Relationen entfernen und tut damit mehr, als einzelne Werte aus Wertebereichen zu löschen.
k-Konsistenz verlangt, dass sich jede konsistente Belegung beliebiger Variablen um eine beliebige weitere Variable erweitern lässt. Bei binären CSPs entspricht 1-Konsistenz der Knotenkonsistenz, 2-Konsistenz der Kantenkonsistenz und 3-Konsistenz der Pfadkonsistenz. Starke k-Konsistenz umfasst jede Stufe von 1 bis k. Bei starker n-Konsistenz für n Variablen und nicht leeren Wertebereichen lässt sich jede konsistente partielle Belegung ohne Backtracking zu einer Lösung erweitern. Die Herstellung dieser Eigenschaft verursacht im schlimmsten Fall exponentielle Zeit- und Speicherkosten.
Werte in Alldiff zählen
Alldiff verlangt verschiedene Werte für alle Variablen in seinem Geltungsbereich. Hat eine Gruppe von m Variablen nur n verschiedene mögliche Werte und gilt , kann keine Belegung den Constraint erfüllen.
Für drei Zellen mit den Wertebereichen sind die paarweisen Ungleichungen kantenkonsistent: Jede 4 hat in jedem Nachbarn die Unterstützung 7 und jede 7 die Unterstützung 4. Die globale Zählung scheitert dennoch, weil drei verschiedene Werte benötigt werden und nur zwei existieren.
Haben zwei Zellen beide den Wertebereich , müssen sie untereinander 4 und 7 verwenden. Diese Werte können aus allen anderen Zellen derselben Zeile entfernt werden. Diese Schlussfolgerung mit einem nackten Paar nutzt eine Teilmenge des gesamten Alldiff-Geltungsbereichs. Ein einfacher globaler Propagator kann auch wiederholt Variablen mit nur einem Wert verarbeiten, deren Werte an anderer Stelle entfernen und prüfen, ob zu wenige verschiedene Werte übrig bleiben. Stärkere Propagatoren erkennen auch eingeschränkte Teilmengen.
Numerische Schranken verschärfen
Schrankenpropagation speichert einen Wertebereich anhand seines Minimums und Maximums. Schrankenkonsistenz verlangt, dass jeder Endpunkt für jeden relevanten Constraint eine erfüllende Erweiterung hat; sie prüft nicht jeden inneren Wert.
Für zwei Busse, die 100 Personen befördern, sei und , wobei gilt. Der zweite Bus befördert höchstens 70 Personen, was erzwingt. Der erste befördert höchstens 50, was erzwingt. Die verschärften Intervalle sind und .
Für Vorbereiten, Analysieren und Bericht erstellen mit einer Dauer von 20, 40 und 30 Minuten in dieser Reihenfolge ergeben sich bei einer Frist von 120 Minuten die spätesten Startzeiten 30, 50 und 90. Nichtnegative Startzeiten ergeben die frühesten Startzeiten 0, 20 und 60. Durch Propagation vorwärts und rückwärts erhält man diese Zeitfenster, bevor eine Startzeit gewählt wird.
Eine geeignete Stärke wählen
Jede Sudoku-Zelle hat 20 verschiedene andere Zellen mit gemeinsamem Constraint: 8 in ihrer Zeile, 8 in ihrer Spalte und 4 zusätzliche Zellen in ihrer Box. Über 81 Zellen hinweg ergibt das verschiedene ungleiche Paare. Globale Constraints erhalten dieselben Lösungen wie diese Paare, können aber nackte Paare und einen Mangel an Werten früher aufdecken. Stärkeres Schlussfolgern kostet pro Durchlauf mehr; praktische Löser wägen diesen Aufwand gegen die eingesparte Suche ab und kombinieren häufig Kantenkonsistenz mit spezialisierter globaler Propagation und Schrankenpropagation.
Wichtige Erkenntnisse
- Pfadkonsistenz prüft, ob sich ein konsistentes Paar um eine dritte Variable erweitern lässt.
- Starke k-Konsistenz umfasst jede kleinere Konsistenzstufe.
- Alldiff erkennt Gruppen mit zu wenigen verschiedenen Werten.
- Ein nacktes Paar reserviert seine zwei Werte für diese beiden Variablen.
- Schrankenpropagation verschärft Endpunkte, ohne einen großen numerischen Wertebereich aufzuzählen.
- Stärkeres Schlussfolgern tauscht zusätzlichen Aufwand pro Durchlauf gegen weniger Suchaufwand ein.
4Löse CSPs mit lokaler Suche
Ein Zeitplan, der einige Regeln verletzt, kann dennoch ein nützlicher Ausgangspunkt sein. Lokale Suche behält für jede Variable einen Wert bei und repariert Konflikte Schritt für Schritt. Die Herausforderung besteht darin, zielführende Schritte zu wählen und Bereiche zu verlassen, in denen der Fortschritt aufhört. Du verfolgst die Min-Konflikte-Heuristik auf einem kleinen Brett, untersuchst Möglichkeiten, die Reparatur voranzubringen, und wählst ein Lösungsverfahren, das zu den Nachweisen passt, die eine Ablaufplanungs- oder Zuordnungsaufgabe benötigt.
4.1 Repariere Belegungen mit der Min-Konflikte-Heuristik
Lokale Suche beginnt mit einem Wert für jede Variable, auch wenn einige Constraints verletzt sind. Die Min-Konflikte-Heuristik repariert diese vollständige Belegung, indem sie einer konfliktbehafteten Variablen einen Wert mit möglichst wenigen Konflikten zuweist.
Eine Reparatur wählen
- Erstelle eine vollständige Belegung, zufällig oder durch gierige Auswahl.
- Wird kein Constraint verletzt, gib die Lösung zurück.
- Wähle zufällig eine Variable, die an einem verletzten Constraint beteiligt ist.
- Bewerte jeden Wert ihres Wertebereichs gegenüber den anderen Variablen, die fest bleiben.
- Wähle einen Wert mit den wenigsten Konflikten, löse Gleichstände zufällig auf und wiederhole das Verfahren bis zum Erfolg oder bis zu einer Schrittgrenze.
Eine konfliktbehaftete Variable ist an mindestens einem verletzten Constraint beteiligt. Sie ist nicht notwendigerweise die Variable mit den meisten Verletzungen. Die zufällige Wahl unter konfliktbehafteten Variablen und gleich guten Werten hilft, eine starre wiederholte Abfolge zu vermeiden.
Ein Brett für das 4-Damen-Problem reparieren
Verwende eine Dame pro Spalte mit den Zeilenvariablen . Ein Paar steht in Konflikt, wenn die Zeilen gleich sind oder der Zeilenabstand dem Spaltenabstand entspricht. Beginne mit . Die Spalten 1 und 3 teilen sich Zeile 2; die Damen in den Spalten 3 und 4 greifen sich diagonal an. Die konfliktbehafteten Variablen sind Q1, Q3 und Q4.
Wähle Q3 und bewerte die Zeilen, während Q1, Q2 und Q4 fest bleiben:
| Mögliche Zeile für Q3 | Konflikte mit Beteiligung von Q3 |
|---|---|
| 1 | 0 |
| 2 | 2 |
| 3 | 2 |
| 4 | 3 |
Zeile 1 ergibt , eine Lösung. Wäre stattdessen Q1 gewählt worden, wären seine Konfliktzahlen für die Zeilen 1–4 gleich 0, 1, 2 und 2. Ein Zug in Zeile 1 ergibt , wobei der diagonale Konflikt zwischen Q3 und Q4 bleibt. Auch nach einer lokal besten Reparatur können also weitere Reparaturen nötig sein.
Zähle die Constraints, an denen die gewählte Variable beteiligt ist. Zählt man alle Verletzungen auf jedem entstehenden Brett, ergibt sich dieselbe Reihenfolge, weil unbeteiligte Constraints zu jedem Kandidaten einen konstanten Beitrag leisten. Das erfordert lediglich mehr Aufwand. Verwende beim Vergleich der Kandidaten eine einheitliche Definition von Konflikten.
Einen bestehenden Zeitplan reparieren
Fällt eine Lehrkraft aus, ist der aktuelle Zeitplan bereits eine vollständige Belegung. Die Min-Konflikte-Heuristik kann dort beginnen und Veranstaltungen verschieben, bis die neuen und bestehenden Constraints erfüllt sind. Eine kleine Änderung benötigt oft wenige Reparaturen, obwohl ein Schritt anderswo neue Konflikte erzeugen kann. Ist es wichtig, den alten Plan beizubehalten, weise der Änderung einer Belegung explizite Kosten zu; allein die Minimierung von Verletzungen minimiert nicht die Änderungen am Plan.
Experimente mit einer guten Anfangsbelegung benötigten selbst für eine Million Damen relativ wenige Reparaturschritte. Größere Bretter machen jeden Schritt dennoch aufwendiger. Die Min-Konflikte-Heuristik wurde auch für die Hubble-Planung eingesetzt; Berichten zufolge verkürzte sich die Planung einer Woche von Beobachtungen von etwa drei Wochen auf etwa 10 Minuten.
Das Suchverhalten deuten
Viele Familien zufälliger CSPs gehen von überwiegend lösbar zu überwiegend unlösbar über, wenn das Verhältnis von Constraints zu Variablen steigt. In der Nähe dieses Übergangs ist die Entscheidung, wie Wahlmöglichkeiten zusammenwirken, oft am schwierigsten. Probleme mit wenigen Einschränkungen können viele leicht erreichbare Lösungen haben. Stark eingeschränkte unlösbare Probleme können von vollständigen Lösern mit Propagation schnell als unlösbar erkannt werden.
Das Erreichen einer Schrittgrenze bei der Min-Konflikte-Heuristik bedeutet, dass in diesem Durchlauf keine Lösung gefunden wurde. Das Problem kann dennoch lösbar sein. Die praktische Stärke des Verfahrens liegt in effizienten Reparaturen, einschließlich Schritten zu gleich bewerteten Zuständen, obwohl Lösungen nur einen winzigen Anteil aller möglichen Belegungen ausmachen.
Wichtige Erkenntnisse
- Die Min-Konflikte-Heuristik beginnt mit einer vollständigen Belegung und repariert verletzte Constraints.
- Wähle eine konfliktbehaftete Variable und dann einen Wert mit möglichst wenigen Konflikten; löse Gleichstände zufällig auf.
- Bei der Bewertung möglicher Werte können Constraints ohne Bezug zur gewählten Variablen ignoriert werden.
- Eine zulässige Belegung wiederherzustellen und Änderungen zu minimieren sind verschiedene Ziele.
- Ein Fehlschlag an der Schrittgrenze lässt die Frage der Lösbarkeit offen.
4.2 Überwinde Plateaus und lokale Minima und wähle zwischen lokaler Suche und Backtracking
Eine Reparatursuche kann aufhören, sich zu verbessern, obwohl Konflikte bestehen bleiben. Um weiterzukommen, benötigt der Löser eine Möglichkeit, sich durch gleich bewertete Zustände zu bewegen oder zu ändern, welche Schritte lohnend erscheinen. Auch das benötigte Ergebnis zählt: Eine schnelle zulässige Reparatur und ein Beweis der Unlösbarkeit verlangen unterschiedliche Verfahren.
Ein Plateau durchqueren
Ein lokales Minimum hat Verletzungen, aber keine Änderung einer einzelnen Variablen, die deren Anzahl senkt. Ein Plateau ist ein zusammenhängender Bereich von Belegungen mit gleicher Bewertung. Schritte, die nur bergab führen, können stecken bleiben; ein Seitwärtsschritt verändert den Zustand, ohne die Bewertung zu senken.
Beim 4-Damen-Problem hat einen Konflikt zwischen Q3 und Q4. Bei festgehaltenen anderen Damen sind die Konfliktzahlen von Q3 für die Zeilen 1–4 gleich 1, 1, 3 und 2; die von Q4 sind 2, 2, 1 und 2. Keine der beiden Variablen hat einen verbessernden Zug.
Ein Zug von Q3 in Zeile 1 ergibt , weiterhin mit einem Konflikt: Nun stehen Q1 und Q3 in derselben Zeile. In diesem neuen Zustand sind die Konfliktzahlen von Q1 gleich 1, 0, 3 und 1. Ein Zug von Q1 in Zeile 2 ergibt und beseitigt den Konflikt. Der Seitwärtsschritt hat verändert, welche verbessernden Züge verfügbar waren.
Die Suche in Bewegung halten
| Verfahren | Wie es die Suche verändert |
|---|---|
| Tabusuche | Verbietet vorübergehend kürzlich besuchte Zustände oder ausgeführte Schritte, um Zyklen zu verringern. |
| Constraint-Gewichtung | Erhöht die Bedeutung von Constraints, die weiterhin verletzt sind. |
| Zufällige Neustarts | Beginnen nach erfolglosen Schritten mit einer anderen vollständigen Belegung. |
| Simulierte Abkühlung | Akzeptiert manchmal schlechtere Schritte; die Akzeptanz sinkt mit der Temperatur. |
Eine Tabuliste ist ein kurzlebiges Gedächtnis. Sie erschwert die sofortige Rückkehr zu einem gerade verlassenen Zustand. Ein Neustart erkundet einen anderen Bereich, während die simulierte Abkühlung innerhalb des aktuellen Durchlaufs einen Bereich mit mehr Konflikten überqueren kann.
Beginne bei der Constraint-Gewichtung jedes Gewicht bei 1 und bewerte einen Zustand anhand der Summe der Gewichte seiner verletzten Constraints. Wähle eine Änderung, die diese gewichtete Bewertung senkt, und erhöhe dann die Gewichte der weiterhin verletzten Constraints. Wiederholte Fehlschläge werden teurer und verändern die Suchlandschaft. Eine gewichtete Bewertung von null bedeutet weiterhin, dass jeder positiv gewichtete harte Constraint erfüllt ist.
Den benötigten Nachweis wählen
Lokale Suche ist unvollständig: Sie kann eine existierende Lösung übersehen, und ein endlicher erfolgloser Durchlauf lässt die Frage der Unlösbarkeit offen. Backtracking mit Propagation bei endlichen Wertebereichen ist vollständig: Es findet schließlich eine Lösung oder schöpft jede mögliche Vervollständigung aus.
Verwende lokale Suche, wenn ein großes Problem mit wenigen Einschränkungen eine zulässige Belegung oder eine schnelle Reparatur benötigt. Backtracking mit MRV und MAC ist eine gute Wahl für stark eingeschränkte Rätsel und immer dann, wenn die Aufgabe den Nachweis der Unlösbarkeit verlangt. Die Laufzeit hängt weiterhin vom jeweiligen Problemfall ab; diese Verfahrensentscheidungen beruhen auf den jeweiligen Garantien.
Der Workshop-Zeitplan hat die eindeutige Lösung . Das Hinzufügen von schließt sie aus. Die Min-Konflikte-Heuristik kann bis zu ihrer Grenze Reparaturen versuchen, doch erst eine vollständige Suche, die die verbleibenden Fälle ausschöpft, stellt fest, dass die organisierende Person eine Anforderung ändern muss, etwa indem sie ein weiteres Zeitfenster hinzufügt.
Wichtige Erkenntnisse
- Ein Seitwärtsschritt kann jenseits eines Plateaus einen verbessernden Schritt ermöglichen.
- Tabugedächtnis, Gewichte, Neustarts und simulierte Abkühlung begegnen unterschiedlichen Hindernissen für den Fortschritt.
- Lokale Suche ist unvollständig; erschöpfendes Backtracking bei endlichen Wertebereichen ist vollständig.
- Wähle ein vollständiges Verfahren, wenn Unlösbarkeit nachgewiesen werden muss.
5Nutze die Struktur eines Problems
Die Form eines Constraint-Graphen kann ebenso wichtig sein wie die Größe seiner Wertebereiche. Getrennte Komponenten lassen sich unabhängig lösen, und ein Baum ermöglicht einen beschneidenden Rückwärtsdurchlauf mit anschließender Vorwärtsbelegung ohne Backtracking. Zyklen erfordern mehr Aufwand, doch eine kleine Schnittmenge oder eine schmale Baumzerlegung kann ihn begrenzen. Diese Verfahren verbinden die Graphenstruktur mit der Zeit, die benötigt wird, um eine konsistente Belegung zu finden.
5.1 Zerlege ein Problem in unabhängige Teilprobleme und löse baumstrukturierte CSPs
Ein Constraint-Graph kann kleinere Probleme innerhalb eines großen sichtbar machen. Unabhängige Komponenten lassen sich getrennt lösen, und für azyklische Komponenten gibt es einen besonders effizienten Algorithmus mit einem beschneidenden Rückwärtsdurchlauf und einem belegenden Vorwärtsdurchlauf.
Getrennte Komponenten zerlegen
Eine Zusammenhangskomponente ist unabhängig, wenn kein Constraint ihre Variablen mit einer anderen Komponente verbindet. Löse jede Komponente und kombiniere dann je eine Lösung aus jeder. Ist eine Komponente unlösbar, ist das gesamte CSP unlösbar. Auf der Australienkarte ist Tasmanien unabhängig vom Festland.
Sind n Variablen in unabhängige Gruppen der Größe c aufgeteilt, liegt der Aufwand, eine vollständige Belegung zu finden, bei statt bei . Für 60 binäre Variablen, aufgeteilt in drei Gruppen zu je 20, betrachten getrennte erschöpfende Suchen höchstens Belegungen statt etwa . Um jede kombinierte Lösung aufzuzählen, müssten weiterhin die Kombinationen aufgelistet werden; die Einsparung beschreibt das Lösen der Teilprobleme.
Einen Baum von seiner Wurzel aus ordnen
Ein binäres CSP ist baumstrukturiert, wenn sein Constraint-Graph azyklisch ist. Ein zusammenhängender Baum hat zwischen jedem Variablenpaar einen Pfad; ein Wald enthält getrennte Bäume. Wende zuerst unäre Einschränkungen an. Wähle eine beliebige Wurzel und ordne die Variablen so, dass jeder Elternknoten vor seinen Kindern erscheint.
Gerichtete Kantenkonsistenz in dieser Reihenfolge verlangt, dass jede frühere Variable in jedem späteren Nachbarn Unterstützung hat. In einem Baum sind diese späteren Nachbarn ihre Kinder. Die Richtung der Unterstützung führt vom Elternknoten zum Kind, obwohl der Algorithmus Kinder vor Elternknoten verarbeitet.
Rückwärts beschneiden, vorwärts belegen
- Lies die Reihenfolge rückwärts, ohne die Wurzel. Revidiere für jedes Kind die Kante von seinem Elternknoten zu diesem Kind. Entferne Werte ohne Unterstützung aus dem Wertebereich des Elternknotens.
- Wird ein Wertebereich leer, melde, dass es keine Lösung gibt.
- Lies die Reihenfolge vorwärts. Wähle einen beliebigen verbliebenen Wert für die Wurzel und gib dann jedem Kind einen Wert, der mit seinem belegten Elternknoten vereinbar ist.
Die Nachkommen des Kindes wurden bereits verarbeitet, wenn sein Elternknoten revidiert wird. Ein verbliebener Wert des Elternknotens hat daher in jedem Kind Unterstützung, und jeder Wert eines Kindes hat bereits weiter unten Unterstützung. Verschiedene Kindzweige sind nicht durch Kanten verbunden, sodass diese Unterstützungen unabhängig gewählt werden können. Deshalb benötigt der Vorwärtsdurchlauf kein Backtracking.
Den Workshop-Baum verfolgen
Lege im Workshop-Zeitplan fest und entferne 1 aus den Wertebereichen der anderen Workshops. Der verbleibende Graph ist der Pfad B–A–D–E mit den Wertebereichen und den Constraints .
Wähle die Wurzel A und die Reihenfolge A, B, D, E. Der Rückwärtsdurchlauf revidiert und dann ohne Änderungen. Schließlich entfernt die 3 aus dem Wertebereich von A, weil B keinen größeren Wert hat. Die Vorwärtsbelegung ergibt . Nimmt man wieder hinzu, ergibt sich der vollständige Zeitplan.
Für n Variablen mit maximaler Wertebereichsgröße d revidiert der Rückwärtsdurchlauf Kanten mit jeweils bis zu Aufwand. Das ergibt Zeit. Die Garantie hängt von der Zyklenfreiheit ab. Ein Zyklus kann getrennte Kindzweige verbinden und die Unabhängigkeit aufheben, die diese lokalen Entscheidungen sicher gemacht hat.
Wichtige Erkenntnisse
- Getrennte Komponenten können unabhängig gelöst und kombiniert werden.
- Das Baumverfahren setzt zuerst unäre Einschränkungen durch und ordnet Elternknoten vor Kindern an.
- Der Rückwärtsdurchlauf revidiert Kanten vom Elternknoten zum Kind und beschneidet Elternknoten.
- Der Vorwärtsdurchlauf wählt vereinbare Werte ohne Backtracking.
- Die übliche Zeitschranke für baumstrukturierte CSPs ist .
5.2 Führe nahezu baumstrukturierte Probleme auf Bäume zurück
Ein Graph mit wenigen Zyklen kann einem Baum dennoch ähnlich genug sein, um effizient gelöst zu werden. Die Schnittmengenkonditionierung belegt zuerst ausgewählte Variablen; die Baumzerlegung fasst Variablen zu überlappenden Teilen zusammen. Beide machen die verbleibende Abstimmung baumförmig.
Auf eine Zyklenschnittmenge konditionieren
Eine Zyklenschnittmenge ist eine Menge von Variablen, deren Entfernung einen Baum oder Wald übrig lässt. Prüfe jeden verbleibenden Zyklus, nicht nur den auffälligsten. Auf der Australienkarte bleiben nach Entfernung von SA der Pfad WA–NT–Q–NSW–V und das isolierte T. Beim Workshop-Graphen bleibt nach Entfernung von C der Pfad B–A–D–E.
Für jede Belegung der Schnittmenge, die deren interne Constraints erfüllt:
- Entferne unvereinbare Werte aus den verbleibenden Wertebereichen.
- Löse jeden verbleibenden Baum durch Rückwärtsbeschneidung und Vorwärtsbelegung.
- Sind alle erfolgreich, kombiniere ihre Belegungen mit den Werten der Schnittmenge. Versuche andernfalls eine andere Belegung der Schnittmenge.
Im Workshop-Problem lässt einen lösbaren Baum übrig. Bei müssen A und B aus stammen und erzwingt . D muss sowohl von A als auch von C verschieden sein, was ergibt. E kann nicht 1 sein und muss von C und D verschieden sein, sodass kein Wert bleibt. Bei müssen A und B die Werte 1 und 2 haben; D muss dann 2 sein, wodurch erneut kein Wert für E bleibt.
Bei Schnittmengengröße c gibt es höchstens Belegungen, auf die jeweils ein Baumproblem mit dem Aufwand folgt. Insgesamt ergibt das . Ein kleines c macht dies nützlich; der Aufwand bleibt exponentiell in c. Eine minimale Schnittmenge zu finden ist NP-schwer, aber auch eine gültige, nicht minimale Schnittmenge ergibt ein korrektes Verfahren.
Überlappende Mengen verbinden
Eine Baumzerlegung ordnet Variablenmengen, sogenannte Taschen, in einem Baum an. Sie muss drei Bedingungen erfüllen:
- Jede Variable erscheint in einer Tasche.
- Der Geltungsbereich jedes Constraints passt in mindestens eine Tasche.
- Die Taschen, die eine bestimmte Variable enthalten, bilden einen zusammenhängenden Teil des Taschenbaums.
Die dritte Regel ist die Running-Intersection-Eigenschaft. Erscheint X an beiden Enden eines Taschenpfads, muss es auf dem gesamten Pfad erscheinen. Andernfalls könnten entfernte Taschen inkonsistente Werte für X wählen, ohne dass eine dazwischenliegende Übereinstimmungsprüfung stattfindet.
Die lokal gültigen Belegungen jeder Tasche werden zu Werten einer Mega-Variablen. Benachbarte Taschen müssen bei gemeinsamen Variablen übereinstimmen. Der resultierende Baum koordiniert die lokalen Lösungen. Für ein Dreieck X–Y–Z–X mit zusätzlicher Kante Z–W decken die Taschen und jede Kante ab und stimmen bei Z überein.
Die Baumweite der Zerlegung ist ihre größte Taschengröße minus 1. Die Baumweite eines Graphen ist das Minimum über gültige Zerlegungen. Für die Weite w lautet die Standardschranke für CSPs . Eine feste beschränkte Weite begrenzt den Exponenten.
Wertesymmetrie entfernen
Haben Farbnamen keine besondere Bedeutung, erhält eine Vertauschung von Rot, Grün und Blau die Gültigkeit. Die sechs Lösungen für das australische Festland sind sechs Umbenennungen eines Musters. Legt man die Reihenfolge NT vor SA vor WA in der Farbreihenfolge Rot, Grün, Blau fest, bleibt ein Repräsentant übrig. Ein solcher symmetriebrechender Constraint ist nur zulässig, wenn die Umbenennung die ursprünglichen Regeln erhält. Eine Regel, die für eine bestimmte Region Rot verlangt, macht diese Farbe besonders und verändert, welche Vertauschungen Symmetrien bleiben.
Wichtige Erkenntnisse
- Eine Zyklenschnittmenge muss jeden Zyklus entfernen.
- Die Konditionierung versucht Belegungen der Schnittmenge und löst den verbleibenden Wald.
- Der Aufwand der Konditionierung wächst exponentiell mit der Größe der Schnittmenge.
- Baumzerlegungen decken Variablen und Constraints ab und erfüllen die Running-Intersection-Eigenschaft.
- Die Baumweite ist die maximale Taschengröße minus eins, für den Graphen minimiert über alle Zerlegungen.
- Brich Wertesymmetrie nur für Umbenennungen, die die ursprünglichen Constraints erhalten.
Constraint-Erfüllungsprobleme: Beispiele
1Erstelle und prüfe ein CSP-Modell
13 Schritte
- 1EinführungÜberführe eine Aufgabe in Wahlmöglichkeiten
Ein Löser benötigt eine genaue Beschreibung dessen, was gewählt werden kann und welche Kombinationen funktionieren. Diese Beschreibung besteht aus Variablen mit Wertebereichen und Constraints, die jeweils einen Geltungsbereich von Variablen betreffen. Jeder Fehler darin wirkt sich auf jede Suche aus. Erstelle einen kleinen Zeitplan und vergleiche ihn dann mit Zuordnungs- und Rätselmodellen. Das Ziel ist, die Entscheidungen und ihre Abhängigkeiten sichtbar zu machen, bevor du die Aufgaben zu lösen versuchst.
- 2ErklärungBenenne jede Entscheidung
A und B seien Workshop-Zeitfenster, jeweils aus . A muss vor B stattfinden, also schreibe . Die Variablen sind die gewählten Zeitfenster der Workshops; die Zahlen sind Werte.
Der Geltungsbereich des Constraints ist A und B. Seine Relation erlaubt die Paare . Ein Löser kann entweder diese Tupelliste oder die Reihenfolgeregel verwenden, um einen Kandidaten zu prüfen.
- 3BeispielPrüfe eine mögliche Belegung
Bei alleinigem ist die Belegung partiell und konsistent. Die Wahl vervollständigt sie, verletzt aber die Reihenfolgeregel. Die Wahl ergibt stattdessen eine vollständige, konsistente Belegung.
Das sind getrennte Prüfungen: Jede Variable benötigt einen Wert aus ihrem Wertebereich und jeder Constraint muss erfüllt sein. Eine partielle Belegung kann die aktuellen Prüfungen bestehen und dennoch keine mögliche Vervollständigung zulassen.
- 4HerausforderungLässt sich die partielle Wahl vervollständigen?
Drei Variablen X, Y und Z haben die Wertebereiche und die Constraints . X wird der Wert 1 zugewiesen. Lässt sich diese konsistente partielle Belegung erweitern?
---reveal---
Nein. X allein verletzt keinen Constraint. Die Vervollständigung erzwingt für Y und Z jeweils den Wert 2, was ihre Ungleichung verletzt. Aktuelle Konsistenz und mögliche Vervollständigung sind verschiedene Anforderungen.
- 5VerbindungLies Abhängigkeiten aus dem Graphen ab
Ein binärer Constraint-Graph setzt an jede Variable einen Knoten und an jedes durch einen Constraint verbundene Paar eine Kante. Das Dreieck aus der Aufgabe zeigt drei miteinander wechselwirkende Wahlmöglichkeiten. Eine isolierte Variable hat keine binäre Abhängigkeit von einer anderen Variablen.
Dieser Graph unterstützt spätere Verfahren: Beschneidung folgt den Kanten und getrennte Komponenten können unabhängig gelöst werden. Ein Constraint höherer Stelligkeit benötigt eine Darstellung seines gesamten Geltungsbereichs, etwa durch einen eigenen Constraint-Knoten.
- 6ErklärungOrdne die Regel ihrem Geltungsbereich zu
Eine unäre Regel schränkt einen Wertebereich ein: entfernt das früheste Zeitfenster für Ethik. Eine binäre Regel verbindet zwei Variablen: ordnet Workshops zeitlich. Eine höherstellige Regel wie verbindet drei Wahlmöglichkeiten.
Ein globaler Constraint gibt eine benannte Regel über eine Gruppe variabler Größe an. Alldiff verlangt, dass jeder Wert in seinem Geltungsbereich von jedem anderen verschieden ist.
- 7BeispielWarum Alldiff beibehalten?
Drei Berichtsvariablen erlauben jeweils die Prüfenden 1 und 2. Jedem Paar können verschiedene Prüfende zugeordnet werden, aber drei Berichte können nicht drei verschiedene Prüfende aus einer Menge von zwei erhalten.
Alldiff deckt diesen Mangel auf Gruppenebene auf. Seine Form mit paarweisen Ungleichungen hat dieselben Lösungen, doch getrennte paarweise Prüfungen können den Widerspruch übersehen. Die Repräsentation beeinflusst, welche Schlussfolgerungen ein Löser ziehen kann.
- 8HerausforderungAnforderung oder Präferenz?
Ein Raumplan muss dafür sorgen, dass die Kapazität der Räume bei Besprechungen eingehalten wird. Eine organisierende Person bevorzugt einen Raum nahe dem Eingang, aber ein geeigneter Raum weiter entfernt ist verfügbar. Sollte die Wahl des weiter entfernten Raums den Plan unzulässig machen?
---reveal---
Nein. Die Kapazität ist eine harte Anforderung, während der Standort eine weiche Präferenz ist. Der weiter entfernte Raum kann Präferenzkosten verursachen, ohne den Plan unzulässig zu machen. Für die Zulässigkeit muss weiterhin jede harte Regel erfüllt sein.
- 9BeispielModelliere den Workshop-Tag
Verwende die Variablen A–E für Python-Grundlagen, Python für Fortgeschrittene, Statistik, Datenbanken und Ethik. Jede nimmt Zeitfenster 1, 2 oder 3 an.
Gemeinsame Teilnehmende ergeben . Grundlagen findet vor Fortgeschrittene statt, also . Ethik kann nicht in Zeitfenster 1 stattfinden, also . Jede Regel verbindet genau die Entscheidungen, für die sie gilt.
- 10BeispielÜberprüfe den vollständigen Zeitplan
Versuche . Die sechs Paare mit gemeinsamen Teilnehmenden haben verschiedene Werte. Grundlagen findet vor Fortgeschrittene statt und Ethik liegt nicht am Vormittag. Jeder Workshop hat ein erlaubtes Zeitfenster, also ist dies eine Lösung.
B und D teilen sich Zeitfenster 3. Das ist erlaubt, weil kein Constraint sie verbindet. Eine zusätzliche Regel, nach der alle Workshops verschieden sein müssen, würde diesen zulässigen Zeitplan verwerfen.
- 11ErklärungDrücke die Überschneidungsfreiheit korrekt aus
Dauert Aufgabe X 20 Minuten und Aufgabe Y 35 Minuten, erlaubt ihre gemeinsam genutzte Maschine beide Reihenfolgen:
Jede Alternative vergleicht eine Endzeit mit der anderen Startzeit. „Und“ würde verlangen, dass beide Aufgaben mit positiver Dauer jeweils vor der anderen liegen. Verwende eine einzelne Vorrangbedingung nur, wenn die Aufgabenreihenfolge tatsächlich feststeht.
- 12HerausforderungErstelle ein Zuordnungsmodell
Drei Berichte benötigen drei verschiedene Prüfende. Prüfer 2 hat bei Bericht A einen Interessenkonflikt. Welche Variablen, Wertebereiche und Constraints drücken die Aufgabe aus?
---reveal---
Verwende eine Variable pro Bericht mit den Prüfenden 1–3 als Werten. Entferne 2 aus dem Wertebereich von A und wende Alldiff auf alle drei Berichte an. Das sind eine unäre Zulässigkeitseinschränkung und eine globale Regel für verschiedene Werte; das Modell gibt jedem Bericht genau eine prüfende Person.
- 13ZusammenfassungPrüfe das Modell vor der Suche
Bestimme die Entscheidungen, liste ihre erlaubten Werte auf und formuliere die tatsächlichen Anforderungen über diese Werte. Prüfe einen zulässigen und einen unzulässigen Fall. Harte Regeln bestimmen die Zulässigkeit; Präferenzkosten steuern die Optimierung. Die Wahl der Variablen sollte diese Regeln leicht ausdrückbar machen.
2Vollziehe Backtracking nach und verbessere es
14 Schritte
Speichere diese Einheit, um jede Interaktive Lektion Schritt für Schritt durchzugehen.
- 1EinführungErstelle eine Lösung Schritt für Schritt
- 2KernaussageEine nächste Variable genügt
- 3BeispielBeginne die Suche mit fester Reihenfolge
- 4BeispielErkenne die Sackgasse
- 5HerausforderungWelcher Aufruf versucht einen anderen Wert?
- 6ErklärungWähle die Variable, bei der ein Fehlschlag wahrscheinlich ist
- 7BeispielLass die Wertebereiche die Workshop-Reihenfolge bestimmen
- 8KernaussageHalte bei der Wertwahl Möglichkeiten offen
- 9HerausforderungWähle nach der Variablen einen Wert
- 10BeispielÜberspringe eine unbeteiligte Entscheidung
- 11ErklärungTrage Ursachen durch die Suche zurück
- 12BeispielLerne eine gescheiterte Kombination
- 13HerausforderungStimme Reihenfolge und Lernen aufeinander ab
- 14ZusammenfassungUnterscheide die Verbesserungen der Suche
3Vollziehe die Beschneidung von einer Entscheidung bis zum Gruppenkonflikt nach
17 Schritte
Speichere diese Einheit, um jede Interaktive Lektion Schritt für Schritt durchzugehen.
- 1EinführungVerfolge die Folgen einer Änderung des Wertebereichs
- 2ErklärungBeschneide unmittelbare Nachbarn
- 3BeispielBeobachte die übersehene Wechselwirkung
- 4HerausforderungStelle genau die richtigen Werte wieder her
- 5ErklärungUnterstützung wird vom Ausgangs- zum Zielknoten geprüft
- 6BeispielBeginne eine Kette von Folgen
- 7BeispielStelle die Kantenkonsistenz vollständig her
- 8TippReihe Kanten ein, die Unterstützung verlieren können
- 9HerausforderungWas bedeuten nicht leere Wertebereiche nach Abschluss?
- 10VerbindungErhalte die Konsistenz während der Suche aufrecht
- 11ErklärungPrüfe ein Paar anhand einer dritten Variablen
- 12KernaussageWarum starke Konsistenz wichtig ist
- 13BeispielReserviere ein Wertepaar
- 14BeispielPropagiere numerische Schranken in beide Richtungen
- 15HerausforderungErkenne einen Mangel in der Gruppe
- 16HerausforderungWähle die Schlussfolgerung, die den Fehlschlag erklärt
- 17ZusammenfassungLies jede Garantie genau
4Repariere ein Brett und verlasse ein Plateau
11 Schritte
Speichere diese Einheit, um jede Interaktive Lektion Schritt für Schritt durchzugehen.
- 1EinführungRepariere einen vollständigen Kandidaten
- 2ErklärungWähle eine konfliktbehaftete Variable
- 3BeispielFinde Angriffe auf dem Brett
- 4BeispielBewerte die möglichen Zeilen einer Dame
- 5HerausforderungIgnoriere den konstanten Hintergrund
- 6BeispielErreiche einen Zustand ohne verbessernden Zug
- 7BeispielErmögliche eine Reparatur durch einen Seitwärtsschritt
- 8TippStimme das Verfahren zum Entkommen auf das Hindernis ab
- 9HerausforderungWähle einen Löser für die Entscheidung über Unlösbarkeit
- 10VerbindungRepariere und begrenze dabei die Änderungen am Plan
- 11ZusammenfassungBeurteile das Ergebnis der Reparatur
5Löse Bäume und beherrsche die verbleibenden Zyklen
15 Schritte
Speichere diese Einheit, um jede Interaktive Lektion Schritt für Schritt durchzugehen.
- 1EinführungNutze den Graphen, um den Aufwand zu verringern
- 2ErklärungLöse unabhängige Komponenten getrennt
- 3ErklärungLege die Baumreihenfolge fest
- 4BeispielBeschneide den Workshop-Baum rückwärts
- 5BeispielWeise die verbliebenen Werte vorwärts zu
- 6HerausforderungErkenne eine umgekehrte Kante
- 7ErklärungBrich jeden Zyklus mit einer Schnittmenge
- 8BeispielVersuche die Workshop-Schnittmenge
- 9KernaussageKleine Schnittmengen begrenzen den Exponenten
- 10ErklärungErsetze Zyklen durch überlappende Taschen
- 11HerausforderungPrüfe den Taschenpfad
- 12VerbindungLies den Aufwand an der Taschengröße ab
- 13VerbindungEntferne austauschbare Farbnamen
- 14HerausforderungKombiniere eine Schnittmenge mit der Baumgarantie
- 15ZusammenfassungPrüfe die strukturelle Bedingung
Constraint-Erfüllungsprobleme: Übungsaufgaben
Set 1: Modelliere Wahlmöglichkeiten und vollziehe die Grundalgorithmen nach10 Übungsfragen
Frage 1 von 10
Antwort zeigenAntwort ausblenden
Frage 2 von 10
Antwort zeigenAntwort ausblenden
Frage 3 von 10
Antwort zeigenAntwort ausblenden
Frage 4 von 10
Antwort zeigenAntwort ausblenden
Frage 5 von 10
Antwort zeigenAntwort ausblenden
Frage 6 von 10
Antwort zeigenAntwort ausblenden
Frage 7 von 10
Antwort zeigenAntwort ausblenden
Frage 8 von 10
Antwort zeigenAntwort ausblenden
Frage 9 von 10
Antwort zeigenAntwort ausblenden
Frage 10 von 10
Antwort zeigenAntwort ausblenden
Set 2: Vollziehe Propagation nach und analysiere gescheiterte Suchen10 Übungsfragen
Speichere diese Einheit, um jede Antwort zu sehen und jedes Set zu üben.
Frage 1 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 2 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 3 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 4 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 5 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 6 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 7 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 8 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 9 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 10 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Set 3: Kombiniere Entscheidungen, Schlussfolgerungen und Reparatur10 Übungsfragen
Speichere diese Einheit, um jede Antwort zu sehen und jedes Set zu üben.
Frage 1 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 2 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 3 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 4 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 5 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 6 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 7 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 8 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 9 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 10 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Set 4: Übertrage die Verfahren auf neue Constraint-Muster10 Übungsfragen
Speichere diese Einheit, um jede Antwort zu sehen und jedes Set zu üben.
Frage 1 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 2 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 3 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 4 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 5 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 6 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 7 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 8 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 9 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Frage 10 von 10
Antwort zeigenAntwort ausblenden
Speichere diese Einheit, um diese Antwort zu sehen.
Hängst du bei deiner eigenen Aufgabe fest? Hausaufgabenhilfe
Schlüsselbegriffe
A
AC-3
Alldiff
Am wenigsten einschränkender Wert
Aufrechterhaltung der Kantenkonsistenz
Ä
Änderungsprotokoll
B
Backjumping
Backtracking-Suche
Baumstrukturiertes CSP
Baumweite
Baumzerlegung
Binärer Constraint
C
Chronologisches Backtracking
Constraint höherer Stelligkeit
Constraint-Erfüllungsproblem
Constraint-Gewichtung
Constraint-Graph
Constraint-Lernen
Constraint-Optimierungsproblem
Constraint-Relation
D
Disjunktiver Constraint
F
Fail-First-Prinzip
Faktorisiertes Modell
Forward Checking
G
Geltungsbereich eines Constraints
Gerichtete Kantenkonsistenz
Globaler Constraint
Gradheuristik
H
Harter Constraint
K
k-Konsistenz
Kantenkonsistenz
Kantenrevision
Knotenkonsistenz
Kommutativität
Konfliktbehaftete Variable
Konfliktgesteuertes Backjumping
Konfliktmenge
Konsistente Belegung
Kritisches Constraint-Verhältnis
L
Lokales Minimum
Lösung
M
Min-Konflikte-Heuristik
MRV-Heuristik
N
Nacktes Paar
Nogood
O
Online-Reparatur
P
Pfadkonsistenz
Plateau
R
Rückwärtsdurchlauf im Baum
Running-Intersection-Eigenschaft
S
Schnittmengenkonditionierung
Schrankenkonsistenz
Schrankenpropagation
Seitwärtsschritt
Simulierte Abkühlung
Starke k-Konsistenz
Symmetriebrechender Constraint
T
Tabusuche
U
Unabhängige Komponente
Unärer Constraint
Unterstützung
V
Variable
Vollständige Suche
Vollständige Zustandsformulierung
Vorrangbedingung
Vorwärtsdurchlauf im Baum
W
Weicher Constraint
Werkstattfertigungsplanung
Wertebereich
Wertebereichsleerung
Wertesymmetrie
Z
Zufälliger Neustart
Zuordnungsproblem
Zyklenschnittmenge
Über diese Einheit
Erstelle deine eigenen Lernmaterialien
Mach aus deinen Notizen, Folien und Dokumenten Lernleitfäden, Übungsfragen, Karteikarten und 6 weitere Tools.