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.
50
Respostas:
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 .
fonte
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} k P k
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 PNP NP
fonte
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.
fonte
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.
fonte
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).
fonte
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 ...)
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 TC B n T
α
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.
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.
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.
fonte