Por que alguns jogos são np-completos?


50

Eu li a entrada da Wikipedia sobre " Lista de problemas NP-completos " e descobri que jogos como super mario, pokemon, tetris ou saga de doces são np-completos. Como posso imaginar a completude np de um jogo? As respostas não precisam ser muito precisas. Eu só quero ter uma visão geral do que significa que os jogos podem ser np-completos.


4
Veja a pergunta de referência sobre o NP-completeness. Acho que sua pergunta é muito ampla para o formato de troca de pilhas.
Kyle Jones

5
Em minecraft, você pode criar .... bem, um computador ... rodando .... minecraft?
Djsmiley2k #:

4
Construindo calculadoras usando Magic: the Gathering cards. Grande diversão :-)
Mastro

Essa não é uma resposta completa à pergunta que você está fazendo, mas está tão intimamente relacionada que é importante ressaltar: o conhecido designer de jogos (e proponente de métodos formais no design de jogos) Raph Koster teorizou que o a complexidade computacional dos jogos é fundamental para o desfrute contínuo deles. Ele define "diversão" como essencialmente uma resposta ao aprendizado de melhorar o desempenho de uma tarefa difícil em um ambiente não ameaçador, e ressalta que continuar fazendo isso em um sistema restrito como um jogo depende do sistema ter padrões de comportamento adequados. ..
Jules

... difícil ou impossível prever completamente com rapidez suficiente para usar essas previsões, forçando-nos a aprender de uma maneira menos direta (geralmente usando heurísticas). Problemas com alta complexidade (ele costuma sugerir NP Hard) são a maneira mais confiável de gerar tais padrões de comportamento, que (se ele estiver correto) é provavelmente o motivo pelo qual eles aparecem em tantos jogos conhecidos. Veja estes slides da conferência e este livro para mais.
Jules

Respostas:


72

Significa apenas que você pode criar níveis ou quebra-cabeças nesses jogos que codificam os problemas do NP-Hard. Você pode enfrentar um problema de coloração de gráfico, criar um nível associado de Super Mario Bros. e esse nível é passível de ultrapassagem se e somente se o gráfico for de três cores.

Se você quiser ver a maneira específica como os problemas do NP-Complete são traduzidos para os jogos, eu recomendo o artigo "Os jogos clássicos da Nintendo são difíceis (computacionalmente)" . É bem escrito e fácil de seguir.

Uma ressalva importante a ser lembrada é que a dureza NP exige a generalização dos jogos de maneiras "óbvias". Por exemplo, o Tetris normalmente possui uma placa de tamanho fixo, mas a prova de dureza exige que o jogo permita placas arbitrariamente grandes. Outro exemplo são os inimigos fora da tela em Super Mario Bros: a prova é para uma variante do jogo em que inimigos fora da tela continuam se movendo como se estivessem na tela, em vez de deixar de existir e voltar à sua posição inicial quando Mario voltar .


4
Não vale a pena responder por si só, mas o seguinte possui uma bela palestra em vídeo : ourses.csail.mit.edu/6.890/fall14/lectures/L05.html - Explicações claras.
user340082710

4
Pode valer a pena incluir uma declaração precisa de um teorema do artigo (imensamente interessante!) Que você vinculou, que explica de maneira sucinta e precisa exatamente o que significa dizer que um jogo é NP-difícil: É NP-difícil decidir se a meta é acessível a partir do início de uma etapa em generalizada Super Mario
ymbirtt

talvez não relacionado, mas com os jogos mais recentes de Pokémon (Sun e Moon), a prova no artigo não é mais verdadeira (pelo menos, como é), pois os treinadores inimigos não se movem mais em direção ao jogador para combatê-los.
precisa saber é o seguinte

2
Para ser NP-Complete, você deve ser capaz de codificar problemas de NP-Hard e estar no NP. A segunda cláusula está ausente na resposta acima.
Yakk 8/17

Embora essa resposta seja tecnicamente boa, ela realmente esclarece o problema para alguém que não conhece o suficiente para ter feito a pergunta em primeiro lugar? Realmente não acho que isso
aconteça

20

Sinceramente, não sei exatamente que tipo de modelo é usado pelas pessoas que fazem essas afirmações; no entanto, o que me parece razoável seria falar sobre a de decidir algo sobre uma situação de jogo.NP

