A. I. Learns to Play Starcraft 2 (Reinforcement Learning)

starcraft 2 é um jogo multijogador onde o
objetivo é simplesmente eliminar os outros jogadores você faz isso com um exército de unidades de ataque que nós gostamos
disso nós não gostamos disso essas unidades de ataque custam recursos para fazer então você provavelmente precisa configurar uma
base de construção vários edifícios coletam recursos e então você pode construir aquele exército.

use o código python para jogar o jogo para nós, mesmo isso, no entanto, leva um tempo para dominar
todas  as estratégias, mas também somos praticantes de aprendizado de máquina poderíamos simplesmente importar algum
aprendizado de reforço das linhas de base estável 3 e jogar o jogo, acho que vai para ser  um
pouco mais difícil do que isso, mas digamos que realmente queremos usar o aprendizado por reforço profundo
para jogar Starcraft 2.

Como podemos realmente fazer isso l Como a maioria dos problemas de aprendizado profundo no
nível macro, temos que considerar quais serão nossas entradas e quais serão nossas saídas, pois essas são
as coisas sobre as quais realmente temos controle e temos que determinar as características delas
antes do tempo para a entrada quais informações achamos que a rede neural realmente precisará
neste caso, pode ser literalmente o jogo visuais como os quadros do jogo pode ser
alguma outra representação gráfica ou pode ser apenas um vetor de valores como número de unidades
e minerais e localizações de coisas e assim por diante então, para a saída deste modelo, precisamos
considerar o que esta rede neural pode realmente decidir essencialmente com
aprendizado de reforço profundo neste caso, serão as ações que o modelo pode realmente executar,
como  expandir e construir nossa base para atacar o inimigo e assim por diante para a entrada no
modelo  acho que algo como o minimapa é realmente   um bom candidato para entrada de modelo mostrando
o jogo real significaria que o agente teria que criar alguma lógica para mover
a câmera ou provavelmente acabaria prestando atenção principalmente no minimapa de qualquer maneira,
então  acho que construir nossa própria versão do mini-mapa com os dados que consideramos importantes, acho
que é o melhor ponto de partida para o mapa de entrada   vamos começar com uma tela em branco que
é simplesmente o tamanho do mapa do jogo, então primeiro vamos para desenhar os minerais não apenas
vamos desenhá-los, mas também os tornaremos mais brilhantes quanto mais minerais restarem, usaremos
o mesmo conceito para minerais e gás, mas também uma ideia semelhante para construção e unidade
saúde aqui está o resultado disso até agora só podemos reunir informações sobre minerais que podemos
ver com unidades, e é por isso que alguns deles são apenas muito escuros e alguns são muito brilhantes os
escuros nós apenas não vimos então temos não faço ideia   de quantos minerais existem e a seguir marcaremos o
local inicial do inimigo com um ponto vermelho, então vamos   usar uma estratégia semelhante para as unidades inimigas em
outro vermelho e depois as estruturas inimigas também em uma cor vermelha, então vamos marcar as nossas nexus
edifícios em uma cor azul claro e depois todas as outras estruturas em uma cor esverdeada vamos
marcar vespine como rosa estamos fazendo isso depois de nossas estruturas porque se simplesmente colocarmos uma estrutura em
cima do vespine não teríamos na verdade, sei qual a quantidade de giro estava certa, você só pode ter
uma coisa em um quadrado, então eu apenas desenhei os prédios primeiro porque acabamos construindo
um prédio em cima do gás para coletar o gás então desenhe os prédios primeiro e depois desenhe o melhor
feijão então, finalmente, desenharemos todas as nossas unidades, que serão verdes por padrão, mas vamos
colorir a unidade void ray, que é nossa unidade de ataque, especificamente um azul, acho que isso nos dá um
resultado final muito bom, onde é razoavelmente fácil de ver   o que está acontecendo no jogo eu fiz a maior parte do meu r
d aqui no linux o que não me permitia rodar a representação gráfica do jogo e apenas
assistir jogos com esta representação eu acho  é muito fácil ver o que está acontecendo como
estamos  e tudo o que eu acho que você definitivamente poderia tomar boas decisões com esta informação, então eu
acho que este será um bom ponto de partida para entrada em nosso modelo, funcionará, talvez lembre-se
a melhor coisa que podemos fazer é manter as coisas simples para iniciar um problema já posso
imaginar que isso é apenas uma tonelada   principalmente de ruído por entrada, a imagem está quase
vazia, então será uma área que provavelmente poderíamos   melhorar mais tarde, mas agora que
temos  entrada de rede, precisamos lidar com a saída lógica que serão as ações de macro que
vamos permitir que o agente de aprendizado por reforço execute para a ação 0, estou me referindo a ela como a
ação de expansão este é o código para isso essencialmente para expands queremos ter certeza de que temos e
suprimento suficiente para crescer e construir quantos raios nulos desejarmos, se tivermos isso, verificaremos
se temos sondas suficientes, essas são essencialmente as unidades de trabalho, se não construirmos mais se
não precisarmos delas, então vamos construir assimiladores para coletar o gás vespínico finalmente, se tivermos
tudo isso, então vamos fazer outra base em outra área de recursos para a ação 1, trata-se de construir
portais estelares e, para construir portais estelares, precisamos de portais e núcleos cibernéticos também existam, se não existirem
existe, construa-os, caso contrário, construa um portal estelar agora mesmo, o código está limitando um portal estelar por base,
mas isso pode ser alterado para permitir que a IA faça portais estelares infinitos teoricamente
acelerando a capacidade de você construir raios nulos mais rápido para a ação número dois, se pudermos pagar
e podemos construir um void ray construir uma ação número três, isso é fazer reconhecimento apenas não muito
frequentemente, essencialmente, o reconhecimento é enviar uma sonda   pobre para sua morte certa e estamos apenas
fazendo isso t Para ver o que o inimigo está fazendo inicialmente vamos começar completamente
aleatórios, então, teoricamente, um em cada seis quadros poderíamos enviar uma sonda e isso
seria  mais rápido do que poderíamos construir sondas então, apenas para limitar isso, nós ao adicionar uma vez a cada
200 quadros, é quando você pode enviar outro batedor   a ação quatro é atacar primeiro, vamos
procurar  unidades próximas, depois edifícios próximos, qualquer unidade conhecida e qualquer edifício conhecido por
raio vazio se tudo mais falhar, então vamos enviar os raios nulos para o local inicial do inimigo,
provavelmente poderíamos ficar um pouco mais sofisticados aqui, pois é totalmente possível erradicarmos o inimigo de
seu local inicial e não temos ideia de onde   é a partir deste ponto, mas está em algum lugar construindo
sua base e coletando recursos e tudo mais talvez queiramos ter algum tipo de habilidade para
caçar ou procurar o inimigo em outros locais finalmente a ação 5 é principalmente dobrar o rabo e pular os
raios vazios também devem então seja capaz de simplesmente retornar à base depois de uma luta, então não é
apenas para fugir, mas também para trazer nossos raios nulos   de volta para casa.
trazê-los de volta às vezes neste ponto
a última coisa que precisamos fazer é calcular uma recompensa para o agente aprender, mas primeiro
este é um experimento digno de
todo ação única no jogo e devemos nos perguntar como saberemos se esse agente
é bom ou não, precisamos de um benchmark para comparar então, antes de perdermos nosso tempo com um mecanismo de recompensa
e todo o rd exigido lá, que honestamente costuma ser o mais difícil parte de qualquer
desenvolvimento de aprendizado por reforço, realmente precisamos testar random, que é realmente apenas uma questão de quão
bom um agente se sai se for apenas aleatoriamente escolhendo ações, temos muitos códigos auxiliares aqui
alguns à prova de falhas s não é realmente possível que ações escolhidas aleatoriamente também ganhem jogos ou  pelo
menos sejam remotamente comparáveis ​​a qualquer agente de aprendizado de reforço   bem, podemos testar isso facilmente
depois de executar 200 jogos executando ações aleatórias não ganhamos um único jogo ok i acho que
temos algo que certamente podemos trabalhar para todos agora, vamos falar sobre recompensa para que o
agente  aprenda qualquer coisa, precisamos recompensá-lo por   citar entre aspas bons agentes gratificantes e
aprendizado por reforço geralmente é a parte mais difícil de tudo, veja nosso problema por exemplo, o
objetivo real aqui é ganhar jogos, é bem simples, se vencermos, podemos dar uma recompensa ao agente e
se perdermos uma grande recompensa negativa, o problema é como já vimos, o agente começa basicamente
aleatório e o número de observações e ações por jogo podem ser de cinco mil a dez mil
ou até mais, às vezes, se passarmos por 10.000 ações e perdermos o jogo, como sabemos
que inicialmente perderemos todas as vezes, como o agente saberá quais ações foram as que
perderam o jogo e, mais importante, quais ações seriam boas a serem executadas com tantas ações para
filtrar antes de obter uma recompensa real, é muito desafiador para um modelo discernir
qual  qual foi a boa ação e quais foram as más ações então, em vez disso, vamos precisar de algum
tipo de recompensa intermediária para ajudar a impulsionar a atividade que achamos que será útil para a vitória
para fazer isso, você pode apenas dar uma recompensa muito pequena por etapa para coisas que você acha que podem ser
úteis e, em seguida, você ainda pode dar uma grande recompensa no final por realmente vencer o jogo
então, o que podemos recompensar para ajudar a vencer, poderíamos recompensar a coleta de recursos, mas isso provavelmente
resultaria apenas em um agente priorizando o alongamento do jogo para que ele possa coletar o máximo de recursos
possível e provavelmente não gostaria de construir muitas unidades de ataque, já que esses recursos de custo
poderiam ser perdidos no total de unidades e d edifícios também como uma espécie de recompensa pelo tamanho geral de nossas
forças armadas, mas, novamente, isso desestimularia o agente de realmente vencer e concluir o
jogo.

