Grundlagen der Künstlichen Intelligenz



Ähnliche Dokumente
Grundlagen der Künstlichen Intelligenz

Kapitel MK:IV. IV. Modellieren mit Constraints

Grundlagen der Künstlichen Intelligenz

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Constraint-Algorithmen in Kürze - Mit der Lösung zur Path-Consistency-Aufgabe 9

Würfelt man dabei je genau 10 - mal eine 1, 2, 3, 4, 5 und 6, so beträgt die Anzahl. der verschiedenen Reihenfolgen, in denen man dies tun kann, 60!.

1 topologisches Sortieren

7 Rechnen mit Polynomen

Primzahlen und RSA-Verschlüsselung

Erfahrungen mit Hartz IV- Empfängern

Einführung in die Algebra

Erwin Grüner

Informationsblatt Induktionsbeweis

Anleitung über den Umgang mit Schildern

A Lösungen zu Einführungsaufgaben zu QueueTraffic

Grundlagen der Theoretischen Informatik, SoSe 2008

1 Mathematische Grundlagen

Lehrer: Einschreibemethoden

Festigkeit von FDM-3D-Druckteilen

SCHRITT 1: Öffnen des Bildes und Auswahl der Option»Drucken«im Menü»Datei«...2. SCHRITT 2: Angeben des Papierformat im Dialog»Drucklayout«...

Kapitel 4 Die Datenbank Kuchenbestellung Seite 1

Wir machen neue Politik für Baden-Württemberg

Kurzanleitung fu r Clubbeauftragte zur Pflege der Mitgliederdaten im Mitgliederbereich

Serienbrieferstellung in Word mit Kunden-Datenimport aus Excel

Suchmaschinen. Universität Augsburg, Institut für Informatik SS 2014 Prof. Dr. W. Kießling 23. Mai 2014 Dr. M. Endres, F. Wenzel Lösungsblatt 6

Datenbanksysteme 2 Frühjahr-/Sommersemester Mai 2014

Erstellen einer Collage. Zuerst ein leeres Dokument erzeugen, auf dem alle anderen Bilder zusammengefügt werden sollen (über [Datei] > [Neu])

Approximation durch Taylorpolynome

Erstellen von x-y-diagrammen in OpenOffice.calc

Datenaufbereitung in SPSS. Daten zusammenfügen

Lichtbrechung an Linsen

50. Mathematik-Olympiade 2. Stufe (Regionalrunde) Klasse Lösung 10 Punkte

Mediator 9 - Lernprogramm

Sichere Anleitung Zertifikate / Schlüssel für Kunden der Sparkasse Germersheim-Kandel. Sichere . der

Das Seminar ist eine Prüfungsleistung für Bachelor und Masterstudierende der Informatik!

Wasserkraft früher und heute!

Outlook. sysplus.ch outlook - mail-grundlagen Seite 1/8. Mail-Grundlagen. Posteingang

Ist Excel das richtige Tool für FMEA? Steve Murphy, Marc Schaeffers

Alle Schlüssel-Karten (blaue Rückseite) werden den Schlüssel-Farben nach sortiert und in vier getrennte Stapel mit der Bildseite nach oben gelegt.

Teamentwicklung. Psychologische Unternehmensberatung Volker Rudat

Das Briefträgerproblem

Korrelation (II) Korrelation und Kausalität

1. Man schreibe die folgenden Aussagen jeweils in einen normalen Satz um. Zum Beispiel kann man die Aussage:

Arbeitshilfe "Tipps für Gespräche mit Vorgesetzten und KollegInnen" Was gilt für mich?

Abschnitt: Algorithmendesign und Laufzeitanalyse

Musterlösungen zur Linearen Algebra II Blatt 5

Grundlagen der höheren Mathematik Einige Hinweise zum Lösen von Gleichungen

A. Ersetzung einer veralteten Govello-ID ( Absenderadresse )

ecaros2 - Accountmanager

Java-Programmierung mit NetBeans

Downloadfehler in DEHSt-VPSMail. Workaround zum Umgang mit einem Downloadfehler

Professionelle Seminare im Bereich MS-Office

Lineare Gleichungssysteme

Statuten in leichter Sprache

4 Aufzählungen und Listen erstellen

Algorithmentheorie Maximale Flüsse

Bürgerhilfe Florstadt

