Fonte de Código

Limpo, fluído e refrescante
 

3.7.13

Como sobreviver numa arena

Em 1999, o mais novo lançamento do mundo dos games de tiro com visão em primeira pessoa (first person shooter ou, pela sigla, FPS) era o Quake III Arena, um jogo brutal em que jogadores do mundo todo jogam online numa arena de guerra onde dois grupos de guerrilheiros (armados com armas de fogo futuristas e extremamente letais) duelam até que um dos grupos tenha sido inteiramente exterminado. Quando isto acontece, todos os mortos retornam a vida e começa um novo duelo, e assim por diante...

Uma das inovações do game, segundo a desenvolvedora (Id Software), era a suposta “nova inteligência artificial” dos bots no jogo. Um bot (abreviação de robot) é uma aplicação de software concebida para simular ações humanas repetidas vezes de maneira padrão, da mesma forma como faria um robô. Durante o jogo, os personagens da arena controlados pelo computador (ou seja, não controlados por jogadores reais e humanos) supostamente observariam o estilo de luta dos demais jogadores, humanos ou bots, na medida em que a simulação das arenas de batalha transcorresse.

Com o tempo, seriam capazes de “pensar” em novas táticas, efetivamente se adaptando as táticas que mais venciam combates, e ignorando as táticas ineficazes para a sua sobrevivência, pois ganha o combate o grupo que sobrevive ao final [1]. Para que a inteligência artificial dos bots pudesse se desenvolver mais profundamente, entretanto, os servidores do jogo deveriam permanecer online, simulando centenas ou milhares de batalhas, por muito tempo a fio. E isto era inviável para os servidores oficiais do game, que precisam passar por manutenção semanal.

De acordo com um misterioso tópico de um fórum online (hospedado no 4Chan), em 2007 um jogador configurou um servidor pirata local do game (ou seja, hospedado em sua própria casa) para rodar indefinidamente simulações de arenas de combate entre 16 bots, sem nenhum ser humano a interagir com eles. Ocorre que este jogador esqueceu completamente do que havia feito, e como em sua casa os computadores ficavam sempre ligados, como servidores locais, a simulação rodou por longos quatro anos, até que em 2011 ele finalmente se lembrou dela!

Cada um dos 16 bots da simulação havia gerado 512 MB de informações táticas aprimoradas por centenas de milhares de partidas letais. Eram 8 GB de informações. O que elas teriam gerado? Atiradores infalíveis? Coordenação perfeita e robótica para matar da forma mais eficiente possível? O jogador resolveu entrar na simulação para ver quanto tempo seria capaz de sobreviver...

Então, para sua surpresa, ele observou que os 15 bots (ele estava jogando como o décimo sexto) nada faziam, apenas olhavam para ele e o seguiam onde quer que fosse. Não pareciam mais duelistas letais, mas antes pacifistas em busca de um sentido para estarem vagueando indefinidamente por uma arena de batalha. Aparentemente, em alguns anos de simulação, a inteligência artificial dos bots chegou a melhor estratégia para a sobrevivência: ninguém morre quando ninguém mata.

A Teoria dos Jogos é um ramo da matemática aplicada que estuda situações estratégicas onde jogadores escolhem diferentes ações na tentativa de melhorar o resultado, ou seja, o retorno de suas escolhas. Inicialmente desenvolvida como ferramenta para compreender comportamento econômico e depois usada pela Corporação RAND para definir estratégias nucleares, a Teoria dos Jogos é hoje usada em diversos campos acadêmicos.

Podemos ilustrá-la de forma simples e direta com o chamado “dilema do prisioneiro”, originalmente formulado por funcionários da RAND:

