Kakuro (oder auch Cross Sums) ist ein altes Logikrätsel aus Japan. In vielen Zeitschriften, in denen Sudokus oder Kreuzworträtsel veröffentlicht werden sind auch Kakuro Rätsel zu finden. In der heutigen Zeit kann man außerdem auch ganz entspannt online auf Platformen wie zum Beispiel auf Janko an Kakuros, in verschiedenen Größen und Schwierigkeitsstufen, knobeln.
Kakuro ist sehr einfach gehalten, es gibt nur drei Regeln:
Ein Kakuro Puzzel ist dabei immer eindeutig lösbar.
Das Problem der Kakuro Puzzel wurde in The Computational Complexity of the Kakuro Puzzle, Revisited [2] als NP-Komplett bewiesen. Damit werden die Kakuro Rätsel für Informatiker umso spannender. Wir wollen uns im Weiteren damit beschäftigen, wie wir trotz der Komplexität einen effizienten Lösungsweg entwickeln können.
Der simple Aufbau und den einzigen drei Regeln machen die Kakuro Puzzel sehr geeignet, um sie als Constraint Satisfaction Problem zu modellieren und mit Constraint Programming effizient eine Lösung zu suchen. Die Grundlagen des Constraint Programming werden auf der Wiki-Seite für Constraint Programming erklärt.
Zuerst wollen wir ein Kakuro Puzzel als ein Paar von zwei Mengen definieren . Die Menge:
stellt die Menge der weißen, zu befüllenden, Felder dar. Die Menge:
definiert die durch die schwarzen Felder vorgegebenen Summen. Dabei gibt den Wert der Summe und den Block über den die Summe geht vor.
Kakuro, mit einem x Spielfeld als Constraint Satisfaction Problem, wie im angegben Wiki als Tripel , zu modellieren definieren wir die Mengen der:
Die Regel, dass alle weißen Felder mit Zahlen zwischen 1 und 9 belegt werden können haben wir schon durch die Domänen defieniert. Die weiten zwei Regeln wollen wir durch folgenden zwei Constraints definieren:
ist dabei ein globaler Constraint, welches die meisten Constraint Solver von besitzen und wie der name schon beschreibt modelliert, dass alle Werte der gegeben Menge eindeutig seien müssen:
Mit dieser Definition haben wir ein Constraint Satisfaction Problem modelliert und können nun mit dem Suchalgorithmus eines Constraint Solver auf effizienter Weise eine Lösungsmenge suchen.
In Kakuro as a constraint problem[3:1] wird ein Kakuro Puzzel wie oben beschrieben in der Constraint Logic Programming Plattform ECLiPSe[4] als Constraint Satisfaction Problem modelliert und gegen verschieden Mengen an Kakuro Puzzeln getestet.
Schema:
Set: Getestetes Set an Puzzel
X, Y: Größe der Puzzel
K: Größe des Set
Setup: Prozent der nach dem Setup gelösten Puzzel
Shave: Prozent der nach dem Shaving gelösten Puzzel
Total: Prozent der gelösten Puzzel - begrenzt auf 500.000 Knoten in der Suche
Avg Time: Durchnittliche gebrauchte Zeit
Max Time: Maximal gebrauchte Zeit
Avg Back: Durchschnittlich gebrauchte Backtracking-Schritte
Max Back: Maximal gebrauchte Backtracking-Schritte
n/a: Es gab kein erfolgreichen Durchlauf
Im ersten Durchlauf wurde ein reiner Backtracking-Algorithmus ohne jegliche Optimierung genutzt. Es wird deutlich, dass dieser Ansatz nicht effizient ist und für viele größeren Puzzel gar keine Löung innerhalb der Grenze gefunden wird.
Im zweiten Durchlauf wird die Suche durch die Domänreduktion des Forward Checking genutzt, wodurch der Suchbaum stark reduziert wird und eine deutliche Steigerung in der Effizienz erreicht wird. Bis auf das größte Kakuro wird nun für alle Puzzeln eine Lösung gefunden.
Im dritten Durchlauf wird das globale Constraint genutzt, um wie es im MAC Algorithmus beschrieben wird die Domänen weiter zu reduzieren. Damit können nun alle Puzzel gelöst werden und - bis auf das gößte - auch extrem effizient.
Janko, Karl. Kakuro Rätsel. Janko.at, https://www.janko.at/Raetsel/Kakuro/index.htm. Zugriff am [22.01.2025]. ↩︎ ↩︎ ↩︎
Ruepp, Oliver, und Markus Holzer. „The Computational Complexity of the Kakuro Puzzle, Revisited“. Fun with Algorithms, herausgegeben von Paolo Boldi und Luisa Gargano, Bd. 6099, Springer Berlin Heidelberg, 2010, S. 319–30. DOI.org (Crossref), https://doi.org/10.1007/978-3-642-13122-6_31. ↩︎
Simonis, Helmut. "Kakuro as a constraint problem." Proc. seventh Int. Works. on Constraint Modelling and
Reformulation (2008).pdf ↩︎ ↩︎ ↩︎
Wallace, Mark, u. a. ECLiPSe : A Platform for Constraint Logic Programming.pdf ↩︎