pessoalmente decidiu algo extremamente simples uma recompensa por atacar para cada raio nulo que
é nossa unidade de ataque que temos em nosso exército se essa unidade estiver ativamente em combate, então eles ganham ao
agente uma pequena recompensa por etapa que incentiva realmente eliminando ou pelo menos atacando o
inimigo, possivelmente ainda será o caso de manter o inimigo apenas um pouco vivo para fazer mais
unidades e edifícios para destruirmos mas minha esperança é que uma grande recompensa por realmente
terminar o jogo supere isso bem, então temos algumas ótimas ideias aqui, mas ainda temos
que conectar linhas de baixo estáveis ​​3 neste ambiente python starcraft 2 e para fazer isso
também precisamos converter o pytho n ambiente sc2 para um ambiente de gem AI aberto para trabalhar com
linhas de base estáveis ​​3.

Devido à maneira como tudo é executado e pode ou não se comunicar durante a execução
isso apresentou um desafio muito mais difícil   do que eu esperava se você deseja aprender mais
sobre linhas de baixo estáveis ​​3 e ambientes personalizados vou colocar um link na descrição para uma
série  de tutoriais que fiz é muito mais simples e fácil de entender se você for novo nisso em comparação com o
que  vou fazer aqui então para tudo comunicar aqui acabei indo com um
arquivo  de estado esse arquivo contém o estado que vai   ser nosso minimapa a ação de recompensa e se
o jogo acabou ou não e esse arquivo compartilhado é como vamos nos comunicar entre os sistemas aqui
existe uma maneira melhor com certeza isso funcionará embora eu espere que sim, então isso definitivamente vai ser
muito confuso com tudo que tem que se conectar e esperar um pelo outro e tudo isso, mas vamos apenas
seguir em ordem lógica para na verdade, execute tudo vamos apenas ter um script de treinamento train
dot pi e isso é o que realmente será executado e iniciará basicamente tudo, portanto, para train.pi
não há realmente nada sofisticado aqui, é um típico script de treinamento estável de linhas de base 3 que o script
executa o arquivo sc2n que ainda não mostrei para nosso ambiente personalizado, então agora vamos dar uma olhada neste
arquivo sc2mv, então o que é um ambiente de academia openai personalizado   essencialmente, temos uma etapa inicial em um
método de redefinição novamente para saber mais sobre isso confira o tutorial sp3 na descrição
será  muito mais fácil de entender do que isso, mas basicamente tudo o que isso faz é inicializar a ação
e o espaço de observação para o agente imediatamente então, antes que o ambiente realmente seja executado, ele é
redefinido e aqui é onde a mágica ou o código hacky acontece no método de redefinição, esvaziamos o mapa e
preparamos nosso arquivo pickle de estado, observe que a ação neste dicionário pickled é nenhuma para iniciar após
criar e salvar com esse picles, abrimos outro processo para realmente executar o jogo starcraft 2, então
isso está realmente executando o jogo com a lógica que descrevemos até este ponto
, bem como por meio da API blizzard e realmente jogando starcraft 2.