Vamos dar como exemplo o Tetris, já que é o único daqueles que você cita que eu entendo o suficiente para falar. Tetris tem uma regra chamada "clear clear", que dá ao jogador um grande bônus se uma queda de uma peça limpar completamente o tabuleiro. Pode-se perguntar se, dada uma sequência ordenada de peças e um número inteiro , existe uma sequência legal de movimentos para as peças que atingem pelo menos limpezas perfeitas. Declarações de problemas como essas são suficientemente abstratas que podem ser modeladas com as ferramentas da teoria da complexidade.k P k{Pi}kPk

Para encurtar a história, " -complete" significa uma coisa e apenas uma coisa, alegações sofisticadas como "Super Mario é -complete" precisam ser traduzidas em uma declaração formal antes de serem efetivadas. sentido.N PNPNP


1

Aqui está uma explicação simplista para acenar com a mão:

Esses jogos estão no NP porque "executar" o comportamento de um jogador ao longo de um jogo e verificar se ele vence ou perde, pode ser feito com eficiência (precisamos que seja em tempo polinomial durante o jogo, mas provavelmente é linear ou -ish).O(nlog(n))

Esses jogos são difíceis de NP porque o comportamento do jogador é muito expressivo. Enquanto em um determinado momento um jogador pode ter apenas um número limitado, mesmo fixo, de ações possíveis, isso é suficiente para criar um espaço de comportamentos ou estratégias exponenciais na duração do jogo; e embora você possa fornecer uma condição simples ou fórmula lógica sobre a validade / benefício / correção das ações de um jogador localmente, globalmente você obtém um efeito semelhante ao de um grande circuito combinatório ou a uma fórmula k-CNF.

Espero que isso faça algum sentido intuitivo e também toque bastante a teoria da CS.

PS - Alguns jogos são muito mais complexos (computacionalmente) que isso. Por exemplo, os jogos de tabuleiro Hex , Go e Reversi estão completos no PSPACE. Isso ocorre basicamente porque a fórmula que você precisa satisfazer para uma estratégia vencedora é uma fórmula de quantificador alternado repetidamente: existe um movimento do jogador 1, de modo que, para cada movimento do jogador 2, exista um movimento do jogador 1 etc. etc. de modo que, com todos esses movimentos executados, alguns dos movimentos do jogador 2 são inválidos ou temos uma sequência válida que o jogador 1 ganhou. Nos jogos NP, normalmente é apenas o comportamento / estratégia / escolha de movimentos de um jogador.


"Espero que isso faça algum sentido intuitivo" - não faz para mim ...
Raphael

1

Para jogos para um jogador, você sempre pode fazer a pergunta "existe uma estratégia vencedora para o jogador", e essa pergunta geralmente tem uma resposta "SIM" que pode ser verificada em tempo polinomial e pode muito bem estar com o NP completo.

Para jogos para dois jogadores, muitas vezes a resposta não pode ser verificada em tempo polinomial, porque para verificar se uma jogada para A é uma jogada vencedora, você deve demonstrar que para cada resposta de B haveria novamente uma jogada vencedora para A e em breve.


0

Bem, certamente está no NP, porque uma solução possível é apenas um número finito de entradas (em cada quadro de entrada você pode selecionar qualquer um dos botões k, representamos cada seleção dos botões de cada quadro com uma letra) que o leva a a tela de vitória. Sabemos que este jogo já foi derrotado antes, então sabemos que existe uma solução. Um NTM passa por cima da fita e adivinha magicamente um certificado correto de comprimento n. Em seguida, ele simula Super Mario com a entrada e a verifica. A verificação pode ser feita em tempo polinomial (tempo linear, na verdade, se a solução estiver correta, serão necessários exatamente n quadros para vencer).

