O resultado do jogo do
nosso bot mostra que jogar com você mesmo [jogar sozinho] pode aumentar seriamente a qualidade dos sistemas de aprendizado de máquina e aumentá-lo de um estado muito inferior ao nível de uma pessoa ao nível de um super-homem, se houver poder computacional apropriado. Em um mês, nosso sistema passou de um estado que dificilmente correspondia ao nível de um bom jogador, para um estado em que venceu os melhores profissionais e continuou a melhorar desde então. A qualidade de um sistema de aprendizado aprofundado supervisionado é determinada pelo conjunto de dados de treinamento, mas, para sistemas que jogam sozinhos, o conjunto de dados disponível é aprimorado automaticamente.
Mudança na classificação TrueSkill (semelhante à classificação Elo para xadrez) do nosso bot ao longo do tempo, calculada simulando jogos entre bots.O projeto foi desenvolvido da seguinte forma. A classificação de 15% dos jogadores está abaixo da marca de 1,5 mil na escala
MMR ; 58% dos jogadores têm menos de 3K; 99,99% dos jogadores têm menos de 7,5K.
• 1º de maio: O primeiro
treinamento de reforço resulta em um ambiente simples de Dota, onde o Drow Ranger aprende a combater o Earthshaker codificado.
• 8 de maio: um testador com um
MMR de 1,5K diz que seus resultados melhoram mais rápido que o bot.
• Início de junho: testador de batida com MMR 1,5K
• 30 de junho: ganhei a maioria dos jogos com um testador com o MMR 3000.
• 8 de julho: pela primeira vez, com uma pequena margem,
venci um testador semi-profissional com um MMR de 7,5K.
• 7 de agosto:
Blitz (6,2 mil ex-profissional) venceu por 3 a 0,
Pajkatt (8,5 mil, profissional) por 2 a 1 e
CC&C (8,9 mil, profissional) por 3 a 0. Todos concordaram que SumaiL descobriria como vencê-lo.
• 9 de agosto: Arteezy derrotou (10K, profissional, um dos melhores jogadores) por 10-0. Ele disse que o SumaiL será capaz de lidar com este bot.
• 10 de agosto: SumaiL venceu (8,3K, profissional, melhor 1 contra 1) 6-0. O jogador disse que o bot não pode ser derrotado. Ele jogou com a versão bot em 9 de agosto, venceu por 2-1.
• 11 de agosto: Dendi derrotou (7,3K, profissional, ex-campeão mundial) por 2-0. 60% mais vitórias que a versão de 10 de agosto.
O jogo contra o SumaiLDesafio
Na versão completa do jogo, os jogadores jogam 5 contra 5, mas em
alguns torneios também
existem jogos 1 contra 1. Nosso bot jogou de acordo com as regras padrão do torneio - não adicionamos simplificações especiais para a IA.
O bot trabalhou com as seguintes interfaces:
• Observação: APIs projetadas para ter os mesmos recursos que os jogadores ao vivo em relação a heróis, outros personagens do jogo e a superfície próxima ao herói. O jogo é parcialmente observável.
• Ações: acessíveis através da API, com frequência comparável à humana, incluindo movimento para um determinado local, ataque e uso de objetos.
• Feedback: o bot recebe recompensas pela vitória, além de parâmetros simples, como saúde e
lastits .
Selecionamos dezenas de itens disponíveis para o bot e um deles para estudo. Também treinamos separadamente fluência de bloqueio usando técnicas tradicionais de treinamento por reforço, como isso acontece antes que um oponente apareça.
Bot joga contra ArteezyO Torneio Internacional
Nossa abordagem, combinando o jogo conosco e aprendendo de fora, nos permitiu fortalecer significativamente o jogo do nosso bot de segunda a quinta-feira, enquanto o torneio acontecia. Segunda à noite Pajkatt venceu usando uma coleção de itens incomum. Adicionamos esse assembly à lista de itens disponíveis.
Por volta das 13h da quarta-feira, testamos a versão mais recente do bot. O bot perdeu muita saúde após a primeira onda. Decidimos que precisamos reverter, mas percebemos que o jogo subsequente foi incrível, e o comportamento na primeira onda foi apenas um engodo para outros bots. Jogos subseqüentes consigo mesmo resolveram o problema quando o bot aprendeu a resistir à estratégia com isca. E combinamos isso com o bot de segunda-feira apenas para a primeira onda e terminamos apenas 20 minutos antes da arteezy aparecer.
Após as partidas com Arteezy, atualizamos o modelo de bloqueio de fluência, que aumentou o TrueSkill em um. As sessões de treinamento subsequentes antes da partida com o SumaiL na quinta-feira aumentaram o TrueSkill em dois pontos. SumaiL apontou que o bot aprendeu a lançar feitiços destrutivos fora do campo de visão do inimigo. Isso aconteceu graças à mecânica, que não sabíamos: lançar fora do campo de visão do inimigo não lhe permite cobrar as maravilhas.
Arteezy jogou uma partida com nosso testador de 7,5K. Arteezy venceu o jogo, mas nosso testador conseguiu surpreendê-lo com a ajuda de uma estratégia espionada pelo bot. Mais tarde, Arteezy observou que Paparazi já havia usado essa estratégia contra ele e que eles raramente a recorriam.
Paykatt vence o bot de segunda-feira. Ele atrai o bot e depois usa a regeneração.Vulnerabilidades de bot
Embora SumaiL chame o bot de "invencível", ele ainda pode ficar confuso em situações muito diferentes do que viu. O lançamos em um dos eventos realizados no torneio, onde os jogadores jogaram mais de 1000 jogos para derrotar o bot de todas as maneiras possíveis.
As vulnerabilidades bem-sucedidas se dividiram em três categorias:
• Cabo de arrepios. Você pode constantemente fazer creeps da linha persegui-lo logo após eles aparecerem. Como resultado, várias dúzias de arrepios correrão atrás de você pelo mapa, e os arrepios inimigos destruirão a torre de bot.
• Orbe de veneno + laço de vento: oferece uma vantagem na velocidade de movimento sobre o bot no primeiro nível e permite causar danos rapidamente.
• Raze no primeiro nível: requer habilidades, mas vários jogadores da classe 6-7K foram capazes de matar o bot no primeiro nível, completando com sucesso 3-5 feitiços em um curto espaço de tempo.
A correção de problemas para correspondências individuais será semelhante à correção de um erro no Pajkatt. Mas para as correspondências 5v5, esses problemas não são vulnerabilidades, e precisaremos de um sistema que possa lidar com situações estranhas que nunca havia visto antes.
A infraestrutura
Ainda não estamos prontos para discutir os recursos internos do bot - a equipe está trabalhando em uma solução para o problema com um jogo 5 contra 5.
A primeira etapa do projeto foi entender como executar o Dota 2 na nuvem em uma GPU física. O jogo deu um erro incompreensível nesses casos. Mas, ao iniciar a GPU na área de trabalho de Greg (durante o show, essa área de trabalho foi trazida ao palco), percebemos que o Dota é inicializado com um monitor conectado e exibe a mesma mensagem sem um monitor. Portanto, configuramos nossas máquinas virtuais para fingir como se um monitor físico estivesse conectado a elas.
Naquela época, o Dota não suportava servidores dedicados, ou seja, iniciar com dimensionamento e sem uma GPU era possível apenas na versão com uma renderização de software muito lenta. Em seguida, criamos um stub para a maioria das chamadas do OpenGL, exceto aquelas necessárias para carregar.
Ao mesmo tempo, escrevemos bots em scripts - como uma referência para comparação (em particular, porque os bots internos não funcionam bem no modo 1 em 1) e para entender a semântica da
API dos bots . O bot de script atinge 70 lasthits em 10 minutos em um caminho vazio, mas ainda perde para as pessoas que jogam bem o suficiente. Nosso melhor bot jogando 1 contra 1 atinge o nível de cerca de 97 (destrói a torre mais cedo, para que possamos extrapolar apenas), e o máximo teórico é 101.
O bot joga contra o SirActionSlacks. A estratégia de desvio de bot não funcionou com uma multidão de correiosCinco para cinco
Jogar 1 contra 1 é uma tarefa difícil, mas 5 contra 5 é um oceano de complexidade. Precisamos expandir os recursos da IA para que ela possa lidar com isso.
Da maneira usual, começamos copiando o comportamento. Dota hospeda cerca de um milhão de jogos públicos por dia. Os registros das correspondências são armazenados nos servidores Valve por duas semanas. Fazemos o download de todas as entradas de jogos no nível de especialista desde novembro passado e coletamos um conjunto de dados de 5,8 milhões de jogos (cada jogo dura aproximadamente 45 minutos com 10 jogadores). Usamos o
OpenDota para procurar registros e transferimos US $ 12.000 para eles (dez vezes mais do que eles queriam coletar em um ano) para apoiar o projeto.
Ainda temos muitas idéias e
contratamos programadores (interessados em aprendizado de máquina, mas não necessariamente especialistas) e pesquisadores para nos ajudar. Agradecemos ao Microsoft Azure e à Valve pelo apoio em nosso trabalho.