Perché alcuni giochi np-complete?


50

Ho letto la voce di Wikipedia su " Elenco di problemi NP-completi " e ho scoperto che giochi come Super Mario, Pokemon, Tetris o Candy Crush Saga non sono completi. Come posso immaginare la completezza del np di un gioco? Le risposte non devono essere troppo precise. Voglio solo avere una panoramica di ciò che significa che i giochi possono essere np-completi.


4
Vedi la domanda di riferimento sulla completezza NP. Penso che la tua domanda sia troppo ampia per il formato di scambio di stack.
Kyle Jones,

5
In Minecraft, puoi creare ... beh, un computer ... in esecuzione .... Minecraft?
djsmiley2k - CoW

4
Costruire calcolatrici usando Magic: the Gathering. Grande divertimento :-)
Mast

Questa non è proprio una risposta alla domanda che stai ponendo, ma è così strettamente correlata che è importante sottolineare: il noto designer di giochi (e proponente dei metodi formali nella progettazione del gioco) Raph Koster ha teorizzato che il la complessità computazionale dei giochi è fondamentale per il nostro continuo godimento di essi. Definisce "divertimento" essenzialmente una risposta all'apprendimento per migliorare le prestazioni di un compito difficile in un ambiente non minaccioso, e sottolinea che continuare a farlo in un sistema vincolato come un gioco si basa su quel sistema che ha schemi comportamentali. ..
Jules

... difficile o impossibile prevedere completamente abbastanza rapidamente da utilizzare tali previsioni, costringendoci quindi ad apprendere in modo meno diretto (di solito utilizzando l'euristica). I problemi con un'elevata complessità (spesso suggerisce NP Hard) sono il modo più affidabile per generare tali schemi comportamentali, che (se è corretto) è probabilmente il motivo per cui sorgono in così tanti giochi famosi. Vedi queste diapositive della conferenza e questo libro per ulteriori informazioni.
Jules,

Risposte:


72

Significa solo che puoi creare livelli o puzzle all'interno di questi giochi che codificano i problemi NP-Hard. Puoi prendere un problema di colorazione del grafico, creare un livello Super Mario Bros. associato e quel livello è battibile se e solo se il grafico è tricolore.

Se vuoi vedere il modo specifico in cui i problemi NP-Complete vengono tradotti nei giochi, ti consiglio l'articolo "I classici giochi Nintendo sono (dal punto di vista computazionale)" . È ben scritto e facile da seguire.

Un avvertimento importante da tenere a mente è che la durezza NP richiede di generalizzare i giochi in modi "ovvi". Ad esempio, Tetris ha normalmente una tavola di dimensioni fisse, ma la prova di durezza richiede che il gioco consenta tavole arbitrariamente grandi. Un altro esempio sono i nemici fuori dallo schermo in Super Mario Bros: la prova è per una variante del gioco in cui i nemici fuori dallo schermo continuano a muoversi come se fossero sullo schermo, invece di cessare di esistere e di essere ripristinati alla loro posizione iniziale quando Mario torna .


4
Non vale la risposta da solo, ma quanto segue ha una bella video lezione: corsi.csail.mit.edu/6.890/fall14/lectures/L05.html - Spiegazioni chiare.
user340082710

4
Potrebbe valere la pena includere un'affermazione precisa di un teorema dall'articolo (estremamente interessante!) Che hai collegato, il che spiega in modo succinto e preciso cosa significhi dire che un gioco è NP-difficile: è NP-difficile decidere se l'obiettivo è raggiungibile dall'inizio di una tappa in Super Mario Bros generalizzato
ymbirtt

forse non correlato, ma con gli ultimi giochi Pokemon (Sole e Luna), la prova nell'articolo non è più vera (almeno così com'è), poiché gli allenatori nemici non si muovono più verso il giocatore per combatterli.
simonalexander2005

2
Per essere NP-Complete devi essere in grado di codificare i problemi NP-Hard ed essere in NP. La seconda clausola manca dalla risposta sopra.
Yakk,

Sebbene questa risposta sia tecnicamente buona, illumina davvero il problema a qualcuno abbastanza inconsapevole da aver posto la domanda in primo luogo? Non credo proprio che ...
MaxW

20

Onestamente non so esattamente quale tipo di modello viene utilizzato dalle persone che fanno queste affermazioni; tuttavia, ciò che mi sembra ragionevole sarebbe parlare della decidere qualcosa su una situazione di gioco.NP

