Warum sind einige Spiele np-complete?


50

Ich habe den Wikipedia-Eintrag über " Liste der NP-vollständigen Probleme " gelesen und festgestellt, dass Spiele wie Super Mario, Pokemon, Tetris oder Candy Crush Saga np-vollständig sind. Wie kann ich mir die Vollständigkeit eines Spiels vorstellen? Die Antworten müssen nicht zu genau sein. Ich möchte nur einen Überblick darüber bekommen, was es bedeutet, dass Spiele np-vollständig sein können.


4
Siehe die Referenzfrage zur NP-Vollständigkeit. Ich denke, Ihre Frage ist zu weit gefasst für das Stapelaustauschformat.
Kyle Jones

5
In Minecraft können Sie ... nun, einen Computer ... erstellen, auf dem ... Minecraft ausgeführt wird?
djsmiley2k - CoW

4
Mit Magic: the Gathering cards Taschenrechner bauen. Großer Spaß :-)
Mast

Dies ist keine vollständige Antwort auf die von Ihnen gestellte Frage, ist jedoch so eng verwandt, dass es wichtig ist, darauf hinzuweisen: Der bekannte Spieledesigner (und Befürworter formaler Methoden im Spieledesign) Raph Koster hat angenommen, dass die Die rechnerische Komplexität von Spielen ist entscheidend, damit wir sie weiterhin genießen können. Er definiert "Spaß" im Wesentlichen als eine Reaktion auf das Lernen, um die Leistung einer schwierigen Aufgabe in einer nicht bedrohlichen Umgebung zu verbessern, und weist darauf hin, dass die Fortsetzung in einem eingeschränkten System wie einem Spiel davon abhängt, dass dieses System Verhaltensmuster aufweist. ..
Jules

Es ist schwierig oder unmöglich, eine vollständige Vorhersage schnell genug zu treffen, um diese Vorhersagen zu verwenden, und zwingt uns daher, weniger direkt zu lernen (normalerweise unter Verwendung von Heuristiken). Probleme mit einer hohen Komplexität (er schlägt oft NP Hard vor) sind die zuverlässigste Methode, um solche Verhaltensmuster zu erzeugen. Wenn er richtig ist, tauchen sie wahrscheinlich deshalb in so vielen bekannten Spielen auf. Weitere Informationen finden Sie auf diesen Konferenzfolien und in diesem Buch .
Jules

Antworten:


72

Es bedeutet nur, dass Sie in diesen Spielen Levels oder Rätsel erstellen können, die NP-Hard-Probleme verschlüsseln. Sie können ein Grafikfarbproblem lösen, eine zugehörige Super Mario Bros.-Ebene erstellen, und diese Ebene ist nur dann zu schlagen, wenn die Grafik dreifarbig ist.

Wenn Sie das sehen wollen spezifische Art und Weise die NP-vollständige Probleme in den Spielen übersetzt werden, empfehle ich das Papier „Classic Nintendo - Spiele sind (Rechnerisch) Hard“ . Es ist gut geschrieben und leicht zu befolgen.

Eine wichtige Einschränkung ist, dass die NP-Härte eine "offensichtliche" Verallgemeinerung der Spiele erfordert. Zum Beispiel hat Tetris normalerweise ein Brett mit fester Größe, aber der Härtenachweis erfordert, dass das Spiel beliebig große Bretter zulässt. Ein weiteres Beispiel sind Off-Screen-Feinde in Super Mario Bros: Der Beweis ist für eine Variante des Spiels, bei der sich Off-Screen-Feinde weiterbewegen, als wären sie auf dem Bildschirm, anstatt zu existieren und in ihre Ausgangsposition zurückgesetzt zu werden, wenn Mario zurückkommt .


4
Keine Antwort wert, aber das folgende Video bietet eine schöne Vorlesung: courses.csail.mit.edu/6.890/fall14/lectures/L05.html - Kristallklare Erklärungen.
user340082710

4
Es kann sich lohnen, eine genaue Aussage eines Theorems aus dem (äußerst interessanten!) Artikel, den Sie verlinkt haben, beizufügen, die kurz und präzise erklärt, was es bedeutet, zu sagen, dass ein Spiel NP-schwer ist: Es ist NP-schwer, zu entscheiden, ob das Ziel ist , von Anfang an einer Stufe in generali super Mario Bros erreichbar
Ymbirtt