3D-Konstruktion Brückenpfeiler für WinTrack (H0)

Papierverbrauch im Jahr 2000

Skript und Aufgabensammlung Terme und Gleichungen Mathefritz Verlag Jörg Christmann Nur zum Privaten Gebrauch! Alle Rechte vorbehalten!

Übernahme von Daten aus einem bestehenden Outlook-Profil bzw. einem anderen Exchange Server

Güte von Tests. die Wahrscheinlichkeit für den Fehler 2. Art bei der Testentscheidung, nämlich. falsch ist. Darauf haben wir bereits im Kapitel über

So versprüht man digitalen Lockstoff

Softwarelösungen: Versuch 4

Algorithmen und Datenstrukturen. Große Übung vom Nils Schweer

Was bedeutet Inklusion für Geschwisterkinder? Ein Meinungsbild. Irene von Drigalski Geschäftsführerin Novartis Stiftung FamilienBande.

Neun Strategien der Partnerarbeit

Handbuch. NAFI Online-Spezial. Kunden- / Datenverwaltung. 1. Auflage. (Stand: )

Übungsaufgaben Tilgungsrechnung

Manager. von Peter Pfeifer, Waltraud Pfeifer, Burkhard Münchhagen. Spielanleitung

Handbuch ECDL 2003 Modul 2: Computermanagement und Dateiverwaltung Der Task-Manager

Archivierung von Mails des Exchange-Systems

Das sogenannte Beamen ist auch in EEP möglich ohne das Zusatzprogramm Beamer. Zwar etwas umständlicher aber es funktioniert

Prozentrechnung. Wir können nun eine Formel für die Berechnung des Prozentwertes aufstellen:

Copyright Sophie Streit / Filzweiber / Fertigung eines Filzringes mit Perlen!

AGROPLUS Buchhaltung. Daten-Server und Sicherheitskopie. Version vom b

Einführung in. Logische Schaltungen

teamsync Kurzanleitung

Wordpress: Blogbeiträge richtig löschen, archivieren und weiterleiten

Informatik Grundlagen, WS04, Seminar 13

affilinet_ Flash-Spezifikationen

Südbaden-Cup. Ausstieg Champions

Abschlussprüfung Realschule Bayern II / III: 2009 Haupttermin B 1.0 B 1.1

Warum Sie dieses Buch lesen sollten

Wie man Registrationen und Styles von Style/Registration Floppy Disketten auf die TYROS-Festplatte kopieren kann.

Die reellen Lösungen der kubischen Gleichung

WinVetpro im Betriebsmodus Laptop

Zwischenablage (Bilder, Texte,...)

Tangentengleichung. Wie lautet die Geradengleichung für die Tangente, y T =? Antwort:

OECD Programme for International Student Assessment PISA Lösungen der Beispielaufgaben aus dem Mathematiktest. Deutschland

Rundung und Casting von Zahlen

SMS/ MMS Multimedia Center

ONLINE-AKADEMIE. "Diplomierter NLP Anwender für Schule und Unterricht" Ziele

Beweisbar sichere Verschlüsselung

Mit dem Tool Stundenverwaltung von Hanno Kniebel erhalten Sie die Möglichkeit zur effizienten Verwaltung von Montagezeiten Ihrer Mitarbeiter.

Österreichische Trachtenjugend

Was ist das Budget für Arbeit?

Formale Systeme, WS 2012/2013 Lösungen zu Übungsblatt 4

VibonoCoaching Brief -No. 18

Probleme beim Arbeiten mit Variablen, Termen und Gleichungen

Transkript:

Grundlagen der Künstlichen Intelligenz 22. Constraint-Satisfaction-Probleme: Kantenkonsistenz Malte Helmert Universität Basel 14. April 2014

Constraint-Satisfaction-Probleme: Überblick Kapitelüberblick Constraint-Satisfaction-Probleme: 19. 20. Einführung 21. 23. Kernalgorithmen 21. Backtracking 22. Kantenkonsistenz 23. Pfadkonsistenz 24. 25. Problemstruktur

Inferenz

