image

Bootcamps ilimitados + curso de inglês para sempre

80
%OFF
Article image
Tito Faria
Tito Faria14/05/2024 10:54
Compartilhe

Como o Copilot me ajudou a fazer um Bot que joga Star Craft 2

  • #IA Generativa

Star Craft 2 é um jogo de estratégia em tempo real ao estilo Age of Empires, mas que é passado no futuro. O objetivo do jogo é construir um exército e destruir o adversário. O jogo permite que a pessoa jogue contra o computador ou contra outra pessoa, mas existe uma comunidade pequena de desenvolvedores que se dedica a criar algoritmos que jogam Star Craft 2, contra outras pessoas ou contra outros bots.

Este é um jogo muito difícil, ele permite jogar com 3 raças diferentes, os terranos, os zergs e os protoss. Cada uma dessas raças permite a construção de muitas unidades e a composição de exércitos e de estratégias é extremamente alta, o que torna o jogo extremamente difícil de ser jogado e ainda mais de ser programado.

AlphaStar e o aprendizado por reforço:

A Alpha Star é uma empresa de aprendizado por reforço que depois foi comprada pelo Google que tem o objetivo de criar algoritmos de aprendizado por reforço para ganhar dos seres humanos em todos os jogos possíveis. Um marco importante foi quando eles conseguiram ganhar dos mestres no jogo Go, um jogo chinês muito antigo jogado com peças brancas e pretas e que possui uma quantidade exorbitante de combinações possíveis. Seria impossível então tentar prever todas as combinações por força bruta, como seria o caso de um jogo mais simples como o jogo da velha.

Outro marco importante foi em 11 de maio de 1996, quando Kasparov, considerado o maior jogador de xadrez de todos os tempos, perdeu seis partidas seguidas de um match de seis para o computador da IBM, o Deep Blue. O xadrez apresenta a mesma dificuldade, uma quantidade tão grande de possibilidades que seria impossível imaginar todas elas por força bruta, não existe poder computacional para isso. Mas o jogo de Go apresenta muito mais possibilidades que o jogo de xadrez.

Depois de vencer no jogo de Go, a Alpha Star achou que seria a hora de um desafio mais interessante e resolveu fazer um bot que joga Star Craft. No começo, o ele não sabia fazer nada, só tinha alguns incentivos. Se matasse uma unidade do exército adversário ganhava uma quantidade de pontos, se ganhasse o jogo ganhava uma quantidade bem maior de pontos. Ela foi treinada do zero, e jogando contra novas instâncias de si mesmo para progredir nas estratégias até que os desenvolvedores acharam que ela estava pronta para jogar contra os melhores jogadores humanos de Star Craft. Os resultados foram surpreendentes, e ela conseguiu vencer dos melhores jogadores humanos com exceção do Serral, que é considerado o melhor de todos.

A Alpha Star tembém faz algoritmos de aprendizado por reforço para jogar os jogos de Atari, como o Pac Man e o Space Invaders, mas neste caso ele joga melhor do que qualquer ser humano.

Sobre o google e o Alpha Star: https://deepmind.google/discover/blog/alphastar-mastering-the-real-time-strategy-game-starcraft-ii/

Campeonato de Bots de Star Craft:

Hoje em dia existe um campeonato de Bots de Star Craft 2. É um site onde as pessoas podem subir os seus códigos para lutar uns contra os outros. Quando eu soube dessa história eu achei incrível. É um campeonato de programadores, em que estes colocam os seus códigos para lutar e o melhor código vence. É tipo uma batalha de Pokemons mas os Pokemons são algoritmos. É possível fazer um bot para competir usando aprendizado por reforço, redes neurais ou a programação tradicional. O meu bot foi feito usando a boa e velha lógica aristotélica em Python. O site da arena de Bots de Star Craft: https://aiarena.net/

Qual linguagem usar:

É possível usar qualquer linguagem para fazer o Bot. É basicamente um código que se comunica com a API do jogo. É claro que se você escolher uma linguagem super diferentona você vai ter que começar a desenvolver do zero, enquanto em algumas outras linguagens já tem muita coisa pronta na internet. No entanto as mais comuns são python, Rust, java e C++. No entanto python está se tornando a linguagem padrão na comunidade, por que muitos desenvolvedores mais antigos colocam códigos e frameworks já prontos para quem é mais novo começar a usar, e eles estão todos em python, o que faz com que quem está começando comece em python, o que faz com que mais gente use essa linguagem.

