top of page

A Arte dos Algoritmos

Parte 1 da série “A ciência da inspiração”


Inspiração: 1. Ato ou efeito de inspirar; 2. Pensamento ou idéia que nos vem de repente; 3. Produto da imaginação ou entusiasmo criativo.

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” (ver link abaixo) 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.”

Eis que, como num passe de mágica, essas receitas de bolo que ajustam a si mesmas acabam por trazer resultados imprevisíveis, bolos de sabores que nós humanos jamais poderíamos imaginar.

Para alguns ateus entusiastas de inteligência artificial, esta é a prova cabal de que o argumento do Design Inteligente está descartado, e de que os problemas podem ser solucionados através de gerações aleatórias de algoritmos – assim como a vida pode ser explicada como uma evolução aleatória da matéria inorgânica que, de alguma forma, tornou-se orgânica.

Estão mal-informados, pois conforme o próprio Alsin – ele mesmo um ateu – explica em seu weblog, a programação genética não prova absolutamente nada além de que pode ser utilizada para resolver problemas além da atual capacidade humana:

(1) Não existe um objetivo claro nos algoritmos, pois o problema que estão tentando solucionar é o seu próprio meio-ambiente de desenvolvimento. Eles não possuem um sentido, são mero mecanismo de solução de um problema específico; (2) A réplica da Mona Lisa não é a imagem do DNA digital e muito menos do “corpo” dos algoritmos genéticos, ela apenas demonstra o seu nível de adaptação ao meio-ambiente, ou o quanto foram bem sucedidos na solução do problema; e finalmente: (3) A programação genética nada diz sobre o problema da Criação, pois toda ela foi desenvolvida por seres humanos, e nós fomos criados por um evento químico extremamente fortuito nos primórdios do planeta, ou por um ser (ou seres) além de nossa compreensão atual, mas certamente não por uma máquina humana!

Da mesma forma, a magnífica capacidade computacional de nossa tecnologia nada nos diz sobre o que diabos são a inspiração e a criatividade humanas. Nossas máquinas são produto de nossa criatividade, mas não podem (ao menos por enquanto) criar elas mesmas. Tudo o que podem fazer é computar informação, seguirem receitas de bolo e, quando muito, modificar tais receitas para trazer resultados inesperados. Mas quem dita à receita somos nós. Mesmo que um dia máquinas possam nos imitar quase que a perfeição, ainda assim serão imitadores, computadores, e não seres que interpretam e reavaliam a informação de forma subjetiva, única.

Ainda assim, o mistério, a magia das soluções trazidas pelos algoritmos genéticos permanece insondável. Isso irá requerer uma análise mais profunda sobre como exatamente à mente humana cria novos conceitos e idéias a partir de outros já existentes – ou algumas vezes, aparentemente a partir do nada…

***

Pequeno glossário de alguns termos técnicos utilizados no artigo:

Máquina de Turing – Modelo abstrato de um computador, que se restringe apenas aos aspectos lógicos do seu funcionamento (memória, estados e transições) e não à sua implementação física. Numa máquina de Turing pode-se modelar qualquer computador digital.

Cálculo lambda – O cálculo lambda pode ser considerado como uma linguagem de programação abstrata, isto é, as maneiras como funções podem ser combinadas para formar outras funções, é uma linguagem pura, sem efeitos colaterais, e sem complicações sintáticas.

Algoritmo – é explicado nos primeiros parágrafos do artigo 🙂

Polígono – Um polígono é uma figura geométrica plana limitada por uma linha poligonal fechada : p.e. o hexágono é um polígono de seis lados. A palavra “polígono” advém do grego e quer dizer muitos (poly) e ângulos (gon).

Mutação – Em Biologia, mutações são mudanças na sequência dos nucleotídeos do material genético de um organismo. No caso da programação dos algoritmos genéticos, as mutações são induzidas propositadamente (e não aleatoriamente) a cada nova geração.

Linha de código – Em Programação, são as linhas de código que contém as informações (código fonte) que determinam como um programa deve proceder. No caso do software que analisa sinais nervosos, todo o código está agrupado (desde a origem) em uma única linha, sendo incompreensível para a cognição dos próprios programadores (é o resultado dos algortitmos genéticos).

***

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

O Textos para Reflexão é um blog que fala sobre espiritualidade, filosofia, ciência e religião. Da autoria de Rafael Arrais (raph.com.br). Também faz parte do Projeto Mayhem.

92 visualizações0 comentário

Posts Relacionados

Ver tudo
bottom of page