Ich habe diese Antwort umgeschrieben, um zu versuchen, einige Kommentare zu einer früheren Version zu adressieren.
Ich gehe davon aus, dass Sie die Wikipedia-Definition für NP-Vollständigkeit gelesen haben, die sich wirklich nicht auf Spiele konzentriert. Ich werde die genaue Bedeutung der NP-Vollständigkeit und der Spieltheorie nur ein wenig verwässern und die Essenz eines NP-Complete-Spiels erläutern.
Betrachten wir ein 2-Spieler-Spiel mit alternativen Zügen, wobei es sich restriktiver im Wesentlichen um kombinatorische Spiele handelt . Grundsätzlich ist dies ein Spiel, bei dem Sie eine bestimmte Anzahl von Zügen ausführen können und einen davon auswählen müssen. Sie möchten "perfekt" spielen, was bedeutet, dass Sie niemals einen "schlechten" Zug machen würden. Von den zulässigen Zügen möchten Sie also den besten auswählen. (Natürlich hat dein Gegner das gleiche Ziel ...)
Beachten Sie, dass perfektes Spiel nicht bedeutet, dass Sie immer gewinnen werden. Die Spielregeln können so sein, dass der erste oder der zweite Spieler gewinnen sollte. Auch einige Spiele wie Tic-Tac-Toe sollten unentschieden enden. Was "perfektes Spiel" in dieser Diskussion bedeutet, ist:
(1) Sie werden niemals in einer Gewinnposition sein und dann das Spiel verlieren, weil Sie einen "schlechten" Zug gemacht haben.
(2) Sie werden niemals eine Gelegenheit verpassen, diese zu bekommen in die Gewinnposition, wenn sich eine solche Gelegenheit ergibt.
Angesichts des aktuellen Stands des Spiels möchten Sie in der Lage sein, einen "effizienten Algorithmus" zu verwenden, um den besten Zug zu berechnen. Andererseits sei angemerkt, dass ein Algorithmus, der den gesamten Spielbaum durchsuchen muss, ein "ineffizienter Algorithmus" ist.
CBnT
T∝aBa+bBα−1+cBα−2+...+hB0
α
T∝aBn
n
Jetzt ist der wichtige Punkt, dass es unmöglich ist , einen effizienten Algorithmus, die Polynomzeit, zu haben, der perfekt für ein Spiel spielt, das NP-vollständig ist. Um ein NP-vollständiges Problem perfekt zu spielen, muss es per Definition durch einen ineffizienten Algorithmus gelöst werden, der in nichtpolynomieller Zeit abläuft.
Beachten Sie, dass sich die Laufzeit auf die intrinsische Anzahl von Berechnungen und nicht auf die von einem Menschen wahrgenommene Reaktionszeit bezieht. Für ein kleines Spiel wie Tic-Tac-Toe könnte der Computer alle möglichen zukünftigen Bewegungen spielen und dennoch schnell reagieren, wie es von einem Menschen wahrgenommen wird.
Für Nim ist es möglich, einen polynomialen Zeitalgorithmus zu erstellen. Zu jedem Zeitpunkt im Spiel kann der Algorithmus berechnen, welcher Spieler einen Gewinnzug hat und welcher dieser Züge sein sollte.
Nehmen wir zum anderen das Spiel Qubic . (Sie versuchen, eine 4er-Linie in einem 3D-Raster zu erstellen. Auf einem 4x4x4-Raster ist dies also im Wesentlichen Tic-Tac-Toe.) Qubic ist NP-vollständig, daher gibt es keinen polynomiellen Zeitalgorithmus zur Berechnung der nächsten perfekten Bewegung. Die einzige Möglichkeit, um festzustellen, ob Sie einen Gewinnzug haben, besteht darin, alle möglichen Züge beider Spieler zu versuchen, um zu überprüfen, ob ein bestimmter Zug ein Gewinner oder zumindest kein Verlierer ist.
Wahrhaftig, der gesamte Spielbaum für Qubic ist klein genug, um in ein perfekt spielbares Computerprogramm codiert zu werden. Was Kodierung bedeutet, ist, dass der gesamte Spielbaum erkundet wurde und alle Züge im Voraus ausgearbeitet wurden. Das Programm kann also im Grunde genommen einen schnellen Datenbankaufruf unter Verwendung des aktuellen Board-Status durchführen und den besten Zug für diesen Board-Status zurückerhalten, ohne die Baumsuche jedes Mal durchführen zu müssen, wenn ein Zug ausgeführt werden soll. Dies ist wirklich ein "Betrug" für unsere Zwecke hier.
Lassen Sie uns nun Schach diskutieren , um die Bewertungsfunktion zu diskutieren, wobei einige der anderen Merkmale von Schachspielprogrammen ignoriert werden. Schach ist immer noch ein ungelöstes Spiel . Es ist nicht bekannt, ob der erste oder der zweite Spieler gewinnen soll. Es ist nicht möglich, eine Vorstandsposition zu erhalten und mit Sicherheit vorherzusagen, wer gewinnen wird. Tatsächlich hat Schach einen so großen Spielbaum, dass es einfach unmöglich ist, den gesamten Spielbaum zu durchsuchen. Sie brauchen Computer, die nicht nur 10 oder 100 Mal schneller sind, sondern Milliarden von Milliarden Mal schneller als jeder andere aktuelle Computer. (Es besteht die Hoffnung, dass Quantencomputer diesen gordischen Knoten durchschneiden könnten.)
Stellen Sie sich die Schachbewertungsfunktion so vor, dass für jeden möglichen nächsten Zug die Wahrscheinlichkeit besteht, der beste Zug zu sein. Ein Schachprogramm kombiniert Vorausschau mit der Bewertungsfunktion. Das Programm prüft daher alle möglichen zukünftigen Züge, bis es einen Punkt erreicht, an dem die Brettposition mit "gut" bewertet werden kann. Der Computer wertet auf diese Weise alle möglichen Pfade durch den Baum aus und wählt dann den Pfad mit der besten Punktzahl aus. Da die Suche nach allen bewerteten Pfaden nie zu Ende war, verwenden alle Schachprogramme letztendlich eine unvollständige Bewertungsfunktion. (Wenn Sie sich dem Ende des Spiels nähern, kann der Computer möglicherweise alle möglichen zukünftigen Züge anzeigen.) Dies bedeutet, dass das Programm möglicherweise auch dann geschlagen werden kann, wenn das Programm irgendwann eine Gewinnposition hatte.