ATUALIZAÇÃO 26/07/2018: É isso aí! Agora estamos chegando ao ponto em que esse tipo de jogo será solucionável! Usando o OpenAI e baseado no jogo DotA 2, uma equipe poderia criar uma IA capaz de vencer jogadores semi-profissionais em um jogo 5v5 . Se você conhece o DotA 2, sabe que este jogo é bastante semelhante aos jogos do tipo Diablo em termos de mecânica, mas pode-se argumentar que é ainda mais complicado por causa do jogo em equipe.
Como esperado, isso foi alcançado graças aos mais recentes avanços no aprendizado por reforço com aprendizado profundo e usando estruturas de jogos abertas como o OpenAI, que facilitam o desenvolvimento de uma IA, uma vez que você obtém uma API pura e também porque pode acelerar o jogo (a IA foi reproduzida o equivalente a 180 anos de jogo contra si mesmo todos os dias!).
No dia 5 de agosto de 2018 (em 10 dias!) , Está previsto colocar essa IA contra os melhores jogadores do DotA 2. Se isso der certo, espere uma grande revolução, talvez não tão mediatizada quanto a solução do jogo Go, mas será um grande marco para a IA dos jogos!
ATUALIZAÇÃO 2017-01: O campo está se movendo muito rapidamente desde o sucesso do AlphaGo, e há novas estruturas para facilitar o desenvolvimento de algoritmos de aprendizado de máquina em jogos quase todos os meses. Aqui está uma lista dos mais recentes que encontrei:
- OpenAI's Universe : uma plataforma para jogar virtualmente qualquer jogo usando aprendizado de máquina . A API está em Python e executa os jogos atrás de um ambiente de área de trabalho remota VNC, para que possa capturar as imagens de qualquer jogo! Você provavelmente pode usar o Universe para jogar Diablo II através de um algoritmo de aprendizado de máquina!
- Academia da OpenAI : semelhante ao universo, mas direcionada especificamente aos algoritmos de aprendizado por reforço (por isso é uma generalização da estrutura usada pelo AlphaGo, mas para muitos outros jogos). Há um curso na Udemy que aborda a aplicação de aprendizado de máquina em jogos como breakout ou Doom usando o OpenAI Gym.
- TorchCraft : uma ponte entre o Torch (estrutura de aprendizado de máquina) e o StarCraft: Brood War.
- pyGTA5 : um projeto para construir carros autônomos no GTA5 usando apenas capturas de tela (com muitos vídeos online ).
Tempos muito emocionantes!
ATUALIZAÇÃO IMPORTANTE (2016-06): Conforme observado pelo OP, esse problema de treinar redes artificiais para jogar usando apenas entradas visuais agora está sendo abordado por várias instituições sérias, com resultados bastante promissores, como o DeepMind Deep-Qlearning-Network (DQN ) .
E agora, se você quiser enfrentar o desafio de próximo nível, pode usar uma das várias plataformas de desenvolvimento de jogos de visão de IA , como o ViZDoom , uma plataforma altamente otimizada (7000 fps) para treinar redes para jogar no Doom usando apenas entradas visuais :
O ViZDoom permite o desenvolvimento de bots de IA que reproduzem o Doom usando apenas as informações visuais (o buffer da tela). Destina-se principalmente à pesquisa em aprendizado visual de máquina e aprendizado de reforço profundo, em particular. O ViZDoom é baseado no ZDoom para fornecer a mecânica do jogo.
E os resultados são surpreendentes, veja os vídeos em sua página da Web e o bom tutorial (em Python) aqui!
Também existe um projeto semelhante para o Quake 3 Arena, chamado Quagents , que também fornece fácil acesso da API aos dados subjacentes do jogo, mas você pode descartá-los e usar apenas capturas de tela e a API apenas para controlar seu agente.
Por que essa plataforma é útil se usamos apenas capturas de tela? Mesmo se você não acessar os dados subjacentes do jogo, essa plataforma fornecerá:
- implementação de jogos de alto desempenho (você pode gerar mais dados / peças / gerações de aprendizado com menos tempo, para que seus algoritmos de aprendizado possam convergir mais rapidamente!).
- uma API simples e responsiva para controlar seus agentes (ou seja, se você tentar usar entradas humanas para controlar um jogo, alguns de seus comandos poderão ser perdidos; portanto, você também lidará com a falta de confiabilidade de suas saídas ...).
- configuração fácil de cenários personalizados .
- renderização personalizável (pode ser útil para "simplificar" as imagens obtidas para facilitar o processamento)
- reprodução sincronizada ("turn-by-turn") (para que você não precise que seu algoritmo funcione em tempo real no início, é uma enorme redução de complexidade).
- recursos adicionais de conveniência, como compatibilidade de plataforma cruzada, retrocompatibilidade (você não corre o risco de seu bot não trabalhar mais com o jogo quando houver uma nova atualização), etc.
Para resumir, o melhor dessas plataformas é que elas aliviam muitos dos problemas técnicos anteriores com os quais você teve que lidar (como manipular as entradas do jogo, como configurar cenários etc.), para que você apenas tenha que lidar com o algoritmo de aprendizado em si.
Então agora, comece a trabalhar e faça de nós o melhor bot visual de IA de todos os tempos;)
Post antigo descrevendo os problemas técnicos do desenvolvimento de uma IA confiando apenas em entradas visuais:
Ao contrário de alguns dos meus colegas acima, não acho que esse problema seja intratável. Mas certamente é muito difícil!
O primeiro problema, como apontado acima, é o da representação do estado do jogo : você não pode representar o estado completo com apenas uma imagem, é necessário manter algum tipo de memorização(saúde, mas também objetos equipados e itens disponíveis para uso, missões e objetivos, etc.). Para buscar essas informações, você tem duas maneiras: acessando diretamente os dados do jogo, que é o mais confiável e fácil; ou você pode criar uma representação abstrata dessas informações implementando alguns procedimentos simples (abrir inventário, tirar uma captura de tela, extrair os dados). Obviamente, a extração de dados de uma captura de tela exige que você faça algum procedimento supervisionado (que você define completamente) ou não supervisionado (por meio de um algoritmo de aprendizado de máquina, mas aumentará bastante a complexidade ...). Para o aprendizado de máquina não supervisionado, você precisará usar um tipo bastante recente de algoritmos chamado algoritmos de aprendizado estrutural (que aprendem a estrutura dos dados em vez de classificá-los ou prever um valor).http://techtalks.tv/talks/54422/
Então, outro problema é que, mesmo quando você busca todos os dados necessários, o jogo é apenas parcialmente observável . Assim, você precisa injetar um modelo abstrato do mundo e alimentá-lo com informações processadas do jogo, por exemplo, a localização do seu avatar, mas também a localização dos itens da missão, objetivos e inimigos fora da tela. Talvez você deva procurar em Filtros de Partículas de Mistura da Vermaak 2003 para isso.
Além disso, você precisa ter um agente autônomo , com objetivos gerados dinamicamente. Uma arquitetura conhecida que você pode tentar é o agente BDI, mas provavelmente precisará ajustá-la para que essa arquitetura funcione no seu caso prático. Como alternativa, há também a Rede de Petri Recursiva, que você provavelmente pode combinar com todos os tipos de variações das redes de petri para alcançar o que deseja, uma vez que é uma estrutura muito bem estudada e flexível, com ótimos procedimentos de formalização e provas.
E, finalmente, mesmo se você fizer tudo o que precede, será necessário encontrar uma maneira de emular o jogo em velocidade acelerada (usar um vídeo pode ser bom, mas o problema é que seu algoritmo só será exibido sem controle e poderá tentar por si só é muito importante para aprender). De fato, é sabido que o algoritmo atual de última geração leva muito mais tempo para aprender a mesma coisa que um ser humano pode aprender (ainda mais com o aprendizado por reforço), portanto, se não puder acelerar o processo ( ou seja, se você não puder acelerar o tempo do jogo), seu algoritmo nem convergirá em uma única vida ...
Para concluir, o que você deseja obter aqui está no limite (e talvez um pouco além) dos algoritmos atuais de última geração . Eu acho que pode ser possível, mas mesmo que seja, você vai gastar muito tempo , porque esse não é um problema teórico, mas um problema prático que você está abordando aqui e, portanto, você precisa implementar e combinar muito de diferentes abordagens de IA para resolvê-lo.
Várias décadas de pesquisa com uma equipe inteira trabalhando nela podem não ser suficientes; portanto, se você estiver sozinho e trabalhando em meio período (como provavelmente tem um emprego para viver), poderá passar a vida inteira sem chegar perto uma solução de trabalho.
Portanto, meu conselho mais importante aqui é que você diminua suas expectativas e tente reduzir a complexidadedo seu problema, usando todas as informações possíveis e evitar o máximo possível de capturas de tela (por exemplo, tente se conectar diretamente ao jogo, procure por injeção de DLL) e simplifique alguns problemas implementando procedimentos supervisionados. o algoritmo aprende tudo (por exemplo, elimine o processamento de imagens por enquanto o máximo possível e confie nas informações internas do jogo; posteriormente, se o algoritmo funcionar bem, você poderá substituir algumas partes do seu programa de IA pelo processamento de imagens, atingindo, assim, de maneira objetiva seu objetivo completo, por exemplo, se você conseguir que algo funcione muito bem, tente complexificar seu problema e substituir procedimentos supervisionados e dados de jogos de memória por algoritmos não-supervisionados de aprendizado de máquina em capturas de tela).
Boa sorte e, se funcionar, não se esqueça de publicar um artigo, você certamente será conhecido por resolver um problema prático tão difícil!