¿Por qué algunos juegos np-complete?


50

Leí la entrada de Wikipedia sobre " Lista de problemas NP-completos " y descubrí que los juegos como Super Mario, Pokémon, Tetris o Candy Crush Saga son np-completos. ¿Cómo puedo imaginar np-completeness de un juego? Las respuestas no necesitan ser demasiado precisas. Solo quiero obtener una visión general de lo que significa que los juegos pueden ser np-completos.


44
Consulte la pregunta de referencia sobre la integridad de NP. Creo que su pregunta es demasiado amplia para el formato de intercambio de pila.
Kyle Jones

55
En Minecraft, puedes crear ... bueno, una computadora ... corriendo ... ¿Minecraft?
djsmiley2k - CoW

44
Construyendo calculadoras usando Magic: the Gathering cards. Gran diversión :-)
Mástil

Esta no es una respuesta a la pregunta que hace, pero está tan estrechamente relacionada que es importante señalar: el conocido diseñador de juegos (y defensor de métodos formales en el diseño de juegos) Raph Koster ha teorizado que el La complejidad computacional de los juegos es fundamental para nuestro continuo disfrute de ellos. Él define "diversión" como esencialmente una respuesta al aprendizaje para mejorar el desempeño de una tarea difícil en un entorno no amenazante, y señala que continuar haciendo esto en un sistema restringido como un juego depende de que ese sistema tenga patrones de comportamiento. ..
Jules

... difícil o imposible predecir completamente lo suficientemente rápido como para usar esas predicciones, lo que nos obliga a aprender de una manera menos directa (generalmente usando heurística). Los problemas con una alta complejidad (a menudo sugiere NP Hard) son la forma más confiable de generar tales patrones de comportamiento, lo que (si es correcto) es probablemente la razón por la que surgen en tantos juegos conocidos. Vea estas diapositivas de la conferencia y este libro para más información.
Jules

Respuestas:


72

Simplemente significa que puedes crear niveles o acertijos dentro de estos juegos que codifican problemas NP-Hard. Puede tomar un problema de coloración del gráfico, crear un nivel asociado de Super Mario Bros., y ese nivel es superable si y solo si el gráfico es de 3 colores.

Si desea ver la forma específica en que los problemas de NP-Complete se traducen en los juegos, le recomiendo el artículo "Los juegos clásicos de Nintendo son (computacionalmente) difíciles" . Está bien escrito y es fácil de seguir.

Una advertencia importante a tener en cuenta es que la dureza NP requiere generalizar los juegos de manera "obvia". Por ejemplo, Tetris normalmente tiene una tabla de tamaño fijo, pero la prueba de dureza requiere que el juego permita tablas arbitrariamente grandes. Otro ejemplo son los enemigos fuera de la pantalla en Super Mario Bros: la prueba es una variante del juego donde los enemigos fuera de la pantalla continúan moviéndose como si estuvieran en la pantalla, en lugar de dejar de existir y volver a su posición inicial cuando Mario regresa .


44
No merece una respuesta por sí mismo, pero la siguiente tiene una buena video conferencia: cursos.csail.mit.edu/6.890/fall14/lectures/L05.html - Explicaciones claras como el cristal.
user340082710

44
Puede valer la pena incluir una declaración precisa de un teorema del documento (¡muy interesante!) Que vinculó, que explica de manera sucinta y precisa exactamente lo que significa decir que un juego es NP-duro: es NP-difícil decidir si El objetivo es accesible desde el comienzo de una etapa en Super Mario Bros generalizado
ymbirtt

quizás no relacionado, pero con los últimos juegos de Pokémon (Sol y Luna), la prueba en el artículo ya no es cierta (al menos, tal como está), ya que los entrenadores enemigos ya no se mueven hacia el jugador para luchar contra ellos.
simonalexander2005

2
Para ser NP-Complete, debe poder codificar problemas NP-Hard y estar en NP. Falta la segunda cláusula de la respuesta anterior.
Yakk

Aunque esta respuesta es técnicamente buena, ¿realmente ilumina el problema a alguien lo suficientemente desconocido como para haber hecho la pregunta en primer lugar? Realmente no creo que lo haga ...
MaxW

20

Sinceramente, no sé exactamente qué tipo de modelo usan las personas que hacen esas afirmaciones; sin embargo, lo que me parece razonable sería hablar sobre la de decidir algo sobre una situación de juego.NP

