Forschungsbericht 2015 - Max-Planck-Institut für Informatik

Unlösbares Lösen

Solving the Unsolvable

Autoren
Weidenbach, Christoph
Abteilungen
Automation of Logic
Zusammenfassung
Eine der erfolgreichsten Strategien für das Lösen harter Probleme ist das „Lernen aus Konflikten”. Durch geschicktes Raten unter Beachtung lokaler Einschränkungen wird entweder eine Gesamtlösung berechnet oder ein Konflikt erzeugt. Aus dem Konflikt lassen sich dann effizient weitere Einschränkungen herleiten. „Lernen aus Konflikten” hat zur erheblichen Steigerung der Performanz allgemeiner Lösungsverfahren und damit z. B. dazu geführt, dass sich die automatische Verifikation von Computerhardware von einer akademischen Disziplin zu einem Industriestandard entwickelt hat.
Summary
"Learning from Conflicts" is one of the most important strategies for solving computationally hard problems. By guessing a solution that respects local constraints either an overall solution is obtained or a conflict. A conflict can be efficiently turned into further constraints for the problem. "Learning from Conflicts" has pushed the performance of computer programs on hard problems to a new level. For example, automatic verification of computer hardware has turned from an academic discipline into an industry standard.

In der Informatik gilt ein Problem als hart, oder im Allgemeinen als unlösbar, wenn es keinen auf dem Computer ausführbaren Algorithmus gibt, der eine beliebige Instanz des Problems in einer Laufzeit polynomial in der Größe des Problems lösen kann. Die Laufzeit eines Algorithmus ist polynomial in der Größe des Problems, wenn sich ein für alle Probleminstanzen fixes Polynom in einer Variable der Problemgröße angeben lässt, das die maximale Anzahl von Schritten zur Lösung nach oben begrenzt.

Das Sortieren einer Liste ist kein hartes Problem. Eine Liste von n Zahlen kann in höchstens n*log n Schritten, also polynomial in der Größe n, mithilfe eines Computers sortiert werden. Um herauszufinden, ob eine Liste von n Zahlen sortiert ist, bedarf es höchstens n Schritte. Das Lösen eines Sudoku ist ein hartes Problem. Es gibt bis heute kein Verfahren, das ein beliebiges Sudoku mit der Kantenlänge n in einer polynomialen Anzahl von Schritten in n löst, oder herausfindet, dass es keine Lösung gibt.

Eine Unterklasse der harten Probleme sind die sogenannten NP-vollständigen Probleme, für die man zwar keinen polynomialen Algorithmus zur Berechnung einer Lösung kennt, aber für die sich in polynomial vielen Schritten überprüfen lässt, ob eine gegebene potenzielle Lösung auch tatsächlich eine Lösung ist. Ist ein vollständig ausgefülltes Sudoku der Kantenlänge n gegeben, dann müssen maximal die Einträge der n×n Felder überprüft werden, um herauszufinden, ob das Sudoku gelöst ist. Sudoku gehört somit zu der Klasse der NP-vollständigen Probleme. Die Klasse der NP-vollständigen Probleme enthält viele praktisch relevanten Probleme: die Planung einer entfernungsoptimalen Rundreise durch n Städte, der Beweis, dass ein Computerprozessor korrekt arbeitet, das konkrete Dechiffrieren einer Nachricht ohne Kenntnis des Schlüssels, oder die optimale Planung einer Produktionsstraße.

Allgemeine Verfahren zur Lösung von harten Problemen haben inzwischen eine Qualität erreicht, die es ermöglicht, praktisch relevante Instanzen NP-vollständiger Probleme in akzeptabler Zeit zu lösen. So beweisen heute alle Hersteller von Computerprozessoren die Korrektheit ihres Entwurfs, wenn auch mit Unterstützung durch den Menschen, der das Problem im Wesentlichen noch in „computerverdauliche Happen” zerteilt und diese dann wieder zusammensetzt.

Ein Grundprinzip, das zum rasanten Performanzanstieg der allgemeinen Verfahren geführt hat, ist das „Lernen aus Konflikten”. Raten wir in der ersten Zeile des 4×4-Sudokus (Abb. 1) die Werte 1 und 3, dann muss der letzte Wert in der Zeile die 4 sein und der dritte Wert der letzten Spalte die 3, weil eine 1 wegen der bereits vorhandenen 1 in der entsprechenden Zeile verboten ist (Abb. 2). In der letzten Spalte fehlt nur noch der Wert 1, der jedoch nicht im Feld unten rechts stehen darf, weil im zugehörigen Block bereits der Wert 1 steht – ein Konflikt. Dieser Konflikt kam durch das Raten der Werte 1 und 3 in der ersten Zeile und die nachfolgende konsequente Anwendung der jeweils einzeln betrachteten Sudoku-Regeln auf die letzte Spalte zustande. Daraus lässt sich für das konkrete Sudoku die Regel lernen:

„Wenn im ersten Feld der Wert 1 steht, dann kann das dritte Feld der Zeile nicht den Wert 3 haben.”

Diese Information lässt sich nicht in Form eines Sudokus repräsentieren. Tatsächlich wird das Sudoku-Problem deshalb erst in eine logische Formel übersetzt, die eine Lösungsfunktion f kodiert. Für jedes Feld bedarf es einer Gleichung f(x,y) = z, die genau dann wahr ist, wenn im Feld der Zeile x und Spalte y der Wert z in der Lösung steht.

Für obiges Sudoku (Abb. 1) ergibt sich somit initial: „f(1,2) = 2 und f(2,4) = 2 und f(3,3) = 1 und f(4,2) = 3”. Die Sudoku-Regeln können dann als Formeln über diesen Gleichungen und den logischen Operatoren wenn dann”, und”, oder” und nicht” formuliert werden. Zum Beispiel für das Quadrat unten rechts:

