Fonte de Código

Limpo, fluído e refrescante
 

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

0 comentários:

Postar um comentário

<< Home