Tomemos como ejemplo Tetris, ya que es el único de los que cita que entiendo lo suficiente como para hablar. Tetris tiene una regla llamada "claro perfecto", que le da al jugador una gran bonificación si una caída de pieza despeja el tablero por completo. Uno podría preguntarse si, dada una secuencia ordenada de piezas y un número entero , existe una secuencia legal de movimientos para las piezas que logra al menos claros perfectos. Los enunciados de problemas como los que son suficientemente abstractos pueden modelarse con las herramientas de la teoría de la complejidad.k P k{Pi}kPk

En pocas palabras, " -complete" significa una cosa y solo una cosa, afirmaciones sofisticadas como "Super Mario is -complete" tienen que traducirse en una declaración formal antes de que se realicen sentido.N PNPNP


1

Aquí hay una explicación simplista de agitar las manos:

Dichos juegos están en NP porque "ejecutar" el comportamiento de un jugador en el transcurso de un juego y verificar si gana o pierde se puede hacer de manera eficiente (necesitamos que sea en tiempo polinómico en la duración del juego, pero probablemente sea lineal u -ish).O(nlog(n))

Tales juegos son NP-hard porque el comportamiento del jugador es muy expresivo. Si bien en cualquier momento dado un jugador solo puede tener un número limitado, incluso fijo, de acciones posibles, eso es suficiente para crear un espacio de comportamientos o estrategias exponenciales en la duración del juego; y si bien puede proporcionar una condición simple o una fórmula lógica sobre la validez / beneficio / corrección de las acciones de un jugador a nivel local, globalmente obtendrá un efecto similar al de un circuito combinatorio grande o una fórmula k-CNF.

Con suerte, esto tiene un sentido intuitivo y también suena suficientes campanas de teoría CS.

PD: algunos juegos son mucho más complejos (computacionalmente) que eso. Por ejemplo, los juegos de mesa Hex , Go y Reversi son completos para PSPACE. Esto se debe esencialmente a que la fórmula que necesita satisfacer para una estrategia ganadora es una fórmula cuantificadora que alterna repetidamente: existe un movimiento por parte del jugador 1, de modo que para cada movimiento por parte del jugador 2, existe un movimiento por parte del jugador 1, etc., etc. de modo que con todos esos movimientos jugados, algunos de los movimientos del jugador 2 no son válidos o tenemos una secuencia válida que el jugador 1 ha ganado. Con los juegos NP, generalmente es solo el comportamiento / estrategia / elección de movimientos de un jugador.


"Espero que esto tenga un sentido intuitivo" - no para mí ...
Rafael

1

Para los juegos de un solo jugador, siempre puede hacer la pregunta "¿hay una estrategia ganadora para el jugador", y esa pregunta a menudo tiene una respuesta de "SÍ" que puede verificarse en tiempo polinómico, y puede muy bien ser NP completa.

Para los juegos de dos jugadores, la respuesta a menudo no se puede verificar en tiempo polinómico, porque para verificar que un movimiento para A es un movimiento ganador, debes demostrar que por cada respuesta de B habrá nuevamente un movimiento ganador para A y pronto.


0

Bueno, ciertamente está en NP, porque una posible solución es solo un número finito de entradas (en cada cuadro de entrada puede seleccionar cualquiera de los botones k, representamos cada selección de los botones para cada cuadro con una letra) que lo lleva a La pantalla de triunfo. Sabemos que este juego ha sido derrotado antes, por lo que sabemos que existe una solución. Un NTM pasa por encima de su cinta y adivina mágicamente un certificado correcto de longitud n. Luego simula a Super Mario con la entrada y lo verifica. La verificación se puede hacer en tiempo polinómico (tiempo lineal en realidad, si la solución es correcta, tomará exactamente n cuadros para ganar).