Inferenz Inferenz Herleiten zusätzlicher Constraints (hier: unär oder binär), die aus den bekannten Constraints logisch folgen, d. h. in allen Lösungen erfüllt sind. Beispiel: Constraint-Netz mit Variablen v 1, v 2, v 3 mit Wertebereich {1, 2, 3} und Constraints v 1 < v 2 und v 2 < v 3. Wir können beispielsweise folgern: v 2 kann nicht 3 sein (neuer unärer Constraint = Einschränkung des Wertebereichs von v 2 ) R v1 v 2 = { 1, 2, 1, 3, 2, 3 } kann verschärft werden zu { 1, 2 } (verschärfter binärer Constraint) v 1 < v 3 ( neuer binärer Constraint = trivialer Constraint verschärft)

Trade-off Suche vs. Inferenz Inferenz formal Inferenz ist Ersetzen des gegebenen Constraint-Netzes durch ein schärferes äquivalentes Netz. Trade-off: je komplexer die Inferenz ist und je häufiger sie angewendet wird, desto weniger Suchknoten müssen durchsucht werden, aber desto mehr Zeitaufwand wird pro Suchknoten benötigt

Wo Inferenz verwenden? Unterschiedliche Verwendungsmöglichkeiten für Inferenz: einmalig als Vorverarbeitung vor der Suche mit Suche kombiniert: bei jedem rekursiven Aufruf der Backtracking-Prozedur bereits belegte Variablen v d können wie dom(v) = {d} verstanden werden mehr Schlussfolgerungen möglich bei Backtracking müssen Verschärfungen durch Inferenz zurückgenommen werden, da sie die gegebene Belegung als Voraussetzung hatten mächtig, aber eventuell teuer

Backtracking mit Inferenz function BacktrackingWithInference(C, α): if α is inconsistent with C: return inconsistent if α is a total assignment: return α C := V, dom, (R uv ) := copy of C apply inference to C if dom (v) for all variables v: select some variable v for which α is not defined for each d copy of dom (v) in some order: α := α {v d} dom (v) := {d} α := BacktrackingWithInference(C, α ) if α inconsistent: return α return inconsistent

Backtracking mit Inferenz function BacktrackingWithInference(C, α): if α is inconsistent with C: return inconsistent if α is a total assignment: return α C := V, dom, (R uv ) := copy of C apply inference to C if dom (v) for all variables v: select some variable v for which α is not defined for each d copy of dom (v) in some order: α := α {v d} dom (v) := {d} α := BacktrackingWithInference(C, α ) if α inconsistent: return α return inconsistent

Backtracking mit Inferenz: Diskussion inference ist ein Platzhalter: verschiedene Inferenzmethoden können eingesetzt werden Inferenzmethode kann Unlösbarkeit (gegeben α) erkennen und durch Leeren eines Wertebereichs signalisieren effizient implementierte Inferenz oft inkrementell: zuletzt belegtes Paar v d wird mitgeteilt und verwendet, um die Berechnung zu beschleunigen

Forward Checking

Forward Checking Wir beginnen mit einer sehr einfachen Inferenz-Methode: Forward Checking Inferenz: Entferne alle Variablen-/Werte-Paare aus dom, die mit bereits belegten Paaren im Konflikt stehen. Definition von Konflikt im vorigen Kapitel Inkrementelle Berechnung: Immer, wenn v d zur Belegung hinzugefügt wird, entferne alle mit v d im Konflikt stehenden Paare.

Forward Checking: Diskussion Eigenschaften von Forward Checking: korrekte Inferenzmethode (erhält Äquivalenz) beeinflusst Wertebereiche (= unäre Constraints), aber nicht die binären Constraints macht Konsistenztest am Anfang der Backtracking-Prozedur überflüssig (Warum?) billige, aber dennoch oft nützliche Inferenz-Methode selten eine gute Idee, nicht mindestens Forward Checking zu verwenden Im Folgenden betrachten wir mächtigere Inferenzmethoden.

Kantenkonsistenz

Kantenkonsistenz: Definition Definition (kantenkonsistent) Sei C = V, dom, (R uv ) ein Constraint-Netz. (a) Eine Variable v V ist kantenkonsistent in Bezug auf eine andere Variable v V, wenn für jeden Wert d dom(v) ein Wert d dom(v ) mit d, d R vv existiert. (b) Das Constraint-Netz C ist kantenkonsistent, wenn jede Variable v V kantenkonsistent in Bezug auf jede andere Variable v V ist. Anmerkungen: Definition für Variablenpaare ist asymmetrisch v immer kantenkonsistent in Bezug auf v, wenn Constraint zwischen v und v trivial ist

