Aproveite o mês das
carreiras
na Alura

44% OFF

Falta pouco!

00

DIAS

00

HORAS

00

MIN

00

SEG

Vingadores - Visualizando diversos futuros simultaneamente

Guilherme Silveira
Guilherme Silveira

Compartilhe

Durante a principal batalha contra Thanos o Doutor Estranho decide qual caminho escolher: um entre 14 milhões de futuros, aquele que os levará a vitória, e o Nerdologia Tech discute o assunto.

Mas como ele é capaz de visualizar tudo ao mesmo tempo? Tentaremos resolver o problema com Python e Data Science. Demonstraremos como ele foi capaz de visualizar todos os resultados em menos de um minuto.

O trabalho original

Nosso trabalho é baseado naquele do Gabriel Schade. Os heróis são: Ironman, Spiderman, Nebula, Peter Quill, Drax, Mantis e Doctor Strange.

Cada round alguém bate em alguém: heróis batem em Thanos em uma de 3 estratégias. Depois Thanos em um dos heróis aleatoriamente. Isso gera 3 * 7 possibilidades. Com mais dois rounds são 3^2*7^2, possibilidades crescendo exponencialmente com o número de rounds.

O trabalho original faz o teste de uma heurística específica, que nos leva a resultados super interessantes. Aqui queremos ver o que o Doutor Estranho viu. Exatamente o que ele viu? Vamos ver... ele viu todos os futuros ao mesmo tempo? Poderia ser, mas para isso o computador teria que simular todas as possibilidades sequencialmente?

Banner da Imersão de IA da Alura com Google Gemini. Participe de aulas gratuitas online com certificado. Domine as inovações mais recentes da IA.

Nossa implementação

Simularemos diretamente todas as possibilidades ao mesmo tempo. Para isso faremos uso de um truque tradicional de algoritmos e maratonas de programação: nem todos os estados futuros são únicos. Por exemplo, para o primeiro round:

a) 1/3 de chance, homem de ferro bate com bônus 1 => Thanos não sente nem cócegas, continua com 500hp 
b) 1/3 de chance, homem de ferro bate com bônus 2 => Thanos não sente nem cócegas, continua com 500hp 
c) 1/3 de chance, homem de ferro bate com bônus 3 => Thanos fica com 450hp

Opa... esses 3 futuros podem ser resumidos em 2 estados: (66% 500hp, 33% 450hp). O mesmo ocorre com os estados futuros. Portanto podemos discretizar os futuros e armazená-los na memória junto com a probabilidade de cada um deles ocorrer. Agora a cada round rodamos um round ao mesmo tempo em todos os futuros ao mesmo tempo.

Aqui a visualização após um turno:

  • 66% de chance de um cenário onde Thanos possui 100% de energia, e os Avengers 100% - 33% de chance de um cenário onde Thanos possui 95% de energia, e os Avengers 100%.

Aqui a visualização da distribuição de probabilidades após 2 turnos. Note que as probabilidades reforçam que os Avengers perdem energia mais rapidamente do que Thanos. As barras vão se aproximando do 0 no eixo dos Avengers, mas ficam muito próximas do 100% no eixo Thanos.

Aqui a visualização da distribuição de probabilidades após 10 turnos... Thanos se dando bem na maior parte dos casos:

Aqui a visualização da distribuição de probabilidades após 23 turnos:

Aqui a visualização da distribuição de probabilidades após 70 turnos:

O que o Doutor Estranho viu?

Aqui o vídeo de todos os futuros acontecendo ao mesmo tempo.

Note com o passar do tempo as chances dos Avengers causarem dano aumentando, mas a chance de ganharem fica praticamente invisível a olho nu. Enquanto isso a chance de perderem é muito óbvia:

Detectamos uma possibilidade de 0.00798543% dos Avengers ganharem a batalha. A chance é tão pequena que não aparece na renderização.

Trabalho futuro:

O código pode ser atualizado para memorizar os melhores caminhos, ajudando o Doutor a percorrer o desejado.

O principal avanço seria efetuar uma busca de parâmetros iniciais (hp, ataque, defesa etc) que resultaria em exatamente 1 único sucesso e 14 milhões de estados futuros.

Desafios ao nosso estudo

Os gráficos usam surfaces para facilita a visualização mas deveriam ser pontos para ser mais realista, sem extrapolação. Os pontos, porém, não ficam fáceis de serem visualizados os personagens escolhidos pelo trabalho original, sinta-se a vontade para mudá-los e recomendar alterações.

As estatísticas dos personagens, sinta-se a vontade para mudá-las e recomendar alterações, a batalha é mesmo baseada em turnos? Em filmes, costuma ser, não há perda de poder de ataque e defesa a medida que um personagem perde energia, assumimos que o futuro é decidido somente pelo resultado de uma batalha e os pesonagens envolvidos na mesma.

Pode ser que o universo dos Vingadores não seja real, e o filme não represente o universo em que vivemos. Nesse caso é possível que os futuros encontrados não sejam futuros de verdade, mas sim um plot 3d de um jupyter notebook no cloud.

Todo o código fonte do projeto pode ser encontrado aqui no meu github.

Guilherme Silveira
Guilherme Silveira

Co-fundador da Alura. Com mais de 20 anos de ensino de tecnologia, criou mais de 100 cursos. Possui formação em engenharia de software, viés matemático e criativo, além de ser medalhista de ouro em competições nacionais de computação, tendo representado o Brasil nos mundiais. Participante de comunidades open source e de educação em tecnologia, tendo escrito 7 livros. Faz mágica e fala coreano no tempo livre.

Veja outros artigos sobre Data Science