Para mostrar la completitud de NP, podríamos reducir 3-SAT al construir un comprobador de 3 sat con el generador de niveles (que se construye mediante la ejecución de código arbitrario https://www.youtube.com/watch?v=IOsvuEA2h4w ).

Por lo tanto, tenemos una entrada CNF 3-SAT, que primero verificamos el formato correcto. Si está mal formateado, solo lo traducimos en una entrada de 'salto' (no es posible vencer a Super Mario dentro de un cuadro haciendo un salto).

Llamamos a la longitud de la entrada 3-CNF n.

Si está formateado correctamente, lo traducimos a una cantidad de entradas, que construye el verificador 3-CNF para nosotros (siempre el mismo código de longitud k), traduce el 3-CNF en una Cadena de entradas, que construye el 3- específico CNF en el verificador (en O (n)), y verifica todas las posibles soluciones por fuerza bruta. Está inactivo y no hace nada, si después de analizar todas las soluciones, no se encuentra ninguna. Reinicia el juego y utiliza una solución conocida para Super Mario para vencer al juego (el código para hacerlo tiene la longitud j). Por lo tanto, nuestra transformación está en O (n), por lo que está dentro del tiempo polinomial.

Si el CNF está mal formateado, no ganamos (por definición, nuestra entrada no es ganadora, si no hemos ganado un cuadro después de la ejecución). Si el CNF no es satisfactorio, no ganamos (no puede ganar si está inactivo por un cuadro en el generador de niveles, nos aseguramos de eso en nuestro código). Si el CNF es satisfactorio, el verificador encuentra una solución que se reinicia y gana el juego. Por lo tanto, la reducción polinómica de 3-Sat a Super Mario está completa y hemos demostrado que Super Mario está NP-completo.

(Espero no haber estropeado esto en alguna parte. Nos encontramos con un problema de almacenamiento, si el 3-CNF es demasiado largo, pero el almacenamiento limitado generalmente se ignora en estos contextos, creo)


"Bueno, ciertamente está en NP, porque una posible solución es solo un número finito de entradas" Estar en NP requiere que la solución esté polinómicamente limitada en el tamaño de la entrada. Solo ser finito no es suficiente.
David Richerby

0

Reescribí esta respuesta para tratar de abordar algunos comentarios en una versión anterior.

Supongo que has leído la definición de Wikipedia para completar NP que realmente no se centra en los juegos. Voy a diluir un poco el significado exacto de NP-completitud y teoría del juego y explicaré la esencia de un juego NP-Complete.

Consideremos un juego de 2 jugadores con movimientos alternativos, más restrictivamente se trata esencialmente de juegos combinatorios . Básicamente, un juego en el que tienes algunos movimientos que puedes hacer y debes elegir uno de ellos. Te gustaría jugar "perfectamente", lo que significa que nunca harías un movimiento "malo". Entonces, de los movimientos permitidos, te gustaría seleccionar el mejor. (Por supuesto, tu oponente tiene el mismo objetivo ...)

Tenga en cuenta que el juego perfecto no significa que siempre ganará. Las reglas del juego pueden ser tales que gane el primer o el segundo jugador. También algunos juegos como Tic-Tac-Toe deberían terminar en empate. Por lo tanto, lo que significa "juego perfecto" en esta discusión es:
(1) Que nunca estarás en una posición ganadora y luego perderás el juego porque hiciste un movimiento "malo"
(2) Nunca perderás la oportunidad de obtener en la posición ganadora si surge esa oportunidad.

Dado el estado actual del juego, lo que le gustaría es poder usar un "algoritmo eficiente" para calcular el mejor movimiento. Por otro lado, observemos que un algoritmo que tiene que buscar en todo el árbol del juego es un "algoritmo ineficiente".

Ahora definamos "eficiencia" un poco más formalmente. Voy a simplificar esto un poco, pero la esencia es correcta. Considere la cantidad de cálculos, , que se deben hacer para elegir el próximo movimiento, que el promedio de cada movimiento tiene posibilidades (el factor de ramificación ) y que quedan movimientos en el juego. La noción también es que cada cálculo lleva el mismo tiempo para que el esfuerzo pueda traducirse en complejidad de tiempo , , en lugar de cálculos brutos.B n TCBnT

  • Un "algoritmo eficiente" tendrá: donde es un "entero pequeño" y ah son algunos números reales. Por lo tanto, el algoritmo eficiente se ejecuta en tiempo polinómico, ya que esta es una expresión polinómica.
    αTaBa+bBα1+cBα2+...+hB0
    α
  • Un "algoritmo ineficiente" tendrá: y este algoritmo se ejecuta en tiempo exponencial (es decir, tiempo no polinominal). El punto aquí es que a medida que crece, se produce una explosión combinatoria.
    nTaBn
    n

Ahora, el punto importante es que es imposible tener un algoritmo eficiente, el tiempo polinómico, que funcione perfectamente para un juego que completa NP. Para jugar perfectamente, un problema NP-completo debe, por definición, resolverse mediante un algoritmo ineficiente que se ejecuta en tiempo no polinómico.

Tenga en cuenta que el tiempo de ejecución se trata del número intrínseco de cálculos, no del tiempo de respuesta percibido por un humano. Para un juego pequeño como Tic-Tac-Toe, la computadora podría jugar todos los movimientos futuros posibles y aún responder rápidamente como lo percibe un humano.

Para Nim es posible crear un algoritmo de tiempo polinómico. En cualquier momento del juego, el algoritmo puede calcular qué jugador tiene un movimiento ganador y cuál debería ser ese movimiento.

Por otro lado, tomemos el juego de Qubic . (Estás tratando de hacer una línea de 4 en una cuadrícula 3D. Por lo tanto, es esencialmente tic-tac-toe en una cuadrícula de 4x4x4.) Qubic tiene NP completo, por lo que no hay un algoritmo de tiempo polinómico para calcular el siguiente movimiento perfecto. La única forma de saber si actualmente tiene un movimiento ganador es probar todos los movimientos posibles de ambos jugadores para verificar que un movimiento en particular sea un ganador, o al menos no un perdedor.

A decir verdad, todo el árbol del juego para Qubic es lo suficientemente pequeño como para que pueda codificarse en un programa informático que pueda jugar perfectamente. Lo que significa la codificación es que se ha explorado todo el árbol del juego y todos los movimientos se han resuelto de antemano. Entonces, el programa esencialmente puede hacer una llamada rápida a la base de datos usando el estado actual del tablero y recuperar el mejor movimiento para ese estado del tablero sin tener que hacer la búsqueda de árbol cada vez que se haga un movimiento. Esto es realmente un "truco" para nuestros propósitos aquí.

Ahora analicemos el ajedrez para analizar la función de evaluación ignorando algunas de las otras características de los programas de juego de ajedrez. El ajedrez sigue siendo un juego sin resolver . Se desconoce si el primer o segundo jugador debe ganar. No es posible obtener una posición en el tablero y predecir con certeza quién ganará. De hecho, el ajedrez tiene un árbol de juego tan grande que es imposible buscar en todo el árbol de juego. Necesitaría computadoras que no sean solo 10 o 100 veces más rápidas, sino miles de millones de veces más rápidas que cualquier computadora actual. (Existe la esperanza de que la computación cuántica pueda cortar este nudo gordiano).

Piense en la función de evaluación de ajedrez como si le diera a cada posible próximo movimiento una probabilidad de ser el mejor movimiento. Lo que hace un programa de ajedrez es combinar look aheads con la función de evaluación. Por lo tanto, el programa analiza todos los movimientos futuros posibles hasta que llega a un punto en el que se puede dar un "buen" puntaje a la posición del tablero. La computadora evalúa todas las rutas posibles a través del árbol de esta manera y luego elige la ruta con la mejor puntuación. Como la búsqueda nunca llegó al final del juego para todos los caminos que se evalúan, todos los programas de ajedrez finalmente utilizan una función de evaluación imperfecta. (Si está cerca del final del juego, entonces la computadora podría mirar todos los movimientos futuros posibles). Eso significa que podría ser posible vencer al programa incluso si el programa tenía una posición ganadora en algún momento.


"Es / imposible / tener un algoritmo eficiente, tiempo polinómico, para un juego que NP-completo. Un problema de NP-completo debe, por definición, ser resuelto por un algoritmo ineficiente que se ejecuta en tiempo no polinómico". - Eso no es correcto. No se sabe si es posible resolver problemas de NP completo en tiempo polinómico: la mayoría de los investigadores esperan firmemente que la respuesta sea "no", pero no lo sabemos con certeza, y no es por definición. Te animo a pasar más tiempo leyendo sobre la definición real de NP-complete. Puede encontrar algunos recursos en este sitio y en Wikipedia.
DW

@DW - Sí, me quedé un poco sin respuesta. Lo dije en el primer párrafo. Si lees el bit debajo de Qubic, también expliqué cómo se puede usar un algoritmo de tiempo polinómico para un juego "pequeño". Estaba tratando de dar una respuesta que el OP entendería, no escribir un libro sobre completitud de NP y teoría de juegos.
MaxW

@@ DW - Se me ocurrió que pensaba que estaba tomando implícitamente el juego perfecto. Agregué explícitamente esa calificación.
MaxW
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.