Kantenkonsistenz: Beispiel Betrachte ein Constraint-Netz mit Variablen v 1 und v 2, Wertebereichen dom(v 1 ) = dom(v 2 ) = {1, 2, 3} und dem durch v 1 < v 2 beschriebenen Constraint. 1 1 2 2 v 1 v 2 3 3 Kantenkonsistenz von v 1 in Bezug auf v 2 und von v 2 in Bezug auf v 1 ist verletzt.

Herstellen von Kantenkonsistenz Herstellen von Kantenkonsistenz, d. h. Entfernen von Werten aus dom(v), die die Kantenkonsistenz von v in Bezug auf v verletzen, ist eine korrekte Inferenzmethode. (Warum?) mächtiger als Forward Checking (Warum?) Im Folgenden betrachten wir Algorithmen zum Herstellen von Kantenkonsistenz.

Verarbeitung eines einzelnen Variablenpaars: revise function revise(c, v, v ): V, dom, (R uv ) := C for each d dom(v): if there is no d dom(v ) with d, d R vv : remove d from dom(v) Eingabe: Constraint-Netz C und zwei Variablen v, v von C Effekt: Macht v kantenkonsistent in Bezug auf v. Alle verletzenden Werte werden aus dom(v) entfernt. Zeitaufwand: O(k 2 ), wenn k maximale Wertebereichsgrösse (geeignete Kodierung von (R uv ) und dom vorausgesetzt)

Beispiel: revise 1 1 2 2 v v 3 3

Beispiel: revise 1 1 2 2 v v 3 3

Beispiel: revise 1 1 2 2 v v 3 3

Beispiel: revise 1 1 2 2 v v 3 3

Beispiel: revise 1 1 2 2 v v 3

Herstellen von Kantenkonsistenz: AC-1 function AC-1(C): V, dom, (R uv ) := C repeat for each nontrivial constraint R uv : revise(c, u, v) revise(c, v, u) until no domain has changed in this iteration Eingabe: Constraint-Netz C Effekt: transformiert C in äquivalentes kantenkonsistentes Netz Zeitaufwand:?

Herstellen von Kantenkonsistenz: AC-1 function AC-1(C): V, dom, (R uv ) := C repeat for each nontrivial constraint R uv : revise(c, u, v) revise(c, v, u) until no domain has changed in this iteration Eingabe: Constraint-Netz C Effekt: transformiert C in äquivalentes kantenkonsistentes Netz Zeitaufwand: O(n e k 3 ), wenn n Variablen, e nichttriviale Constraints und k maximale Wertebereichsgrösse

AC-1: Diskussion AC-1 erfüllt seine Aufgabe, ist aber ineffizient. Oft werden Variablenpaare wieder und wieder überprüft, deren Wertebereiche sich nicht geändert haben. Diese Überprüfungen können eingespart werden. effizienterer Algorithmus: AC-3

Herstellen von Kantenkonsistenz: AC-3 Idee: merke potenziell inkonsistente Variablenpaare in Queue function AC-3(C): V, dom, (R uv ) := C queue := for each nontrivial constraint R uv : insert u, v into queue insert v, u into queue while queue : remove an arbitrary element u, v from queue revise(c, u, v) if dom(u) changed in the call to revise: for each w V \ {u, v} where R wu is nontrivial: insert w, u into queue

AC-3: Diskussion queue kann eine beliebige Datenstruktur sein, die Einfügen und Entfernen erlaubt (Reihenfolge des Entfernens ist für Ergebnis egal) effizient z. B. ein Stack AC-3 hat denselben Effekt wie AC-1: es stellt Kantenkonsistenz her Beweisidee: Invariante der while-schleife: Wenn u, v / queue, dann u kantenkonsistent in Bezug auf v

AC-3: Zeitaufwand Satz (Zeitaufwand von AC-3) Sei C ein Constraint-Netz mit e nichttrivialen Constraints und maximaler Wertebereichsgrösse k. Dann läuft AC-3 in Zeit O(e k 3 ).