Para mostrar a completude do NP, podemos reduzir o 3-SAT criando um verificador de 3-Sat com o gerador de nível (que é construído através da execução arbitrária do código https://www.youtube.com/watch?v=IOsvuEA2h4w ).

Portanto, temos uma entrada 3-SAT CNF, que verificamos primeiro a formatação correta. Se estiver mal formatado, apenas o traduziremos em uma entrada de 'salto' (não é possível vencer o Super Mario dentro de um quadro fazendo um salto).

Chamamos o comprimento da entrada 3-CNF n.

Se estiver formatado corretamente, nós o traduzimos em várias entradas, que constroem o verificador 3-CNF para nós (sempre o mesmo código de comprimento k), convertem o 3-CNF em uma sequência de entradas, que constrói os 3 específicos CNF no verificador (em O (n)) e verifica todas as soluções possíveis por força bruta. Ele fica ocioso e não faz nada, se depois de analisar todas as soluções, nenhuma for encontrada. Reinicia o jogo e usa uma solução conhecida para Super Mario para vencer o jogo (o código para fazer isso tem o comprimento j). Nossa transformação é, portanto, em O (n), portanto é dentro do tempo polinomial.

Se o CNF estiver mal formatado, não venceremos (por definição, nossa entrada não está ganhando, se não ganharmos um quadro após a execução). Se o CNF não for satisfatório, não venceremos (você não pode vencer inativo por um quadro no gerador de níveis, garantimos isso em nosso código). Se o CNF for satisfatório, o verificador encontra uma solução reiniciada e vence o jogo. Assim, a redução polinomial de 3-Sat para Super Mario está completa e comprovamos que Super Mario é NP-completo.

(Espero não ter estragado tudo isso em algum lugar. Temos um problema de armazenamento, se o 3-CNF for muito longo, mas o armazenamento limitado geralmente é ignorado nesses contextos, acredito).


"Bem, certamente está no NP, porque uma solução possível é apenas um número finito de entradas" Estar no NP exige que a solução seja polinomialmente delimitada no tamanho da entrada. Apenas ser finito não é suficiente.
David Richerby

0

Reescrevi esta resposta para tentar abordar alguns comentários em uma versão anterior.

Suponho que você leu a definição da Wikipedia para completude NP, que realmente não se concentra nos jogos. Vou diluir um pouco o significado exato da NP-completude e da teoria dos jogos e explicar a essência de um jogo NP-Complete.

Vamos considerar um jogo para 2 jogadores com movimentos alternativos, de forma mais restritiva, isso é essencialmente sobre jogos combinatórios . Basicamente, um jogo em que você tem alguns movimentos que podem ser feitos e você deve escolher um deles. Você gostaria de jogar "perfeitamente", o que significa que nunca faria uma jogada "ruim". Então, dos movimentos permitidos que você deseja selecionar o melhor. (É claro que seu oponente tem o mesmo objetivo ...)

Observe que o jogo perfeito não significa que você sempre vencerá. As regras do jogo podem ser tais que o primeiro ou o segundo jogador ganhem. Além disso, alguns jogos como o Tic-Tac-Toe devem terminar empatados. Portanto, o que significa "jogo perfeito" nesta discussão é:
(1) Você nunca estará em uma posição vencedora e depois perderá o jogo porque fez um movimento "ruim"
(2) Você nunca perderá a oportunidade de obter para a posição vencedora, se surgir essa oportunidade.

Dado o estado atual do jogo, você gostaria de poder usar um "algoritmo eficiente" para calcular a melhor jogada. Por outro lado, note que um algoritmo que precisa pesquisar por toda a árvore do jogo é um "algoritmo ineficiente".

Agora vamos definir "eficiência" um pouco mais formal. Vou simplificar um pouco, mas a essência está correta. Considere o número de cálculos, , que devem ser feitos para escolher a próxima jogada, que a média de cada jogada tem possibilidades (o fator de ramificação ) e que existem jogadas no jogo. A noção também é de que cada cálculo leva o mesmo tempo para que o esforço possa ser traduzido em complexidade de tempo , , em vez de cálculos brutos.B n TCBnT

  • Um "algoritmo eficiente" terá: que é um "número inteiro pequeno" e ah são alguns números reais. Assim, o algoritmo eficiente é executado em tempo polinomial, pois é uma expressão polinomial.
    αTaBa+bBα1+cBα2+...+hB0
    α
  • Um "algoritmo ineficiente" terá: e esse algoritmo é executado em tempo exponencial (isto é, tempo não polinominal). O ponto aqui é que, à medida que aumenta, ocorre uma explosão combinatória.
    nTaBn
    n

Agora, o ponto importante é que é impossível ter um algoritmo eficiente, o tempo polinomial, que joga perfeitamente para um jogo que NP completa. Para jogar perfeitamente, um problema NP-completo deve, por definição, ser resolvido por um algoritmo ineficiente que é executado em tempo não polinomial.

Observe que o tempo de execução é sobre o número intrínseco de cálculos, não o tempo de resposta percebido pelo ser humano. Para um jogo pequeno como o Tic-Tac-Toe, o computador pode executar todos os movimentos futuros possíveis e ainda responder rapidamente como percebido por um humano.

Para Nim , é possível criar um algoritmo de tempo polinomial. Em qualquer ponto do jogo, o algoritmo pode calcular qual jogador tem uma jogada vencedora e qual deve ser essa jogada.

Por outro lado, vamos jogar o jogo Qubic . (Você está tentando fazer uma linha de 4 em uma grade 3D. Portanto, é essencialmente jogo da velha em uma grade 4x4x4.) Qubic é NP-completo, portanto, não há algoritmo de tempo polinomial para calcular o próximo movimento perfeito. A única maneira de saber se você tem uma jogada vencedora é tentar todas as jogadas possíveis de ambos os jogadores para verificar se uma jogada em particular é vencedora ou, pelo menos, não perdedora.

Na verdade, toda a árvore de jogos do Qubic é pequena o suficiente para que possa ser codificada em um programa de computador que possa ser reproduzido perfeitamente. O que significa codificação é que toda a árvore do jogo foi explorada e todos os movimentos foram trabalhados com antecedência. Portanto, o programa pode essencialmente fazer uma chamada rápida ao banco de dados usando o estado atual da placa e recuperar a melhor jogada para esse estado da placa sem precisar fazer a pesquisa em árvore toda vez que uma mudança for feita. Este é realmente um "truque" para nossos propósitos aqui.

Agora vamos discutir xadrez para discutir a função de avaliação, ignorando alguns dos outros recursos dos programas de xadrez. O xadrez ainda é um jogo não resolvido . Não se sabe se o primeiro ou o segundo jogador deve ganhar. Não é possível ter nenhuma posição no conselho e prever com certeza quem vencerá. De fato, o xadrez tem uma árvore de jogo tão grande que é impossível pesquisar a árvore inteira. Você precisaria de computadores não apenas 10 ou 100 vezes mais rápidos, mas bilhões de bilhões de tempo mais rápidos do que qualquer computador atual. (Existe a esperança de que a computação quântica possa atravessar esse nó górdio.)

Pense na função de avaliação do xadrez como dando a cada próximo passo possível a probabilidade de ser o melhor. O que um programa de xadrez faz é combinar o futuro com a função de avaliação. Assim, o programa analisa todos os movimentos futuros possíveis até chegar a um ponto em que uma pontuação "boa" possa ser atribuída à posição do conselho. O computador avalia todos os caminhos possíveis pela árvore dessa maneira e escolhe o caminho com a melhor pontuação. Como a busca nunca chegou ao fim do jogo por todos os caminhos que estão sendo avaliados, todos os programas de xadrez acabam usando uma função de avaliação imperfeita. (Se você estiver próximo do final do jogo, o computador poderá analisar todas as possíveis jogadas futuras.) Isso significa que pode ser possível vencer o programa mesmo que ele tenha uma posição vencedora em algum momento.


"é / impossível / ter um algoritmo eficiente, tempo polinomial, para um jogo com NP completo. Um problema de NP completo deve, por definição, ser resolvido por um algoritmo ineficiente que é executado em tempo não polinomial". - Isso não é correto. Não se sabe se é possível resolver problemas completos de NP em tempo polinomial: a maioria dos pesquisadores espera fortemente que a resposta seja "não", mas não sabemos ao certo, e não é por definição. Convido você a passar mais tempo lendo sobre a definição real de NP-complete. Você pode encontrar alguns recursos neste site e na Wikipedia.
DW

@ DW - Sim, enganei a resposta um pouco. Eu disse isso no primeiro parágrafo. Se você leu o trecho abaixo do Qubic, também expliquei como um algoritmo de tempo polinomial pode ser usado para um jogo "pequeno". Eu estava tentando dar uma resposta que o OP entenderia não escrever um livro sobre NP-completeness e teoria dos jogos.
MaxW

@@ DW - Ocorreu-me que eu pensava que estava implicitamente jogando com um jogo perfeito. Eu adicionei explicitamente essa qualificação.
MaxW
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.