I.A Jogo 2048

6 respostas Resolvido
T

Olá, sou um estudante de Analise de Sistemas na FATEC, estou no último ano e gostaria de criar aprender a criar uma I.A que conseguisse jogar esse game, alguém poderia me ajudar? Não sou um leigo completo quando se trata de I.A, já li pedaços de livros bons, como o Inteligência Artificial de George F. Luger 6ª Edição, estou vendo vídeo aulas de introdução a I.A no Udacity e aprendi bastante da parte conceitual, além de acompanhar canais do You Tube que falam do tema como o Peixe Babel.

Entretanto, definitivamente sou um iniciante, nunca implementei NADA de I.A, apenas sei dar nome aos bois que na minha opinião é quase nada, talvez uma definição melhor para mim é quase leigo.

Alguém poderia me ajudar na parte prática? Eu estudo, estudo e estudo, mas só vem teoria atrás de teoria, eu entendo que é importante a teoria e acho interessante até, mas gostaria de fazer algo mais concreto nem que seja algo mais simples do que o tema que sugeri.

Obs: Infelizmente a faculdade aonde estudo I.A está fora da grade, meu conhecimento é todo autodidata.

Espero ansiosamente suas respostas, muito obrigado.

Para quem não conhece, o jogo 2048 é esse:

6 Respostas

T

Que tipo de respostas você espera? Sugestões de problemas e implementações?

Os materiais que você está lendo devem ter alguma sugestão de exercício e problemas que você pode tentar. Procure também jogos simples (damas, pedra-papel-tesoura, jogo da velha) e procure sobre implementações de IA para eles (exemplo 2048 AI )

Coisa que você pode querer dar uma olhada:

Abraço.

T

Infelizmente aonde estou estudando entra capitulo, sai capitulo e apenas me deparo com teoria…

Isso está me frustando um pouco e gostaria de aprender algo na prática.

E sempre que procuro outra fonte, só me parece mais teoria ou livros (a quais no momento não posso comprar), gostaria de uma fonte que ensinasse o conteúdo de uma forma menos teórica.

Estou tendo dificuldade de encontrar, já assisti milhares de vídeo-aulas, mas elas terminam muitas vezes no meio, bem antes de chegar na prática.

As fontes que tenho descobri vomitam tonelada de conhecimento biológico, psicológico e estatístico (principalmente o livro do George) e no Udacity, eles ensinam a teoria por trás como o busca em profundidade, busca em largura, A*, mas não chegam na prática.

Até mesmo o famoso exemplo do aspirador e das salas eu vi lá na teoria, o máximo que vi de prática foi de matemática, de como calcular as probabilidades de acordo com os eventos e salas disponíveis, mas no quesito código, não foi dito nenhuma linha.

Resumindo, quero um lugar que posso aprender I.A programando, assim como nas minhas aulas de POO que me ensinam a teoria juntamente com a prática.

Mais ou menos como o curso em vídeo faz com POO:

Na qual ele ensina a teoria e logo depois ensina como programa-la.

Abraço e obrigado pela resposta.

Obs: Obrigado também pelos links

L
Solucao aceita

Thiago,

Como esse problema envolve incerteza no ambiente (os números aleatórios que surgem), acredito que duas abordagens que poderiam funcionar são:

  1. Utility Agent simplificado: Toda vez que chega o turno do agente (a hora de apertar a setinha pra fazer algo no tabuleiro), ele vai simplesmente avaliar as possibilidades (apertar esquerda, cima, direita ou baixo, quando possível) e decidir qual gera o melhor outcome para ele. Um outcome seria uma espécie de nota, ou valor para um estado tabuleiro. Imagine que existe uma função mágica chamada calcularValorDoEstado(tabuleiro), que retorna um número. O algoritmo seria mais ou menos assim (pseudo-código, meio python, meio qualquer coisa hehe):

    funcao tomarDecisao(jogo):
        tabuleiro = jogo.getTabuleiro()
        acoesPossiveis = tabuleiro.getAcoesPossiveis()
        melhorValor = null;
        melhorAcao = null;
        for acao in acoesPossiveis:
            valor = calcularValorDoEstado(tabuleiro)
            if valor melhor que melhorValor:
                melhorValor = valor
                melhorAcao = acao
        return melhorAcao // retorna a acao que gera o melhor tabuleiro, de acordo com a funcao calcularValorDoEstado
    

    O problema é implementar essa função, calculaValorDoEstado. Você precisa converter o estado em um número, de forma que o algoritmo consiga diferenciar dois tabuleiros e decidir qual deles é melhor, para que possa tomar a melhor ação. Você pode pontuar várias características do tabuleiro, como:

    • Beneficiar pela quantidade de peças que vai ficar no tabuleiro após o movimento (quanto menos peças melhor)
    • Beneficiar pela quantidade de peças que pode ser juntada na próxima jogada, depois dessa que está sendo analisada (mais peças para juntar = melhor)
    • Penalizar (retorna um número negativo) se aquele movimento acaba com o jogo e é uma derrota
    • Beneficiar absurdamente se aquele movimento ganha o jogo (monta o 2048)

    Enfim, modelar uma função dessa é uma arte. Recomendo a leitura do livro Artificial Intelligence: A modern approach, do Stuart Russell/Peter Norvig. Tem tudo lá!

  2. Busca com a árvore E/Ou (And/Or Tree): também tem no livro do Russell. Resumindo, você vai criar um plano de contenção (uma árvore e/ou), que prevê todas as possibilidades de aparecimento de números no tabuleiro e possui uma solução para todas elas. Eu não sei se tem como fazer isso, porque a árvore de busca desse jogo parece ser gigantesca. Essa solução com certeza iria resolver o problema, porque ia prever tudo (resolver não significa ganhar sempre, porque existe a aleatoriedade. O jogo pode simplesmente te dar uma rasteira colocando um bloco 2 no meio dos teus dois blocos 1024). Vale a pena tentar pra ver no que dá.

Entre as várias outras possíveis abordagens, tem uma que pode ser bem interessante:

Existem algoritmos para tentar prever o modelo probabilístico do ambiente. Você pode tentar fazer um agente capaz de tentar prever quais são os próximos números que vão aparecer, e onde. O agente aprende errado, e fica cada vez melhor no jogo. Porém, isso tudo cai por água a baixo se o algoritmo do jogo for completamente aleatório. De novo, tem muito material sobre isso no livro do Russell (tem dois capítulos extremamente fodas sobre isso lá, Probabilistic Reasoning e Learning Probabilistic Models).

Mais uma vez, mencionando o livro do Russell, existem outras várias possíveis soluções para lidar com a incerteza do ambiente. Vale a leitura, com certeza!

Boa sorte :slight_smile:

T

Opa, muito obrigado, vou dar uma lida.
Existe edição em português dele?

L

Tem uma tradução pra vender na Amazon, mas o preço é bem salgado… eu diria que vale a pena comprar, porque é um baita curso de IA. É o livro referência de IA no mundo inteiro.

Se você não puder comprar agora, dá uma procurada, vai achar um PDF em português do livro por aí.

T

Obrigado, vou ser ver se acho o E-book, para pagar menos (apesar de preferir livro físico).

Criado 7 de março de 2017
Ultima resposta 7 de mar. de 2017
Respostas 6
Participantes 3