Prendiamo ad esempio Tetris, dal momento che è l'unico tra quelli che citi che ho capito abbastanza per parlare. Tetris ha una regola chiamata "clear perfetto", che dà al giocatore un grande bonus se un drop di un pezzo cancella completamente il tabellone. Ci si potrebbe chiedere se, data una sequenza ordinata di pezzi e un intero , esiste una sequenza legale di mosse per i pezzi che raggiunge almeno perfetti. Dichiarazioni di problemi come quelle sono sufficientemente astratte da poter essere modellate con gli strumenti della teoria della complessità.{Pi}kPk

Per farla breve, " -completo" significa una cosa e solo una cosa, affermazioni fantasiose come "Super Mario è -completo" devono essere tradotte in una dichiarazione formale prima di rendere effettivo senso.NPNP


1

Ecco una spiegazione semplice agitando la mano:

Tali giochi sono in NP perché "correre" il comportamento di un giocatore nel corso di una partita e controllare se lui / lei vince o perde può essere fatto in modo efficiente (abbiamo bisogno che sia in tempo polinomiale per la durata del gioco, ma probabilmente è lineare o -ish).O(nlog(n))

Tali giochi sono NP-difficili perché il comportamento del giocatore è molto espressivo. Mentre in un dato momento un giocatore può avere solo un numero limitato, anche fisso, di possibili azioni, è sufficiente per creare uno spazio di comportamenti o strategie esponenziali nella lunghezza del gioco; e mentre potresti essere in grado di fornire una semplice condizione o formula logica sulla validità / beneficio / correttezza delle azioni di un giocatore localmente, a livello globale ottieni un effetto simile a quello di un grande circuito combinatorio o una formula k-CNF.

Speriamo che questo abbia un senso intuitivo e suoni anche abbastanza campane teoriche CS.

PS: alcuni giochi sono molto più complessi dal punto di vista computazionale. Ad esempio, i giochi da tavolo Hex , Go e Reversi sono completi di PSPACE. Questo essenzialmente perché la formula che devi soddisfare per una strategia vincente è una formula di quantificatori che si alternano ripetutamente: esiste una mossa per giocatore 1, tale che per ogni mossa per giocatore 2, esiste una mossa per giocatore 1 ecc. Ecc. tale che con tutte quelle mosse giocate, alcune delle mosse del giocatore 2 non sono valide o abbiamo una sequenza valida che il giocatore 1 ha vinto. Con i giochi NP, in genere è solo il comportamento / la strategia / la scelta delle mosse di un giocatore.


"Spero che questo abbia un senso intuitivo" - non per me ...
Raffaello

1

Per le partite a giocatore singolo, puoi sempre porre la domanda "esiste una strategia vincente per il giocatore", e quella domanda ha spesso una risposta "SÌ" che può essere verificata in tempo polinomiale e potrebbe essere NP completa.

Per le partite a due giocatori, molto spesso la risposta non può essere verificata in tempo polinomiale, perché per verificare che una mossa per A sia una mossa vincente, è necessario dimostrare che per ogni risposta di B ci sarebbe di nuovo una mossa vincente per A e presto.


0

Bene, è certamente in NP, perché una possibile soluzione è solo un numero finito di input (in ogni frame di input è possibile selezionare uno qualsiasi dei pulsanti k, rappresentiamo ogni selezione dei pulsanti per ogni frame con una lettera) che ti porta a la schermata di vittoria. Sappiamo che questo gioco è stato battuto prima, quindi sappiamo che esiste una soluzione. Un NTM supera il suo nastro e indovina magicamente un corretto certificato di lunghezza n. Quindi simula Super Mario con l'input e lo verifica. La verifica può essere effettuata in tempo polinomiale (il tempo lineare in realtà, se la soluzione è corretta, ci vorranno esattamente n frame per vincere).

