Die Grundidee der Rückwärtsinduktion besteht darin, mit allen möglichen Endpositionen eines Spiels zu beginnen, in dem Spieler X gewinnt. Schauen Sie sich für Schach alle Möglichkeiten an, wie Weiß Schwarz schachmatt setzen kann. Arbeiten Sie nun rückwärts zu allen möglichen Bewegungen / Positionen, die es Weiß ermöglichen würden, sich in eine dieser Positionen zu bewegen. Sollte sich White jemals in einer solchen Position befinden, könnte sie gewinnen, indem sie zum entsprechenden Schachmatt-Zug übergeht. Jetzt arbeiten wir einen weiteren Schritt zurück und so weiter. Schließlich kehren wir zu allen möglichen ersten Schritten zurück, die Weiß machen könnte. Der Punkt ist, sobald wir dies getan haben, wissen wir, dass wir die beste Antwort von Weiß auf jede Bewegung haben, die Schwarz macht.
Vor kurzem (in den letzten fünf Jahren oder so) wurde Checkers auf diese Weise "gelöst". Offensichtlich sind Nullen und Kreuze (was die Kolonialherren "Tic-Tac-Toe" nennen könnten) seit Ewigkeiten gelöst. Zumindest seit diesem xkcd aber vermutlich lange vorher.
Die Frage ist also: Von welchen Faktoren hängt diese Art von Verfahren ab? Die Anzahl der möglichen Rechtspositionen, vermutlich. Aber vielleicht auch die Anzahl der legalen Schritte an einem bestimmten Knoten ... Und wie komplex ist diese Art von Problem angesichts dessen?
Bonusfrage: Wie lange dauert es, bis ein 2000-Dollar-PC die Kontrolleure an einem Tag lösen kann? Schach? Gehen? (Natürlich müssen Sie dafür auch die zunehmende Geschwindigkeit von Heimcomputern berücksichtigen ...)
Ich habe das Graph-Algorithmus- Tag hinzugefügt, da Sie diese Spiele als Bäume darstellen können. Wenn ich das Tag jedoch missbrauche, fügen Sie bitte etwas Passenderes hinzu
Antworten:
Wie @Joe betont, ist es trivial, Schach in Zeit mithilfe einer Nachschlagetabelle zu lösen . (Eine tatsächliche Implementierung dieses Algorithmus würde ein Universum erfordern, das erheblich größer ist als das, in dem wir leben, aber dies ist ein Ort für theoretische Informatik. Die Größe der Konstante ist irrelevant.)O ( 1 )
Es gibt offensichtlich keine kanonische Verallgemeinerung des Schachs, aber es wurden mehrere Varianten in Betracht gezogen; Ihre Komplexität hängt davon ab, wie die Regeln für Bewegungen ohne Erfassungen und sich wiederholende Positionen verallgemeinert werden.n × n
Wenn ein Unentschieden nach einer Polynomzahl von Capture-freien Zügen deklariert wird oder nachdem eine Position ein Polynom mehrmals wiederholt hat, endet jedes Schachspiel nach einer Polynomzahl von Zügen, sodass das Problem eindeutig in PSPACE liegt. Storer hat bewiesen, dass diese Variante PSPACE-hart ist.n × n
Für die Variante ohne Begrenzung für wiederholte Positionen oder fangfreie Bewegungen ist die Anzahl der zulässigen Schachpositionen in n exponentiell , sodass das Problem eindeutig in EXPTIME liegt. Fraenkel und Lichtenstein haben bewiesen, dass diese Variante EXPTIME-hart ist.n × n n
quelle
O(1)
aber tatsächlich gibt es keinen Computer oder Algorithmen, um sie in einer angemessenen menschlichen Zeit zu lösen. Ich wäre neugierig, die Anzahl dieser Art von Problemen für einen bestimmten Speicher und eine bestimmte Zeit mit festem Begrenzer zu kennenDies ist wahrscheinlich keine besonders nützliche Antwort, aber ich denke, es ist erwähnenswert, dass Schach eine maximale Anzahl von Zügen hat und daher eine begrenzte Anzahl möglicher Spiele. Die Fünfzig-Züge-Regel erlaubt es jedem Spieler, ein Unentschieden zu beanspruchen, wenn 50 oder mehr Züge ohne Bewegung eines Bauern stattfinden. Wir können davon ausgehen, dass dies immer verwendet wird, denn wenn es ein objektives Maß für die Stärke der Positionen jedes Spielers gibt, wird der Schwächere die Auslosung beanspruchen. Ferner verlangen die Schachregeln, dass ein Bauer, wenn er bewegt wird, um ein Feld in Richtung der gegnerischen Seite des Bretts vorrückt (egal ob er sich direkt vorwärts oder diagonal bewegt), und daher kann sich jeder Bauer höchstens sechs Mal bewegen. Da es insgesamt 16 Bauern gibt, beträgt die maximale Anzahl von Zügen . In jedem Zug bewegt der Spieler eine von höchstens 16 Figuren. Für einen Bauern gibt es höchstens 3 Züge, 14 für einen Turm, 8 für einen Ritter, 14 für einen Bischof, 28 für eine Königin und 8 für einen König, für insgesamt 132 mögliche Züge. Dies ergibt eine Obergrenze von 132 4851 für die Gesamtzahl der Schachpartien. Obwohl dies eine wirklich enorme Zahl ist (ca. 2 34172 ), bedeutet dies, dass die Komplexität trivial O ( 1 ) ist.50 × ( 16 × 6 + 1 ) + 1 = 4851 1324851 234172 O ( 1 ) . Andererseits würde ein derart naiver Ansatz ungefähr fünfzigtausend Jahre dauern, bis das Problem behoben werden kann, vorausgesetzt, Moores Gesetz wird auf unbestimmte Zeit fortgesetzt.
quelle
Hier gibt es tatsächlich ein paar verschiedene Fragen: (a) Wie viel Rechenleistung wird für die Baumsuche nach Spielen benötigt, und (b) wie hoch ist die rechnerische Komplexität dieser Probleme? Die beste Allzweckressource für diese Art von Dingen ist wahrscheinlich die Wikipedia-Seite über Spielekomplexität , aber um etwas genauer darauf einzugehen:
In der Praxis wird die reine Baumsuche durch ein Bottom-up-Wörterbuch ergänzt. Beispielsweise sind die Ergebnisse aller 6-teiligen Schachendspiele bekannt, und viele 7-teilige Endspiele wurden analysiert (siehe http://en.wikipedia.org/wiki/Endgame_tablebase ), sodass das Ergebnis eines Spielzweigs sein kann hat im 'Wörterbuch' (einer riesigen Datenbank mit Positionen) nachgeschlagen, sobald die Position auf wenige Teile reduziert wurde, wodurch eine Menge zusätzlicher Baumsuchen verknüpft wurden, die sonst erforderlich wären. Dies wurde mit Checkern gemacht - Datenbanken wurden aus allen Endspielen mit ausreichend wenigen Teilen aufgebaut und dann erweitert, um weitere Teile und mehr hinzuzufügen, bis die Ergebnisse aller 10-teiligen Endspiele bekannt waren; dann wurde die Baumsuche von der Anfangsposition aus verwendet, und im Wesentlichen trafen sich die beiden in der Mitte.
Über diese praktischen Ansätze hinaus gibt es jedoch die (b) Seite der Frage: Wie hoch ist die rechnerische Komplexität dieser Art von Problemen? Abstrakt fallen die meisten Probleme dieser Art in einige Kategorien; Sie sind entweder PSPACE-vollständig - was ungefähr bedeutet: "Wenn Sie dies lösen können, können Sie jedes Problem lösen, das polynomiell viel Platz beansprucht" - oder EXPTIME-vollständig (was ungefähr bedeutet: "Wenn Sie dies lösen können, können Sie jedes Problem lösen." das dauert exponentiell viel '), abhängig davon, wie lange das Spiel dauern kann; Auch hier bietet die Wikipedia-Seite zur EXPTIME-Vollständigkeit eine ziemlich gute Diskussion über die damit verbundenen Probleme und die Unterschiede zwischen verschiedenen Spielen in dieser Hinsicht.
quelle
Diese Schätzungen sind viel zu hoch.
Sie konzentrieren sich auf die Verzweigung basierend auf rechtlichen Schritten. Dies ist sehr sinnvoll, wenn Sie versuchen, einen schnellen Schachcomputer zu erstellen, aber es ist nicht so, wie Sie ein Programm schreiben würden, um Schach zu "lösen".
Es gibt <<<<< 13 ^ 64 mögliche Spielzustände im Schach. Jedes Feld kann nur eine der Schachfiguren oder nichts enthalten. Sie können sie alle durchlaufen und sie in nicht mehr als 2 ^ 256 Operationen als Schwarzgewinn oder Weißgewinn markieren.
Eine realistischere Schätzung der Anzahl der vernünftigerweise erreichbaren Spielzustände liegt bei 2 ^ 100
quelle