AC-3: Zeitaufwand (Beweis) Beweis. Betrachte ein Paar u, v, für das ein nichttrivialer Constraint R uv oder R vu existiert. (Es gibt maximal 2e viele solche Paare.) Jedes Mal, wenn das Paar in die Queue eingefügt wird (ausser beim ersten Mal), wurde zuvor der Wertebereich der zweiten beteiligten Variable reduziert. Das kann höchstens k mal passieren. Damit wird jedes Paar u, v höchstens k + 1 mal in die Queue eingefügt insgesamt höchstens O(ek) Einfügeoperationen. Dies begrenzt die Zahl der while-iterationen auf O(ek), so dass die revise-aufrufe höchstens Zeit O(ek) O(k 2 ) = O(ek 3 ) benötigen.

AC-3: Zeitaufwand (Beweis) Beweis. Betrachte ein Paar u, v, für das ein nichttrivialer Constraint R uv oder R vu existiert. (Es gibt maximal 2e viele solche Paare.) Jedes Mal, wenn das Paar in die Queue eingefügt wird (ausser beim ersten Mal), wurde zuvor der Wertebereich der zweiten beteiligten Variable reduziert. Das kann höchstens k mal passieren. Damit wird jedes Paar u, v höchstens k + 1 mal in die Queue eingefügt insgesamt höchstens O(ek) Einfügeoperationen. Dies begrenzt die Zahl der while-iterationen auf O(ek), so dass die revise-aufrufe höchstens Zeit O(ek) O(k 2 ) = O(ek 3 ) benötigen.

AC-3: Zeitaufwand (Beweis) Beweis. Betrachte ein Paar u, v, für das ein nichttrivialer Constraint R uv oder R vu existiert. (Es gibt maximal 2e viele solche Paare.) Jedes Mal, wenn das Paar in die Queue eingefügt wird (ausser beim ersten Mal), wurde zuvor der Wertebereich der zweiten beteiligten Variable reduziert. Das kann höchstens k mal passieren. Damit wird jedes Paar u, v höchstens k + 1 mal in die Queue eingefügt insgesamt höchstens O(ek) Einfügeoperationen. Dies begrenzt die Zahl der while-iterationen auf O(ek), so dass die revise-aufrufe höchstens Zeit O(ek) O(k 2 ) = O(ek 3 ) benötigen.

AC-3: Zeitaufwand (Beweis) Beweis. Betrachte ein Paar u, v, für das ein nichttrivialer Constraint R uv oder R vu existiert. (Es gibt maximal 2e viele solche Paare.) Jedes Mal, wenn das Paar in die Queue eingefügt wird (ausser beim ersten Mal), wurde zuvor der Wertebereich der zweiten beteiligten Variable reduziert. Das kann höchstens k mal passieren. Damit wird jedes Paar u, v höchstens k + 1 mal in die Queue eingefügt insgesamt höchstens O(ek) Einfügeoperationen. Dies begrenzt die Zahl der while-iterationen auf O(ek), so dass die revise-aufrufe höchstens Zeit O(ek) O(k 2 ) = O(ek 3 ) benötigen.

AC-3: Zeitaufwand (Beweis) Beweis. Betrachte ein Paar u, v, für das ein nichttrivialer Constraint R uv oder R vu existiert. (Es gibt maximal 2e viele solche Paare.) Jedes Mal, wenn das Paar in die Queue eingefügt wird (ausser beim ersten Mal), wurde zuvor der Wertebereich der zweiten beteiligten Variable reduziert. Das kann höchstens k mal passieren. Damit wird jedes Paar u, v höchstens k + 1 mal in die Queue eingefügt insgesamt höchstens O(ek) Einfügeoperationen. Dies begrenzt die Zahl der while-iterationen auf O(ek), so dass die revise-aufrufe höchstens Zeit O(ek) O(k 2 ) = O(ek 3 ) benötigen.

AC-3: Beispiel Betrachte Constraint-Netz mit drei Variablen v 1, v 2, v 3 mit dom(v 1 ) = {2, 4} und dom(v 2 ) = dom(v 3 ) = {2, 5} sowie den Constraints v 3 v 1 und v 3 v 2 ( teilt ). v 3 2,5 v 1 2,4 2,5 v 2 Queue (v 1, v 3 ) (v 3, v 1 ) (v 2, v 3 ) (v 3, v 2 )