Vielleicht ohne Bezug, aber mit den neuesten Pokemon-Spielen (Sun and Moon) ist der Beweis in dem Artikel nicht mehr wahr (zumindest nicht wie er ist), da sich feindliche Trainer nicht mehr auf den Spieler zubewegen, um gegen ihn zu kämpfen.
simonalexander2005

2
Um NP-Complete zu sein, müssen Sie beide in der Lage sein, NP-Hard-Probleme zu kodieren, und Sie müssen sich in NP befinden. Die zweite Klausel fehlt in der obigen Antwort.
Yakk

Obwohl diese Antwort technisch gut ist, beleuchtet sie das Problem wirklich für jemanden, der nicht weiß, ob er die Frage überhaupt gestellt hat? Ich glaube wirklich nicht ...
MaxW


1

Hier ist eine vereinfachte Erklärung von Hand:

O(nlog(n))

Solche Spiele sind NP-schwer, weil das Verhalten des Spielers sehr ausdrucksstark ist. Während ein Spieler zu einem bestimmten Zeitpunkt möglicherweise nur eine begrenzte, sogar eine festgelegte Anzahl möglicher Aktionen hat, reicht dies aus, um einen Bereich von Verhaltensweisen oder Strategien zu schaffen, der in der Länge des Spiels exponentiell ist. und während Sie möglicherweise in der Lage sind, eine einfache Bedingung oder logische Formel für die Gültigkeit / den Nutzen / die Richtigkeit der Aktionen eines Spielers vor Ort bereitzustellen, erhalten Sie global einen ähnlichen Effekt wie bei einer großen kombinatorischen Schaltung oder einer k-CNF-Formel.

Hoffentlich ergibt das einen intuitiven Sinn und es läutet auch genug CS-Theorie-Glocken.

PS - Einige Spiele sind (rechnerisch) viel komplexer. Zum Beispiel sind die Brettspiele Hex , Go und Reversi PSPACE-komplett. Das liegt im Wesentlichen daran, dass die Formel, die Sie für eine Gewinnstrategie befriedigen müssen, eine Formel ist, bei der sich der Quantifizierer wiederholt: Es gibt einen Zug von Spieler 1, sodass für jeden Zug von Spieler 2 ein Zug von Spieler 1 usw. usw. vorhanden ist. Wenn alle diese Züge gespielt wurden, sind entweder einige der Züge von Spieler 2 ungültig oder wir haben einen gültigen Sequenzspieler, den 1 gewonnen hat. Bei NP-Spielen ist es in der Regel nur das Verhalten / die Strategie / die Wahl der Züge eines Spielers.


"Hoffentlich ergibt das einen intuitiven Sinn" - für mich nicht ...
Raphael

1

Bei Einzelspielerspielen können Sie immer die Frage stellen, ob es eine Gewinnstrategie für den Spieler gibt, und diese Frage hat häufig eine "JA" -Antwort, die in polynomieller Zeit überprüft werden kann und möglicherweise NP-vollständig ist.

Bei Spielen für zwei Spieler kann die Antwort in der Polynomzeit häufig nicht überprüft werden, da Sie zum Überprüfen, ob ein Zug für A ein Gewinnzug ist, nachweisen müssen, dass es für jede Antwort von B erneut einen Gewinnzug für A und gibt bald.


0

Nun, es ist sicherlich in NP, da eine mögliche Lösung nur eine begrenzte Anzahl von Eingaben ist (in jedem Eingaberahmen können Sie eine der k Schaltflächen auswählen, wir repräsentieren jede Auswahl der Schaltflächen für jeden Rahmen mit einem Buchstaben), zu der Sie gelangen der win-screen. Wir wissen, dass dieses Spiel schon einmal geschlagen wurde, also wissen wir, dass es eine Lösung gibt. Ein NTM geht über sein Band und errät auf magische Weise ein korrektes Zertifikat der Länge n. Dann simuliert es Super Mario mit der Eingabe und überprüft es. Die Verifizierung kann in Polynomialzeit erfolgen (lineare Zeit, wenn die Lösung korrekt ist, werden genau n Bilder benötigt, um zu gewinnen).