Finalmente o método reset
na verdade está apenas retornando uma observação que é aquele mapa que pisca que criamos então
neste ponto, teoricamente, o jogo starcraft 2 está apenas esperando por nós
para emitir comandos para ele, então retornamos isso observação do método de redefinição que
linhas de base estáveis ​​3 por meio deste arquivo train dot pi passa pelo modelo de aprendizado por reforço
neste caso, é um modelo ppo e esse modelo retorna uma linha de base estável de ação 3
depois passa essa ação de volta para o método  step do nosso ambiente no método de etapa sc2m, a primeira
coisa que esperamos é uma ação a ser escolhida pelo   modelo, uma vez que temos essa ação, adicionamos ao
dicionário de estado, lembre-se novamente até isso ponto, a ação não foi nenhuma, então o que realmente está
esperando por uma ação, nosso jogo starcraft 2 real e o script que se comunica com ele, que
é incredibot.pi, uma vez que o script detecta uma nova ação, ele executa a ação realmente no
jogo, ele redesenha o mapa que que criamos ele calcula qualquer recompensa e substitui o
dicionário de estado anterior por um novo onde mais uma vez a ação não é nenhuma, mas estamos retornando
a recompensa e uma nova observação que também trataremos no final se o jogo realmente terminar
a partir daqui, qual script está aguardando uma ação esse é o sc2 end script e o ciclo continua
até que o jogo termine, que emitirá um done e então o ambiente é redefinido e continuamos
indefinidamente, então sim, este é definitivamente o código mais espaguetificado para aprendizado por reforço
que eu escrevi, mas funciona é claro   funciona nessa época eu passei um bom tempo
mexendo com várias recompensas na lógica, mas a   que funcionou melhor foi ju Primeiro, uma recompensa simples
para atacar e, claro, ganhar ou perder enquanto os modelos estavam treinando, obviamente estava
rastreando coisas como recompensa geral, o próprio mecanismo  de recompensa mudou algumas vezes, então cada
variante não é necessariamente diretamente comparável à outra, bem como Eu pessoalmente descobri
que é melhor tentar várias vezes com o mesmo algoritmo de aprendizado por reforço exato, pois
parece que o ponto de partida de inicialização aleatória de todos os modelos pode realmente desempenhar um papel bastante significativo
com o aprendizado por reforço e o aprendizado real do modelo ao longo do tempo, como você provavelmente pode
diga que fiz muitas tentativas antes de escolher aquele mecanismo de recompensa muito simples de simplesmente
recompensar pelo combate e, no final, uma recompensa ou punição por uma derrota vencedora, o melhor modelo
chegou a uma recompensa de cerca de 200 em seu pico que dizia o que isso faz na verdade, traduza para
como modelos treinados, também mantive um registro de vitórias e derrotas, pois é isso que realmente sabemos ly
depois disso, eu queria medir a taxa de vitórias no caso deste modelo ao mesmo tempo que
seu pico de 200 recompensas, podemos ver vitórias no jogo   em torno de 70 contra o bot do computador rígido, o que
não é tão ruim, especialmente considerando que aleatório era literalmente zero por cento, nunca estávamos ganhando,
apesar do esforço feito até agora, eu ainda consideraria isso apenas o começo de
qualquer aprendizado por reforço com starcraft 2 e terei que pensar mais em como posso expandir isso
para ter um desempenho melhor em ambas as tarefas macro como fizemos aqui, bem como algum tipo de
algoritmo de aprendizado de microreforço, provavelmente na forma de dois algoritmos separados executados ao mesmo tempo, onde
um algoritmo está focado em macro como o que temos aqui e tomando grandes decisões abrangentes
como construir edifícios e expandir ou atacar e assim por diante e, em seguida, outro que se concentra apenas em
micro tarefas, por exemplo, como quais coordenadas ir ou construir e assim por diante, mas no geral eu diria  que
isso é um bom começo eu também tentei   construir algum tipo de capacidade de caça para os
raios nulos para encontrar inimigos em mais locais do que apenas sua base ou se eles simplesmente aparecerem
já que parecia que muitos jogos foram perdidos porque o inimigo apenas se escondeu quando tínhamos a vantagem, mas
depois viemos com um exército maior e nos derrotaram acabei permitindo que raios nulos olhassem em
coordenadas aleatórias se nenhum outro inimigo estivesse presente, mas meus resultados aqui foram realmente piores do que quando
não estávamos olhando.