AC-3: Beispiel Betrachte Constraint-Netz mit drei Variablen v 1, v 2, v 3 mit dom(v 1 ) = {2, 4} und dom(v 2 ) = dom(v 3 ) = {2, 5} sowie den Constraints v 3 v 1 und v 3 v 2 ( teilt ). v 3 2,5 v 1 2,4 2,5 v 2 Queue (v 1, v 3 ) (v 3, v 1 ) (v 2, v 3 ) (v 3, v 2 )

AC-3: Beispiel Betrachte Constraint-Netz mit drei Variablen v 1, v 2, v 3 mit dom(v 1 ) = {2, 4} und dom(v 2 ) = dom(v 3 ) = {2, 5} sowie den Constraints v 3 v 1 und v 3 v 2 ( teilt ). v 3 2,5 v 1 2,4 2,5 v 2 Queue (v 1, v 3 ) (v 3, v 1 ) (v 2, v 3 )

AC-3: Beispiel Betrachte Constraint-Netz mit drei Variablen v 1, v 2, v 3 mit dom(v 1 ) = {2, 4} und dom(v 2 ) = dom(v 3 ) = {2, 5} sowie den Constraints v 3 v 1 und v 3 v 2 ( teilt ). v 3 2,5 Queue (v 1, v 3 ) (v 3, v 1 ) v 1 2,4 2,5 v 2

AC-3: Beispiel Betrachte Constraint-Netz mit drei Variablen v 1, v 2, v 3 mit dom(v 1 ) = {2, 4} und dom(v 2 ) = dom(v 3 ) = {2, 5} sowie den Constraints v 3 v 1 und v 3 v 2 ( teilt ). v 3 2 Queue (v 1, v 3 ) v 1 2,4 2,5 v 2

AC-3: Beispiel Betrachte Constraint-Netz mit drei Variablen v 1, v 2, v 3 mit dom(v 1 ) = {2, 4} und dom(v 2 ) = dom(v 3 ) = {2, 5} sowie den Constraints v 3 v 1 und v 3 v 2 ( teilt ). v 3 2 Queue (v 1, v 3 ) (v 2, v 3 ) v 1 2,4 2,5 v 2

AC-3: Beispiel Betrachte Constraint-Netz mit drei Variablen v 1, v 2, v 3 mit dom(v 1 ) = {2, 4} und dom(v 2 ) = dom(v 3 ) = {2, 5} sowie den Constraints v 3 v 1 und v 3 v 2 ( teilt ). v 3 2 Queue (v 1, v 3 ) (v 2, v 3 ) v 1 2,4 2,5 v 2

AC-3: Beispiel Betrachte Constraint-Netz mit drei Variablen v 1, v 2, v 3 mit dom(v 1 ) = {2, 4} und dom(v 2 ) = dom(v 3 ) = {2, 5} sowie den Constraints v 3 v 1 und v 3 v 2 ( teilt ). v 3 2 Queue (v 1, v 3 ) v 1 2,4 2 v 2

AC-3: Beispiel Betrachte Constraint-Netz mit drei Variablen v 1, v 2, v 3 mit dom(v 1 ) = {2, 4} und dom(v 2 ) = dom(v 3 ) = {2, 5} sowie den Constraints v 3 v 1 und v 3 v 2 ( teilt ). v 3 2 Queue (v 1, v 3 ) v 1 2,4 2 v 2

AC-3: Beispiel Betrachte Constraint-Netz mit drei Variablen v 1, v 2, v 3 mit dom(v 1 ) = {2, 4} und dom(v 2 ) = dom(v 3 ) = {2, 5} sowie den Constraints v 3 v 1 und v 3 v 2 ( teilt ). v 3 2 Queue v 1 2,4 2 v 2

Zusammenfassung

Zusammenfassung: Inferenz Inferenz: Herleiten zusätzlicher Constraints, die aus den bekannten Constraints logisch folgen schärferes äquivalentes Constraint-Netz Trade-off Suche vs. Inferenz Inferenz als Vorverarbeitung oder Integration in Backtracking

Zusammenfassung: Forward Checking, Kantenkonsistenz billige und einfache Inferenz: Forward Checking entferne Werte, die zu belegten Werten in Konflikt stehen teurer und mächtiger: Kantenkonsistenz entferne wiederholt Werte, die keinen passenden Partner bei einer anderen Variable haben, bis Fixpunkt erreicht effiziente Implementierung über AC-3: O(ek 3 ) mit e: #nichttriviale Constraints, k: Wertebereichsgrösse