Um die NP-Vollständigkeit zu demonstrieren, könnten wir 3-SAT darauf reduzieren, indem wir einen 3-Sat-Checker mit dem Level-Generator erstellen (der durch willkürliche Codeausführung erzeugt wird https://www.youtube.com/watch?v=IOsvuEA2h4w ).

Wir haben also einen 3-SAT-CNF-Eingang, den wir zuerst auf korrekte Formatierung prüfen. Wenn es schlecht formatiert ist, übersetzen wir es einfach in einen "Sprung" -Eingang (es ist nicht möglich, Super Mario innerhalb eines Frames durch einen Sprung zu schlagen).

Wir nennen die Länge des 3-CNF-Eingangs n.

Wenn es richtig formatiert ist, übersetzen wir es in eine Reihe von Eingaben, die den 3-CNF-Checker für uns erstellen (immer der gleiche Code mit der Länge k), übersetzen die 3-CNF in eine Folge von Eingaben, die die spezifischen 3- CNF im Checker (in O (n)) und überprüft alle möglichen Lösungen mit Brute-Force. Es läuft im Leerlauf und tut nichts, wenn nach Durchlaufen aller Lösungen keine gefunden wird. Es startet das Spiel neu und verwendet eine bekannte Lösung für Super Mario, um das Spiel zu schlagen (der Code dafür hat die Länge j). Unsere Transformation ist also in O (n), also innerhalb der Polynomzeit.

Wenn der CNF schlecht formatiert ist, gewinnen wir nicht (per Definition gewinnt unsere Eingabe nicht, wenn wir nach der Ausführung keinen Frame gewonnen haben). Wenn der CNF nicht zufriedenstellend ist, gewinnen wir nicht (Sie können nicht gewinnen, indem Sie einen Frame im Level-Generator im Leerlauf laufen lassen, das haben wir in unserem Code sichergestellt). Wenn der CNF zufriedenstellend ist, findet der Checker eine Lösung, die neu gestartet wird, und gewinnt das Spiel. Damit ist die polynomielle Reduktion von 3-Sat zu Super Mario abgeschlossen und wir haben bewiesen, dass Super Mario NP-vollständig ist.

(Ich hoffe, ich habe das nicht irgendwo durcheinander gebracht. Wir haben ein Speicherproblem, wenn der 3-CNF zu lang ist, aber begrenzter Speicher wird in diesen Kontexten normalerweise ignoriert, glaube ich.)


"Nun, es ist sicherlich in NP, weil eine mögliche Lösung nur eine begrenzte Anzahl von Eingaben ist." Um in NP zu sein, muss die Lösung in Bezug auf die Größe der Eingabe polynomiell begrenzt sein. Nur endlich zu sein, ist nicht genug.
David Richerby

0

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


  • TaBa+bBα1+cBα2+...+hB0
    α

  • TaBn
    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.


"Es ist / unmöglich /, einen effizienten Algorithmus, die Polynomzeit, für ein Spiel zu haben, das NP-vollständig ist. Ein NP-vollständiges Problem muss per Definition durch einen ineffizienten Algorithmus gelöst werden, der in nichtpolynomialer Zeit abläuft." - Das ist nicht richtig. Es ist nicht bekannt, ob es möglich ist, NP-vollständige Probleme in polynomieller Zeit zu lösen: Die meisten Forscher gehen davon aus, dass die Antwort "nein" lautet, aber das wissen wir nicht genau und es ist nicht per Definition. Ich ermutige Sie, mehr Zeit damit zu verbringen, über die tatsächliche Definition von NP-complete zu lesen . Sie finden einige Ressourcen auf dieser Website und auf Wikipedia.
DW

@DW - Ja, ich habe die Antwort ein wenig niedergeschlagen. Das habe ich im ersten Absatz gesagt. Wenn Sie das Bit unter Qubic lesen, habe ich auch erklärt, wie ein Polynom-Zeit-Algorithmus für ein "kleines" Spiel verwendet werden kann. Ich habe versucht, eine Antwort zu geben, die das OP verstehen würde, kein Buch über NP-Vollständigkeit und Spieltheorie zu schreiben.
MaxW

@@ DW - Mir ist der Gedanke gekommen, dass ich implizit ein perfektes Spiel mache. Ich habe diese Qualifikation ausdrücklich hinzugefügt.
MaxW
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.