Per dimostrare la completezza di NP, potremmo ridurre il 3-SAT costruendo un controllo 3-Sat con il generatore di livelli (che è costruito attraverso l'esecuzione di codice arbitrario https://www.youtube.com/watch?v=IOsvuEA2h4w ).

Quindi abbiamo un input CNF 3-SAT, che controlliamo prima la corretta formattazione. Se è formattato male, lo traduciamo semplicemente in un input "jump" (non è possibile battere Super Mario in un frame facendo un salto).

Chiamiamo la lunghezza dell'ingresso 3-CNF n.

Se è formattato correttamente, lo traduciamo in un numero di input, che costruisce il checker 3-CNF per noi (sempre lo stesso codice di lunghezza k), traduce il 3-CNF in una stringa di input, che costruisce il 3- specifico CNF nel checker (in O (n)), e controlla tutte le possibili soluzioni con la forza bruta. Inattiva e non fa nulla, se dopo aver esaminato tutte le soluzioni non ne viene trovata nessuna. Riavvia il gioco e utilizza una soluzione nota per Super Mario per battere il gioco (il codice per farlo è la lunghezza j). La nostra trasformazione è quindi in O (n), quindi è entro il tempo polinomiale.

Se il CNF è formattato male, non vinciamo (per definizione il nostro input non sta vincendo, se non abbiamo vinto un frame dopo l'esecuzione di esso). Se il CNF non è soddisfacente, non vinciamo (non si può vincere al minimo per un frame nel generatore di livelli, lo abbiamo garantito nel nostro codice). Se il CNF è soddisfacente, la pedina trova una soluzione che si riavvia e vince la partita. Quindi la riduzione polinomiale da 3-Sat a Super Mario è completa e abbiamo dimostrato che Super Mario è NP-completo.

(Spero di non aver rovinato tutto questo da qualche parte. Incontriamo un problema di archiviazione, se il 3-CNF è troppo lungo, ma credo che l'archiviazione limitata sia generalmente ignorata in questi contesti, credo)


"Bene, è certamente in NP, perché una possibile soluzione è solo un numero finito di input" Essere in NP richiede che la soluzione sia limitata polinomialmente nella dimensione dell'input. Essere limitati non è abbastanza.
David Richerby,

0

Ho riscritto questa risposta per provare a rispondere ad alcuni commenti su una versione precedente.

Presumo che tu abbia letto la definizione di Wikipedia per completezza NP che in realtà non si concentra sui giochi. Analizzerò un po 'l'esatto significato di completezza NP e teoria del gioco e spiegherò l'essenza di un gioco NP-Complete.

Consideriamo una partita a 2 giocatori con mosse alternate, più restrittivamente si tratta essenzialmente di partite combinatorie . Fondamentalmente un gioco in cui hai un certo numero di mosse che possono essere fatte e devi sceglierne una. Ti piacerebbe giocare "perfettamente", il che significa che non faresti mai una mossa "cattiva". Quindi delle mosse consentite che desideri selezionare la migliore. (Ovviamente il tuo avversario ha lo stesso obiettivo ...)

Nota che il gioco perfetto non significa che vincerai sempre. Le regole del gioco possono essere tali che il primo o il secondo giocatore debbano vincere. Anche alcuni giochi come Tic-Tac-Toe dovrebbero concludersi con un pareggio. Quindi ciò che significa "gioco perfetto" in questa discussione è:
(1) Che non sarai mai in una posizione vincente e poi perderai la partita perché hai fatto una mossa "cattiva"
(2) Non perderai mai l'opportunità di ottenere nella posizione vincente se si presenta tale opportunità.

Dato lo stato attuale del gioco, ciò che desideri è poter utilizzare un "algoritmo efficiente" per calcolare la mossa migliore. D'altra parte notiamo che un algoritmo che deve cercare nell'intero albero di gioco è un "algoritmo inefficiente".

Ora possiamo definire "l'efficienza" un po 'più formalmente. Lo semplificherò un po 'ma l'essenza è corretta. Considera il numero di calcoli, , che devono essere fatti per scegliere la mossa successiva, che uno nella media di ogni mossa ha possibilità (il fattore di ramificazione ) e che nel gioco sono rimaste mosse. L'idea è anche che ogni calcolo richiede lo stesso tempo in modo che lo sforzo possa essere tradotto in complessità temporale , , anziché calcoli grezzi.CBnT

  • Un "algoritmo efficiente" avrà: dove è un "intero piccolo", e ah sono alcuni numeri reali. Pertanto, l'algoritmo efficiente viene eseguito in tempi polinomiali poiché si tratta di un'espressione polinomiale.
    TaBa+bBα1+cBα2+...+hB0
    α
  • Un "algoritmo inefficiente" avrà: e questo algoritmo viene eseguito in tempo esponenziale (ovvero tempo non polinominale). Il punto qui è che man mano che diventa più grande si ottiene un'esplosione combinatoria.
    TaBn
    n

Ora il punto importante è che è impossibile avere un algoritmo efficiente, il tempo polinomiale, che gioca perfettamente per un gioco che NP-completa. Per giocare perfettamente un problema NP-completo deve, per definizione, essere risolto da un algoritmo inefficiente che viene eseguito in un tempo non polinomiale.

Si noti che il tempo di esecuzione riguarda il numero intrinseco di calcoli, non il tempo di risposta percepito da un essere umano. Per un piccolo gioco come Tic-Tac-Toe il computer potrebbe giocare tutte le possibili mosse future e comunque rispondere rapidamente come percepito da un essere umano.

Per Nim è possibile creare un algoritmo temporale polinomiale. In qualsiasi momento del gioco l'algoritmo può calcolare quale giocatore ha una mossa vincente e quale dovrebbe essere quella mossa.

D'altra parte prendiamo il gioco di Qubic . (Stai cercando di creare una linea di 4 in una griglia 3D. Quindi è essenzialmente tic-tac-toe su una griglia 4x4x4.) Qubic è NP-completo quindi non esiste un algoritmo di tempo polinomiale per calcolare la prossima mossa perfetta. L'unico modo per sapere se al momento hai una mossa vincente è provare tutte le mosse possibili di entrambi i giocatori per verificare che una determinata mossa sia vincente o almeno non perdente.

In verità l'intero albero di gioco di Qubic è abbastanza piccolo da poter essere codificato in un programma per computer che può funzionare perfettamente. Ciò che significa codifica è che l'intero albero di gioco è stato esplorato e tutte le mosse sono state elaborate in anticipo. Pertanto, il programma può essenzialmente effettuare una rapida chiamata al database utilizzando lo stato della scheda corrente e recuperare la mossa migliore per quello stato della scheda senza dover effettuare la ricerca dell'albero ogni volta che si deve effettuare una mossa. Questo è davvero un "trucco" per i nostri scopi qui.

Ora parliamo di scacchi per discutere della funzione di valutazione ignorando alcune delle altre caratteristiche dei programmi di gioco degli scacchi. Gli scacchi sono ancora un gioco irrisolto . Non è noto se il primo o il secondo giocatore debbano vincere. Non è possibile ottenere alcuna posizione sul board e prevedere con certezza chi vincerà. In effetti, gli scacchi hanno un albero di gioco così grande che è impossibile cercare l'intero albero di gioco. Avresti bisogno di computer che non siano solo 10 o 100 volte più veloci ma miliardi di miliardi di volte più veloci di qualsiasi altro computer attuale. (C'è la speranza che il calcolo quantistico possa tagliare questo nodo gordiano.)

Pensa alla funzione di valutazione degli scacchi come a dare a ogni possibile mossa successiva una probabilità di essere la mossa migliore. Quello che fa un programma di scacchi è combinare il futuro con la funzione di valutazione. Pertanto, il programma esamina tutte le possibili mosse future fino a quando non arriva a un punto in cui un punteggio "buono" può essere assegnato alla posizione del tabellone. Il computer valuta tutti i percorsi possibili attraverso l'albero in questo modo e quindi sceglie il percorso con il punteggio migliore. Dal momento che la ricerca non è mai arrivata alla fine del gioco per tutti i percorsi valutati, tutti i programmi di scacchi utilizzano in definitiva una funzione di valutazione imperfetta. (Se sei vicino alla fine del gioco, il computer potrebbe essere in grado di guardare tutte le possibili mosse future.) Ciò significa che potrebbe essere possibile battere il programma anche se il programma avesse una posizione vincente ad un certo punto.


"è / impossibile / avere un algoritmo efficiente, tempo polinomiale, per un gioco che NP completa. Un problema NP completo deve, per definizione, essere risolto da un algoritmo inefficiente che gira in un tempo non polinomiale." - Non è corretto. Non è noto se sia possibile risolvere i problemi NP-completi in tempi polinomiali: la maggior parte dei ricercatori si aspetta fortemente che la risposta sia "no", ma non lo sappiamo per certo, e non è per definizione. Ti incoraggio a dedicare più tempo a leggere la definizione effettiva di NP-complete. Puoi trovare alcune risorse su questo sito e su Wikipedia.
DW

@DW - Sì, ho smorzato un po 'la risposta. L'ho detto nel primo paragrafo. Se leggi il bit sotto Qubic, ho anche spiegato come un algoritmo temporale polinomiale può essere usato per un gioco "piccolo". Stavo cercando di dare una risposta che l'OP avrebbe capito non scrivere un libro sulla completezza NP e la teoria dei giochi.
Max

@@ DW - Mi è venuto in mente che pensavo di fare implicitamente un gioco perfetto. Ho esplicitamente aggiunto questa qualifica.
Max
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.