Idade da guerra-AI
Age of War AI, um projeto em que passei uma quantidade abominada de tempo, que se transformou em um código de espaguete maciço. Foi o meu primeiro grande projeto e me mostrou o quanto mais eu tinha que aprender porque estava faltando (e ainda o faço provavelmente) em todos os campos. No contexto deste projeto, fiz o seguinte:
Como não fazer um projeto
- Obtenha o jogo da Era da Guerra da Vanilla, faça um módulo que extrai dados via OpenCV Library à medida que o jogo continua e o alimenta no algoritmo puro. O que eu não percebi é que avaliar de 30 a 50 agentes em um jogo que não está acelerando e o tempo de reprodução média de 10 minutos por sessão leva muito tempo para treinar e não produziu resultados significativos
- Obtenha o mecanismo de trapaça, perceba que não funciona com este jogo específico para quem sabe que motivo, encontre um decompilador para jogos de flash e injete um script no jogo que gera arquivos de texto para contornar toda a coisa do OpenCV para obter valores. Recebi resultados um pouco melhores, pois consegui acelerar o jogo X2 com o mecanismo de truques, mas ainda estava faltando muito.
- Faça a unidade. Desde que eu já encontrei um caminho para o código do jogo, reversei a mecânica de TI e fiz uma simulação bastante fiel na unidade que tinha exatamente os mesmos parâmetros do jogo original.
- Simule 50 ambientes em unidade com velocidade de 10x e faça com que eles se comuniquem via TCP com meu script python que agora tinha um gerente de Deus para todos esses ambientes e suas respectivas ações. Aqui, na verdade, comecei a ver alguns resultados e estratégias significativos desenvolvendo e conseguindo vencer no modo normal Yay. Mas eu queria moe
- Alterne completamente os agentes da Unity ML, essencialmente abandonando o script, treinar e agente do Python com PPO e obtê -lo após toneladas de troca de parâmetros e suas funções, faça com que tenha uma estratégia bastante boa que vence o jogo no modo duro
- Teste -o no jogo original e grave -o vencendo e perceba que você perdeu 2 meses em um projeto que poderia ter sido concluído em menos de 3 semanas
- Ainda faço uma biblioteca de visualização para arrumar usando o mecanismo matemático Manim porque encontrei alguns vídeos legais do YouTube sobre o tópico que não publicaram seus repositórios
Você pode ver a visão geral dessa dor aqui - voltarei 100% a esse canal para que o seja pelo menos 1 milhão, mas por enquanto tenho outros objetivos a perseguir.
Correndo no Python 3.7.9
Entradas:
- Número de tropas em treinamento (1 entrada)
- HP inimigo - porcentagem da saúde total (1 entrada)
- Meu HP - porcentagem da saúde total (1 entrada)
- Dinheiro - Normalizado pelo custo unitário básico (dinheiro/custe_of_basic_unit) (1 entrada)
- XP - pode atualizar a idade ou não (1 entrada)
- Pode ativar a habilidade - 0 a 1 recarga (1 entrada)
- Minhas tropas no solo tipo 1, 2, 3, 4 (4 entradas)
- Tropas inimigas no solo tipo 1, 2, 3, 4 (4 entradas)
- Número de slots de canhão disponíveis (1 entrada)
- Idade do jogador - Um codificado a quente (5 entradas)
- Idade do inimigo - um quente codificado (5 entradas)
- Matriz com torres e torres envelhece (máximo) (1 entrada para o tipo, pois elas ficam progressivamente mais fortes e 1 entrada para a depreciação etária) (2 para cada slot) (8 entradas)
- Onde está a batalha atual (0-1 Sua base para a base do inimigo) (1 entrada)
Saídas:
- Criar tropas Nível 1, 2, 3 (3 ações)
- Crie Tropas Tier 4 para a Era Espacial (1 ação)
- Compre canhão de canhão (1 ação)
- Compre o Nível 1, 2, 3, Primeiro Slot Disponível (3 Ações)
- Venda Cannon em um certo slot (4 ações)
- Espere (1 ação)
- habilidade de usar
Dependências:
- Numpy
- Paddle OCR
- Open-cv
- Scipy
- python
pip install numpy paddlepaddle paddleocr opencv-python scipy neat-python
Os ativos funcionam apenas para a resolução específica, se você deseja modificar a resolução do jogo, precisará alterar o tamanho dos ativos de acordo (por exemplo: fazer o jogo e os ativos x% menores)
Você pode baixar o arquivo que usei para o jogo daqui