Um ein Puzzle mit dem Computer lösen zu können, benötigen wir Programm, das eine Lösung (oder alle Lösungen) für dieses Puzzle erzeugt. Leider können wir oft kein fertiges Programm für diesen Zweck finden und müssen selbst programmieren. Ganz einfach ist das nicht, da für eine Lösung eines Puzzles häufig extrem viele Positionen untersucht werden müssen. Diese Zahl ist oft so groß, dass ein einfaches Durchprobieren aller Möglichkeiten zwar zum Ziel führen würde, aber viel zu lange dauert. Deshalb benötigt man weitere clevere Algorithmen wie Backtracking, um das vollständige Durchprobieren drastisch abzukürzen. Dadurch wird die Bearbeitungszeit akzeptabel, aber der Programmieraufwand steigt, da das abstrakte Backtracking an das vorliegende Puzzle angepasst werden muss.
Wünschenswert wäre es doch, statt der Programmierarbeit das Puzzle nur mit abstrakten Mitteln zu beschreiben. Kann es für solch eine abstrakte Beschreibung ein allgemeines Lösungsverfahren geben? Die Antwort ist 'ja' und damit kommen wir zu SAT- / SMT-Solvern.
SAT- / SMT-Solver
SAT- / SMT-Solver sind sehr mächtige Werkzeuge, die sich für viele Probleme in der Informatik einsetzen lassen. Lösungen für Geduldspiele sind hier hier nur ein Nebenprodukt.
Die Aufgabe eines SAT- / SMT-Solvers besteht darin, für eine gegebene mathematische Formel festzustellen, ob sie eine Lösung besitzt und diese anzugeben. Bei einem SAT-Solver muss es sich um eine aussagenlogische Formel handeln wie (x ∨ ¬y) ∧ (¬x ∨ y ∨ z) ∧ ¬x, bei SMT-Solvern sind zusätzlich einige weitere Formeltypen wie arithmetische Gleichungen (wie u=3*v) oder Ungleichungen (wie u+v<10) möglich. Der genaue Umfang möglicher Formeln hängt vom jeweiligen SMT-Solver ab. Die Beschreibung der Problemstellung (hier also des Geduldspiels) wird recht einfach, und um den Lösungsweg, mit dem der SAT- / SMT-Solver seine Lösung findet, müssen wir uns keine Gedanken machen, dies passiert völlig automatisch. Intern werden wieder Backtracking und ähnliche Verfahren angewendet, aber darum müssen wir uns nicht mehr kümmern.
So viele Vorteile gibt es allerdings nicht ohne Nachteile: Das allgemeine Lösungsverfahren eines SAT- / SMT-Solvers arbeitet langsamer als ein problemangepasstes Backtracking, wir werden also keine rekordverdächtig großen Puzzles mit minimalem Programmieraufwand lösen können. Aber an der Weiterentwicklung von SAT- / SMT-Solvern wird weltweit gearbeitet, so dass demnächst ihre Geschwindigkeit steigt.
Beschreibung von quadratischen 3x3-Legespielen für einen SMT-Solver
Wie lässt sich ein Legespiel mit derartigen Formeln beschreiben? Hier sollen zumindest verbale Beschreibungen für diese Formeln gegeben werden. Dazu betrachten wir die üblichen 3x3-Legespiele, bei denen neun quadratische Karten zu einem 3x3-Quadrat gelegt werden sollen, so dass immer passende Kanten aufeinandertreffen.
Wir können das Spiel wie folgt beschreiben:
- Das Spiel besteht aus neun vorgegebenen Karten mit je vier Kanten.
- Die Kanten der Karten haben je einen Namen (z.B. "brauner Hund, Kopf")
- Dazu gibt es einen zunächst leeren Rahmen mit sieben Positionen, der die Karten aufnehmen soll.
- Die Positionen sind durchnummeriert und die Kanten an jeder Position haben jeweils Variablen für Farbe und Körperteil. Legt man eine Karte an eine Position, übernehmen diese Variablen die Werte (d.h. Farbe und Körperteil) von den Kanten dieser Karte.
- Jede Karte hat vier mögliche Orientierungen, darf also mehrfach um 90 Grad gedreht werden.
- Jede Karte wird an eine Position im Rahmen gelegt. Daraus ergeben sich die Farben und Körperteile an den Kanten der Positionen im Rahmen.
- Die Positionen der Karten sind alle verschieden. (Damit wird erreicht, dass keine zwei Karten übereinanderliegen und alle Positionen im Rahmen belegt werden)
- Gemeinsame Kanten benachbarter Positionen haben zueinander passende Namen, (z.B. "brauner Hund, Kopf" und "brauner Hund, Schwanz"). Es gibt 12 derartige Paare benachbarter Kanten, daraus entstehen jeweils 12 Bedingungen für gleiche Farben und unterschiedliche Körperteile.
- Dreieckige oder sechseckige Karten statt quadratischer Karten.
- Die Karten dürfen nicht gedreht werden.
- Die Karten tragen auf der Rückseite die gleichen Bilder und dürfen zusätzlich gewendet werden.
- Corner Matching statt Edge Matching.
Keine Kommentare:
Kommentar veröffentlichen