Dois suspeitos, A e B, são presos pela polícia. A polícia tem provas insuficientes para sua condenação; mas, separando os prisioneiros, oferece a ambos o mesmo acordo: se um dos prisioneiros, confessando, testemunhar contra o outro e esse outro permanecer em silêncio, o que confessou sai livre enquanto o cúmplice silencioso cumpre 10 anos de sentença. Se ambos ficarem em silêncio, a polícia só pode condená-los há 6 meses de cadeia cada um. Se ambos traírem o comparsa, cada um leva 5 anos de cadeia. Cada prisioneiro faz a sua decisão sem saber que decisão o outro vai tomar, e nenhum tem certeza da decisão do outro. A questão que o dilema propõe é: o que vai acontecer? Como o prisioneiro vai reagir?

No “dilema do prisioneiro”, temos uma situação onde o altruísmo e a confiança mútua oferece o melhor resultado final para ambos os jogadores. No entanto, isto não ocorre sem o risco de se ficar calado, confiando em seu parceiro, e ao fim ser traído por ele, e receber em retorno o pior resultado. De certa forma, a Teoria dos Jogos e o “dilema do prisioneiro” se aplicam não somente a economia e as relações de poder entre potências nucleares, mas também a uma partida de Quake III Arena... Será mesmo?

Retornando ao experimento insólito do início do artigo, o jogador resolveu “ver o que acontecia se atirasse em algum outro bot”. Para sua surpresa, ao fazer isso, ele foi atacado (e morto) não somente pelos 8 bots do outro time, como pelos 7 outros bots de sua própria equipe!

Ou pelo menos foi isto que a imagem com capturas de tela do suposto tópico do 4Chan dizia. Muitos sites de games compartilharam a notícia, e ela obteve certa fama também nas redes sociais. No entanto, como muitos podem ter imaginado, era tudo um hoax, ou seja, uma história inventada, como tantas outras que vemos nestes tempos de propagação desenfreada da informação.

Porém, ainda que não tenha ocorrido de verdade, ainda que os 16 bots com suas inteligências artificiais sejam incapazes de interpretar o resultado de suas ações (já que são ferramentas de computação, e não seres de interpretação), esta história ainda nos toca numa questão primordial: ela foi espalhada como algo verossímil, extremamente verossímil.

Penso que muitos de nós têm esta certa queda por acreditar que uma simulação computacional possa, de alguma forma incompreensível, chegar a conclusões que, no fundo, são as nossas própria conclusões, mas que não temos a vontade, ou a coragem, de coloca-las em prática.

Afinal, não se enganem: o bot do game mais avançado do ano que vem não será mais nem menos ferramenta do que um martelo ou uma bomba nuclear. Não é o martelo que mata ou constrói coisas, é quem o empunha. Não foi o material radioativo, e nem mesmo os físicos que descobriram a fissão nuclear quem arrasaram Hiroshima, foram aqueles que deram a ordem: “soltem a bomba”...

Somos, desta forma, todos prisioneiros desta enorme simulação chamada “mundo”, e só sairemos desta prisão de mãos dadas – todos serão livres somente quando não houver mais nenhum prisioneiro.

***

[1] Isto não deixa de ser uma forma de programação genética.

Crédito das imagens: [topo] Quake III Arena (captura de tela); [ao longo] Adrianna Williams/Corbis

Marcadores: , ,

  • Adicionar ao Delicious
  • Adicionar ao Digg
  • Adicionar a Technorati
  • Adicionar ao seu mural no Facebook
  • Adicionar como tweet no seu Twitter

26.8.10

A arte dos algoritmos

A ciência da computação nasceu com o conceito de algoritmo, criado conjuntamente em 1936 pelo experimento mental de Alan Turing, conhecido como Máquina de Turing, enquanto quase ao mesmo tempo Alonzo Church criava o cálculo lambda. Um algoritmo é uma seqüência finita de instruções bem definidas e não ambíguas, cada uma das quais pode ser executada mecanicamente num período de tempo finito e com uma quantidade de esforço finita.

O conceito de algoritmo é freqüentemente ilustrado pelo exemplo de uma receita, embora muitos algoritmos sejam mais complexos. Eles podem repetir passos (fazer iterações) ou necessitar de decisões (tais como comparações ou lógica) até que a tarefa seja completada. Um algoritmo corretamente executado não irá resolver um problema se estiver implementado incorretamente ou se não for apropriado ao problema.

