I.A Jogo 2048

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:

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.

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

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:

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

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í.

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