acho que há algo aqui para ser corrigido logicamente provavelmente  de maneira
bastante simples, mas novamente eu me pergunto sobre talvez   em vez disso, fazer um algoritmo de aprendizado por reforço
que escolha para quais coordenadas voar   em vez de eu codificar manualmente ainda mais lógica, acho que fazer
um algoritmo de aprendizado por reforço de microestratégia para escolher coordenadas para viagens é muito provável que seja o
próximo passo para tentar isso, no entanto, é um projeto para outro dia, hospedei todo o código, bem como um
modo decente l com o qual você pode brincar se quiser você pode encontrar isso na descrição deste vídeo
se estiver interessado em aprender mais sobre redes   neurais e como elas funcionam, então você pode querer
verificar redes neurais do zero um livro de eu e Daniel kukiewa dentro do qual você
aprenderá como codificar funções de ativação de neurônios como calcular a perda para otimização e
propagação reversa e, claro, aplicar tudo o que você acabou de aprender a um problema, o livro em si
é totalmente colorido para gráficos e sintaxe do código destacando tudo em páginas de alta qualidade
com fonte completa e um espaçamento de linha confortável para facilitar a leitura, finalmente, cada conceito, incluindo
a matemática e a codificação, é dividido em partes verdadeiramente atômicas e, em seguida, reunidas passo
a passo  para fornecer uma compreensão completa de redes neurais e como elas funcionam incluindo toda a matemática
por trás delas até o final do livro você terá criado sua própria estrutura de rede
neural do zero s é o livro que eu gostaria   que existisse quando eu estava aprendendo aprendizado profundo e estou
extremamente feliz em poder oferecê-lo a você se isso parece interessante para você, então você pode
acessar  nnfs para saber mais e comprar uma cópia para você

Texto inspirado em publicação no YouTube.

Quer Saber Muito Mais? Venha para a MIND21 Educação

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

This site uses Akismet to reduce spam. Learn how your comment data is processed.