„Wenn f(3,3) = 1, dann f(3,4) ≠ 1 und f(4,3) ≠ 1 und f(4,4) ≠ 1”.

Die Formel besagt, dass die Felder (3,4), (4,3) und (4,4) nicht den Wert 1 enthalten dürfen, wenn das Feld (3,3) schon den Wert 1 enthält. Jetzt lässt sich auch die oben gelernte Regel als Formel repräsentieren:

„Wenn f(1,1) = 1, dann f(1,3) ≠ 3.”

Die gelernte Formel ist ein großer Fortschritt gegenüber den initialen Sudoku-Regeln. Diese Regeln formulieren Einschränkungen für genau vier Felder, z. B. „In jeder Zeile kommt jeder Wert von 1 bis 4 genau einmal vor”. Die gelernte Regel ist eine Einschränkung für nur noch zwei Felder.

Eine etwas genauere Analyse des Sudokus (Abb. 1) ergibt, dass das letzte Feld der ersten Zeile den Wert 1 haben muss. Grund dafür ist der Wert 1 im Feld (3,3) und das bereits mit Wert 2 belegte Feld (2,4). Das spiegelt sich auch in der eindeutigen Lösung des Sudokus wider (Abb. 3). Diese Vorgehensweise zur Lösung ist für uns Menschen typisch. Mit etwas Sudoku-Lösungserfahrung „sehen” wir solche Konsequenzen. Verglichen mit dem „Lernen aus Konflikten” hat diese Vorgehensweise zwei entscheidende Nachteile, wenn sie mit dem Computer berechnet werden soll. Zum einen ist sie teuer. Die Kombination des Wertes 1 in Feld (3,3) mit dem Wert 2 im Feld (2,4) und den zugehörigen Sudoku-Regeln für die Spalte und das Quadrat unten rechts bedeutet, dass alle Kombinationen aus zweimal vier Feldern betrachtet werden müssen. Die Betrachtung aller Kombinationen benötigt quadratisch viele Schritte in der Kantenlänge des Sudokus. Für das Feld (3,3) muss dabei nicht nur die Kombination mit der letzten Spalte, sondern auch die Kombination mit der vorletzten und den untersten beiden Zeilen betrachtet werden, weil alle diese Spalten und Zeilen Felder mit dem Quadrat um das Feld (3,3) gemeinsam haben. Zum anderen ist sie nicht immer erfolgreich. Das Betrachten des Wertes 3 in Feld (1,2) des Sudokus in Abbildung 4, führt nicht zur Bestimmung eines weiteren Wertes für ein anderes Feld.

Im Gegensatz dazu ist das „Lernen aus Konflikten” günstig und immer erfolgreich. Es ist immer erfolgreich, weil die Kombination aus dem Raten von Werten und der Ausnutzung einzelner Sudoku-Regeln oder gelernter Regeln entweder eine Lösung produziert, oder einen Konflikt aus dem wieder eine Regel gelernt werden kann. Es ist günstig, weil das Raten von Werten in einem Schritt realisiert werden kann und die Überprüfung einer einzelnen Regel die Betrachtung von maximal 4 Feldern erfordert und somit in linear vielen Schritten abhängig von der Kantenlänge durchgeführt werden kann.

Es ist sogar möglich, zu beweisen, dass die durch „Lernen aus Konflikten” gelernte Regel generell immer neu ist. Das heißt, ihre Aussage wurde bisher noch nicht hergeleitet. Dieses Resultat ist umso erstaunlicher, da im Allgemeinen der Test, ob eine gegebene Regel für ein Sudoku gilt, auch ein hartes Problem ist, also genauso hart wie das Finden einer Lösung.

In Experimenten zeigt sich, dass das „Lernen aus Konflikten” selbst ein effizienter Algorithmus ist, um das oben beschriebene menschliche Lösungsverhalten zu simulieren. Die beiden nächsten, durch „Lernen aus Konflikten” hergeleiteten gelernten Regeln für das Sudoku in Abbildung 1 sind:

„Wenn im ersten Feld der Wert 1 steht, dann kann das dritte Feld der Zeile nicht den Wert 4 haben.”

„Das erste Feld kann nicht den Wert 1 haben.”

Das Lernen aus Konflikten ist inzwischen als Designprinzip für Algorithmen zur Lösung harter Probleme etabliert. Für viele dieser Probleme, z. B. für die propositionale Erfüllbarkeit (SAT) oder das Lösen von Polynomgleichungssystemen über den reellen Zahlen, gibt es praktisch erfolgreiche Instanzen dieses Designprinzips. Es gibt aber auch Probleme, bei denen wir noch nicht wissen, wie das Designprinzip erfolgreich einzusetzen ist. Ein Beispiel ist das Lösen von linearen Ungleichungssystemen über den ganzen Zahlen.

Literaturhinweise

Weidenbach, C.
Automated Reasoning Building Blocks
Correct System Design, Lecture Notes in Computer Science 9360, 172–188 (2015)
Lynce, I.; Ouaknine, J.
Sudoku as a SAT Problem
International Symposium on Artificial Intelligence and Mathematics, Ford Lauderdale, Florida, USA; January 4–6, 2006
Biere, A.; Heule, M.; van Maaren, H.; Walsh, T.
Handbook of Satisfiability
Frontiers in Artificial Intelligence and Applications 185, IOS Press, The Netherlands (2009)
Papadimitriou, C. H.
Computational complexity
Addison-Wesley (1994)
Zur Redakteursansicht