Por que fazer um bot de Star Craft:

É uma boa coisa pra colocar no portfólio, te permite usar algoritmos de redes neurais e de aprendizado por reforço e principalmente, é divertido pra caramba. Eu desenvolvo o meu bot há pouco mais de três meses. Eu estou ainda no começo. Tem gente na comunidade que desenvolve há mais de cinco anos. Dá pra ver os replays dos jogos, e imaginar quais códigos eu poderia fazer para vencer as próximas partidas. Dessa forma você pode desenvolver as suas habilidades de programação para pensar em novas estratégias. É a junção de duas coisas que eu gosto, programação e videogames.

Por que o Copilot é melhor que o Chat GPT:

Eu acho que todo mundo que trabalha com programação acaba usando o Chat-GPT. Ele é uma IA generativa que é uma mão na roda para quem faz código. Mas ultimamente eu tenho utilizado o Copilot da Microsoft. Ele é pago (10 dólares por mês o que dá em torno de 50 reais). Mas ele tem algumas vantagens. A primeira é que ele é basicamente o Chat-GPT, mas ele usa a versão 4.0, que é um modelo maior e que produz respostas melhores. A segunda coisa é que ele trabalha integrado com o Visual Studio Code, e por isso ele consegue entender o contexto, gerar texto a partir de comentários e substituir trechos de código com mais facilidade. Se você tiver uma graninha sobrando ele pode ser uma boa ideia. Se não o GPT 3.5 funciona muito bem, e é grátis.

O Copilot acabou virando um parceiro de código pra mim. Ás vezes eu não tenho ideia de como implantar uma ideia que eu tive, e ele me dá uma solução que eu nunca poderia pensar. Ele me ajuda principalmente para entender por que o meu código não está funcionando. As vezes é uma função assíncrona, as vezes eu estou declarando as variáveis de forma errada ou esperando um resultado diferente da função. Mas ele também erra muito e não dá pra achar que ele vai escrever tudo pra você.

Se você quiser começar a desenvolver o seu próprio bot de Star Craft, eu recomendo a série de vídeos: https://www.youtube.com/watch?v=v3LJ6VvpfgI&list=PLQVvvaa0QuDcT3tPehHdisGMc8TInNqdq

Mas a biblioteca que ele usa está desatualizada, você precisa usar a: https://github.com/BurnySc2/python-sc2

De resto, good luck and have fun.

Compartilhe
Recomendados para você
Microsoft 50 Anos - Prompts Inteligentes
Microsoft 50 Anos - GitHub Copilot
Microsoft 50 Anos - Computação em Nuvem com Azure
Comentários (5)
Gustavo Modesto
Gustavo Modesto - 14/05/2024 15:09

Muito bom. Obrigado por compartilhar.

Eu não tinha ideia de que havia uma competição de bots para StarCraft 2.

Vou tentar fazer um também!

Matheus Pimentel
Matheus Pimentel - 14/05/2024 12:39

Que legal. Vou tentar fazer também.


Tito Faria
Tito Faria - 14/05/2024 11:33

Eu acho que são poucos jogos que permitem uma API que permita jogos por bots. O próprio Star Craft 2 só permite que você jogue em um ambiente só para bots, não o jogo online normal. Eu sei que o Star Craft 1 permite também.

Eu vi um video de como jogar o jogo da cobrinha com aprendizado por reforço:

(83) Python + PyTorch + Pygame Reinforcement Learning – Train an AI to Play Snake - YouTube


Mas a melhor biblioteca para começar no Star Craft 2 é a do BurnySc2:

BurnySc2/python-sc2: A StarCraft II bot api client library for Python 3 (github.com)

Fernando Araujo
Fernando Araujo - 14/05/2024 11:20

Opa, Tito!

Muito legal essa ideia de criar bots para jogos.

Todo jogo disponibiliza uma API para permitir jogo por bots?

Eu fiquei interessado em testar um bot, mas para jogos mais simples.


João Costa
João Costa - 14/05/2024 11:17

Genial! Vou tentar fazer também hehe