- Es gibt keine Stellung mit mehr möglichen Zügen als die 218-Züge-Schachstellung, die 1964 von Nenad Petrović veröffentlicht wurde
- Da es praktisch unmöglich ist, alle Stellungen zu durchsuchen, wurde die Grenze mithilfe mathematischer Optimierung und computergestützter Modellierung bewiesen
- Durch das Entfernen unnötiger Figuren, das Zulassen teilweiser Figurenplatzierungen und die Vereinfachung der Rochade wurde der Suchraum effektiv reduziert
- Abschließend wurde mit dem Optimierungstool Gurobi bestätigt, dass 218 Züge das Maximum sind; zusätzlich wurden Rekorde wie 144 Züge (ohne Umwandlungen) verifiziert
- Diese Forschung beseitigt für Entwickler von Schach-Engines und Kompressionsverfahren die Unsicherheit über die maximale Zuganzahl
Einleitung: die Debatte um die 218-Züge-Schachstellung
Seit der Veröffentlichung einer Stellung mit 218 möglichen Zügen durch den Schachkompositions-Großmeister Nenad Petrović im Jahr 1964 gab es immer wieder Versuche, diesen Rekord zu brechen. Der Autor wollte als Informatiker dieser Frage ein Ende setzen, indem er alle Stellungen mit dem Computer analysierte. Es gibt zwar etwa 4,8 × 10^44 erreichbare Schachstellungen, doch eine derart gewaltige Suche ist in der Praxis unmöglich.
Einführung mathematischer Optimierung
Minimierung unnötiger Figuren und Kombinationen
- Zusätzliche schwarze Figuren vergrößern die Zahl der Züge nur in begrenzten Fällen
- etwa wenn sie von weißen Bauern geschlagen werden können oder eine Schachsituation gegen den gegnerischen König vermieden wird
- Die meisten schwarzen Figuren können entfernt werden, ohne die maximale Zahl möglicher Züge zu beeinflussen
- Solange die Figurenanzahl zulässig bleibt, können schwarze Figuren durch schwächere Figuren ersetzt oder ihre Platzierung unter gewissen Nebenbedingungen (wie Fesselungen) angepasst werden
- Bei weißen Figuren ist die Lage umgekehrt: Würden sie in einer optimalen Stellung alle durch starke Figuren wie Damen ersetzt, könnten illegale Stellungen entstehen, weshalb eine feinere Abstimmung nötig ist
Schachsituationen und Begrenzung der Zugzahl
- Ein schwarzer König im Schach ist keine legale Stellung und muss daher nicht betrachtet werden
- Wenn der weiße König im Schach steht, sind die Zugmöglichkeiten stark eingeschränkt (maximal 120 Züge), sodass 218 unerreichbar sind
- Daher kann die Suche auf Stellungen ohne Schachgebot beschränkt werden
Teilweise Figurenplatzierung und mathematische Modellierung
Um die kombinatorische Komplexität zu reduzieren, wurde ein Modell mit teilweiser (fractional) Figurenplatzierung, Zügen und gelockerten Schachregeln verwendet
- Zum Beispiel kann eine Figur mit 27,3 % Wahrscheinlichkeit auf e4 stehen und mit 72,7 % auf einer anderen Position
- Dieser Ansatz wurde mit modernen Optimierungstools wie Gurobi als Integer Linear Programming (ILP) umgesetzt
- Anfangs scheiterte dies an Speicher- und Laufzeitgrenzen (Speichermangel nach etwa 55.000 Sekunden)
- Um den Suchraum weiter zu vereinfachen, wurden zusätzliche Maßnahmen angewandt, darunter eine vereinfachte Rochaderegel, das Ignorieren von Schach, das Ignorieren von Fesselungen und die Vereinfachung der En-passant-Bedingungen
Optimierung und Schlussfolgerung
Schließlich wurde das Modell durch zusätzliche Nebenbedingungen verbessert, die unnötige Kombinationssuche ausschließen, und die Optimierung mit Gurobi abgeschlossen
- Die Obergrenze wurde schrittweise von 305 Zügen über 271,67 auf 218 Züge gesenkt
- Es wurde bestätigt, dass nur 12 repräsentative Stellungen mit 218 möglichen Zügen erreichbar sind
- Für diese Stellungen wurde mittels Proof Games nachgewiesen, dass sie legal und ohne Weiteres erreichbar sind
Außerdem wurden 144 Züge als Maximum ohne Umwandlungen, 288 Züge in illegalen Stellungen sowie 271 Züge in legalen, aber nicht erreichbaren Stellungen verifiziert
Ergebnisse und Bedeutung
- Dank dieser Forschung können Entwickler von Schach-Engines und Forscher zu Kompressionsalgorithmen sicher sein, dass ein Limit von 256 Zügen für Dinge wie Speicherdesign ausreicht
- Es ist mathematisch bewiesen, dass es keine Stellung gibt, in der auf legalem Weg mehr als 218 Züge in einem Zug verfügbar sind
FAQ-Zusammenfassung
- Eine Schachpartie kann länger sein als 218 Züge, doch diese Forschung behandelt die maximale Zahl möglicher Optionen in einem einzelnen Zug
- Falls manche Stellungen unerreichbar erscheinen, wird darauf hingewiesen, dass es verschiedene Wege geben kann, etwa wenn der vorherige Zug mit einem Schlag endete
- Die Forschungsmethode nutzt eine mathematische Orakeltechnik, um in einem riesigen kombinatorischen Raum „absolut unmögliche Kombinationen“ schnell auszusortieren
- Zur Absicherung der Glaubwürdigkeit wurden sowohl der verwendete Code als auch die mathematische Gültigkeit der abgeleiteten Beweise offengelegt
Künftige Aufgaben und weitere Forschungsvorschläge
Mit dieser Technik lassen sich auch andere Schachfragen angehen, etwa „die meisten Schlagzüge“, „die meisten Pattstellungen“, „die meisten Schachgebote“, „die meisten Schachmatts“ oder „die meisten Matt in zwei“. In manchen Fällen könnten dafür jedoch eigene kreative Optimierungsalgorithmen nötig sein.
Fazit
- 218 ist die offizielle maximale Anzahl möglicher Züge in einer Schachstellung für einen einzelnen Zug
- Praktisch bedeutet das, dass Schachsoftware und Forscher ihre Strukturen auf 218 (oder 256) auslegen können
- Der zugehörige Code und die Optimierungsergebnisse wurden auf GitHub veröffentlicht
Referenz
- Enthält Links zu Proof Games und Stellungen, darunter Nenad Petrovićs 218-Züge-Stellung und Jenő Báns 144-Züge-Stellung (ohne Umwandlungen)
- Ausführliche Erklärungen und der Code sind im Github-Repository zu finden
1 Kommentare
Hacker-News-Kommentare
Auf Lichess ist das Spielniveau in Varianten wie 960 oder Crazyhouse viel höher als auf Chess.com
Es ist buchstäblich absurd gut. Wenn möglich, sollte man es unterstützen
Interessant ist, dass Mixed-Integer-Linear-Programming-(MILP)-Solver genau so etwas bereits unterstützen. Im Fachjargon heißt das „row generation“ und wird typischerweise verwendet, wenn man ein Problem als Matrix schreibt, bei der die Zeilen die Nebenbedingungen und die Spalten die Variablen sind
Das dynamische Hinzufügen neuer Zeilen ist gleichbedeutend damit, Nebenbedingungen nur dann einzuführen, wenn sie verletzt werden
Diese Methode wird vor allem beim Traveling Salesman Problem eingesetzt
(Nebenbei: In Wikipedia gibt es Column generation, aber keinen Eintrag zu row generation)
Das Abschwächen oder Weglassen von Schachregeln hatte auch Auswirkungen auf die Wahl der Variablen. Vor dem mathematischen Modellieren habe ich Dinge wie lazy constraints ausprobiert, aber das brachte keine nennenswerte Beschleunigung. Schon allein nicht zu berücksichtigen, ob der weiße König im Schach steht, führte zu vielen Vereinfachungen
(Vorausgesetzt, Gurobi hat keinen Bug, und auch die Problemdefinition und Implementierung des Autors sind fehlerfrei.)
Ich frage mich, ob Gurobi in einem lokalen Maximum stecken könnte oder ob wirklich ein globales Optimum bewiesen wurde
Wenn Gurobi und mein Code wie beabsichtigt funktionieren und ich beim Vereinfachen des Schachmodells keinen logischen Fehler gemacht habe, dann habe ich bewiesen, dass „die maximale Anzahl möglicher legaler Züge unter allen Schachpositionen, die aus der Ausgangsstellung durch eine legale Zugfolge erreichbar sind, sowohl nach oben als auch nach unten durch 218 beschränkt ist“. Gurobi hat also durch Schranken über den gesamten Suchraum gezeigt: besser als das geht es nicht
Aus Sicht des Computings ist der gesamte Problemraum wichtiger, weil man alles erst einmal „berechnen“ muss, bevor man feststellen kann, ob es legal ist. Es gibt keine einfache Methode, nur über legale Positionen zu iterieren
Ein Bekannter hat mich darauf hingewiesen, dass mein Artikel hier diskutiert wird
Entschuldigt bitte den weniger klaren Titel; ich hoffe, inzwischen ist es klarer geworden. Danke für das Feedback und die freundlichen Worte
Wenn ihr auch Fragen zu ähnlichen Beweisen über Schachfakten habt, beantworte ich sie gern ^^
Danke
Tobi
Update: Im Artikel ist von etwa 8,7x10^45 erreichbaren Schachpositionen die Rede, und https://github.com/lechmazur/ChessCounter verwendet diese Zahl als obere Schranke
(Das entspricht ungefähr 153 Bit)
log2(4.8x10^44)ungefähr 149 BitFür eine effiziente Dekodierung braucht man aber 153 Bit, nämlich den aufgerundeten
log2-Wert der von ChessPositionRanking empfohlenen Zahl (8726713169886222032347729969256422370854716254). ChessCounter liefert keinen Code für effiziente DekodierungDasselbe gilt für Turm/Dame/Springer, aber diese können im Schach geschlagen worden sein, also braucht man insgesamt 65 Zustände für jedes dieser 5 Stücke
Läufer können nur auf die Hälfte dieser Felder, also je 33 Zustände
Bauern haben 4 Umwandlungsarten, können geschlagen sein und stehen je nach Fall auf ungefähr 20 bis 30 möglichen Positionen; insgesamt also etwa 290 Zustände pro Bauer
Damit kommt man für eine Farbe auf ungefähr 112 Bit zur Darstellung des Brettzustands, aufgerundet also 224 Bit für beide Seiten zusammen
En passant und Rochade-Einschränkungen lassen sich durch Aufrunden ohne zusätzliche Bits unterbringen; es kommen nur ein paar Zustände pro Figur hinzu
Das ist vermutlich die kompakteste Form einer Darstellung mit fester Länge
Bei einer sparsamen Darstellung könnte man, da die beiden Könige immer vorhanden sind, die noch lebenden Figuren über eine n-stellige Dezimalzahl und n+2 Zahlen zu je 64 Bit für die Positionen kodieren; Rochade, en passant usw. bräuchten dann nur wenig Zusatzinformation. Wenn im Mittel ungefähr die Hälfte der Figuren verschwunden ist, braucht man im Schnitt etwa 180 Bit pro Brettzustand
Für die Zughistorie braucht man ebenfalls ungefähr 10 Bit pro Zugpaar, also 5 Bit pro Ply, daher reichen die Bits nur für etwa 18 Züge. Das ist etwas kürzer als die Mitte einer durchschnittlichen Schachpartie
Noch stärker zu komprimieren scheint nur mit einem enorm großen Wörterbuch möglich zu sein
Dann kann man das gesamte Brett mit fester Länge als
64*4=256Bit = 32 Byte kodierenOder, in einer variablen Darstellung nur für vorhandene Figuren, verwendet man für jedes Feld einen Index mit 6 Bit, also insgesamt Anzahl*10 Bit
Die Ausgangsstellung wäre dann zum Beispiel
32*10=320Bit = 40 Byte8.7e45-Wert „restricted“ in dem GitHub-Projekt beschränkt einige Bauernumwandlungsmuster5.68e50„general“ ist die echte obere Schranke und erlaubt alle möglichen UmwandlungenDieser Bauer hat selbst nur einen möglichen Zug, nämlich den benachbarten Springer zu schlagen. Wenn er nicht da wäre, könnten vier weiße Damen und Springer nach b2 ziehen. Allerdings wäre der schwarze König dann bereits schachmatt, sodass diese Züge real gar nicht möglich wären
Es ist verlockend, die Dame auf e5 woanders hinzusetzen, sodass es nicht sofort Schachmatt ist und das Feld b2 offener wird
P.S.: Es sieht so aus, als müsse dieser Bauer dort am Leben bleiben, um Patt zu verhindern
Wenn Schwarz am Zug wäre, könnte er sich wegen des weißen Damenzugs auf e5 ebenfalls nicht bewegen, weil der König dadurch gefesselt ist. Ohne diese Fesselung hätte er 4 mögliche Züge. Unterverwandlung ist auch möglich
Die Stellung ist mit Weiß am Zug. Selbst wenn der Bauer auf b2 den schwarzen König nicht durch die weiße Dame fesseln würde, könnte sich der schwarze Bauer nicht bewegen
Der Bauer auf b2 ist zwingend notwendig, um den schwarzen König vor Schach zu schützen. Sonst wäre die Stellung selbst nicht legal
Ich habe wirklich alles sehr sorgfältig geprüft, also keine Sorge: Jeder Versuch, für Weiß mehr als 218 Züge zu konstruieren, ist gescheitert. Trotzdem bin ich überrascht und dankbar, dass sich so viele für meinen Artikel interessieren, haha ^^
Man könnte meinen, man könne einen der schwarzen Bauern in einen weißen Springer verwandeln, um die Zahl der Züge zu erhöhen, aber beide Springer sind bereits vorhanden, und alle Bauern sind schon umgewandelt, also geht das nicht. (Wenn man beide Bauern ändern würde, könnte Schwarz diese Stellung im vorherigen Zug nicht erreicht haben.)
Hast du den ganzen Artikel gelesen?
Es sind nicht 271, sondern 271.666... :) Diese Zahl stammt aus einem Modell, in dem alle Entscheidungen, also 0 oder 1, zu kontinuierlichen Werten zwischen 0.0 und 1.0 relaxiert wurden. Man tut also so, als könne eine Figur zu 0.23 existieren. Auch die Möglichkeit, einen bestimmten Zug auszuführen, wird dann etwa als 0.843 behandelt.
Mit dieser Art von „Black Magic“ wird die Berechnung viel schneller, und man bekommt mehr mögliche Züge heraus, als es in Wirklichkeit geben kann.
So kann man diese Methode nutzen, um schnell Teilräume auszuschließen, die potentiell ungünstig sind. Ohne solche Techniken wäre es unmöglich, den gesamten Suchraum vollständig zu durchsuchen
Ich glaube übrigens, du irrst dich in der Annahme, die schwarzen Bauern stünden auf ihren Ausgangsfeldern. Tatsächlich ist der schwarze Bauer bis auf die gegenüberliegende Brettseite vorgedrungen, also in die weiße Hälfte