Roger Alsin é um programador sueco bem menos conhecido, mas que aborda a arte dos algoritmos de uma forma impensável na época de seus criadores... No final de 2008, ele resolveu brincar um pouco com alguns algoritmos, mais precisamente algoritmos genéticos. Ele criou um pequeno programa que evolui cadeias de “DNA digital” para renderização de polígonos, eis as instruções aplicadas:

(0) Cria uma cadeia de DNA aleatoriamente (início do programa); (1) Copia a seqüência de DNA atual e aplica uma pequena mutação; (2) Usa o novo DNA para renderizar polígonos em uma tela; (3) Compara a tela com a imagem original (a ser copiada); (4) Se a imagem se parece mais com a imagem original do que a imagem gerada pelo DNA pai, substituir o DNA antigo pelo DNA atual; (5) Repetir a partir do passo 1.

Então, Alsin colocou como meta aos seus algoritmos tentar recriar (ou copiar da melhor forma possível) a Mona Lisa de Da Vinci usando apenas 50 polígonos semi-transparentes... Após 904.314 gerações, o algoritmo genético de Alsin chegou a uma imagem bastante próxima da original, se considerarmos que algoritmos não são exatamente mestres da pintura (ou pelo menos, ainda não são). Você pode ver a imagem final no início do artigo, ou ver as diversas gerações no weblog de Alsin.

Em 1992, John Koza – cientista da computação – usou algoritmos genéticos para desenvolver programas para realizar certas tarefas. Ele chamou seu método de programação genética. Koza foi pioneiro neste método de programação, que hoje é cada vez mais utilizado no mundo.

O aspecto mais bizarro e intrigante da programação genética é que seus algoritmos – verdadeiras “entidades de software” – não sofrem as restrições dos hábitos de pensamento e das inclinações intelectuais sutis dos programadores humanos. Como exploram irrefletidamente todo o espectro de soluções possíveis para um determinado problema, os algoritmos genéticos podem trazer soluções puramente alienígenas. Por exemplo, a NASA utilizou a programação genética para produzir o projeto ideal de um suporte a ser usado na Estação Espacial Internacional. Como relatou o U.S. News and World Report, o resultado parecia ter saído de um romance de ficção científica:

“Surgiu, de 15 gerações e 4.500 projetos diferentes, um suporte que nenhum engenheiro humano projetaria. O conjunto grumoso e com a extremidade arredondada lembrava o osso de uma perna, irregular e um tanto orgânico. Testes em modelos confirmam sua superioridade sobre os projetos humanos com suporte estável. Nenhuma inteligência fez os projetos. Eles apenas se desenvolveram.”

Outro exemplo espantoso da total estranheza da programação genética bem-sucedida é o código e computador que foi desenvolvido para ajudar um paciente a controlar uma mão protética com base em sinais nervosos erráticos captados por eletrodos presos ao pulso do paciente. O software desenvolvido analisava misteriosamente os sinais nervosos e os traduzia com precisão perfeita nos movimentos que o paciente queria fazer.

Mas aqui está a parte realmente estranha – o método pelo qual o software realizou esse feito incrível está totalmente além da compreensão dos pesquisadores humanos. Como relatou a Scientific American:

“O código desenvolvido era tão confuso e indecifrável quanto um inseto esmagado. O programa que prevê os gestos consiste numa única linha de código tão longa que enche uma página inteira e contém centenas de expressões parentéticas embutidas. Ele nada revela sobre por que o polegar se move de uma certa maneira – só revela que se move.”

***

Crédito das imagens: [topo] Roger Alsin (sim, pois foi ele quem criou o programa que copiou a Mona Lisa de Leonardo Da Vinci); [ao longo] Andrea Ruester/Corbis

Marcadores: , , , , , , ,

  • Adicionar ao Delicious
  • Adicionar ao Digg
  • Adicionar a Technorati
  • Adicionar ao seu mural no Facebook
  • Adicionar como tweet no seu Twitter