Bits e bytes
se digladiando por comida? Reprodução sexuada de algoritmos? Os mais fortes vencendo os
mais fracos? Seleção (quase) natural de soluções de problemas? Um neo-darwinismo
digital?
Será que os analistas de sistemas ficaram
loucos? Resolveram ressuscitar Frankstein? Ou será que os geneticistas - de tanto brincar
no computador acabaram contaminados pela lenga-lenga informática..
Não é nada disso. É apenas mais uma
prova da habilidade do gênero humano quando deixa sua imaginação voar livre e solta à
cata de soluções para os nossos problemas do dia-a-dia. Mais uma demonstração que se a
vida imita a arte, nem por isso a arte deixa de imitar a vida...
Este texto trata sobre "Computação
genética". Uma idéia já meio antiga, mas que só nos últimos anos deixou o
círculo dos iniciados e ganhou o conhecimento (e o respeito) do grande público, pela sua
habilidade em achar boas soluções para problemas difíceis ou impossíveis até então.
Comecemos pelo começo: podemos definir o
ser humano como um resolvedor de problemas. De fato, sua sobrevivência e o progresso da
humanidade têm sido uma luta constante contra dificuldades de toda ordem. O que distingue
o homem dos demais animais é este aspecto: a racionalidade, que lhe permite pensar mais
à frente. Vejamos uma taxonomia de problemas, e de abordagens de suas soluções. Pense
nas camadas de uma cebola. A classe de problemas 1 (a camada mais externa da cebola)
engloba questões que sequer chegamos a considerar como problemas, tal a dimensão por
elas assumida e a dificuldade de vislumbrar uma proposta de abordagem. Para esta classe,
não se conhecem métodos de tratamento nem critérios para conhecer o sucesso ou
insucesso de uma possível proposta de ataque. Podemos citar, como exemplo desta classe, a
quantificação dos planetas que têm vida inteligente no universo, a individualização
de uma célula reprodutiva masculina humana no ato da concepção (quem será o vencedor
da corrida?), o que acontecerá com o planeta Terra daqui a 300 séculos,...
A classe seguinte (incluída na classe 1)
apresenta problemas que, se ainda são formidáveis, pelo menos permitem algum tipo de
tratamento. São em geral problemas com pouca ou nenhuma retroalimentação (o que
permitirá, nas outras classes, quantificar o sucesso na tentativa de solucionar o
problema). São exemplos desta classe, a educação de filhos. Outro bom exemplar é o
célebre "último teorema de Fermat".
A
terceira classe, já permite um tratamento mais formal às soluções. A questão
nesta classe não é qualitativa, mas quantitativa. Teoricamente, se tivéssemos
tempo infinito, poderíamos solucionar todos os problemas desta classe.
Exemplo aqui é o jogo de xadrez. Se limitarmos o comprimento dos jogos
a 40 lances (ou 400, se se achar 40 pouco), estipulando-se o empate, caso
nenhum dos contendores tenha vencido neste limite, podemos afirmar sem
medo de errar, ser o jogo um problema finito. E mais, facilmente resolvível,
posto que, dada uma situação no tabuleiro, qualquer bom jogador é capaz
de responder, senão o lance genial e inesperado, pelo menos o lance que
menos perde, ou o mais razoável de ser ofertado naquele momento. A questão
é que imagina-se existirem 10120
(este número é 1. 000. 000. 000. 000. 000. 000. 000. 000. 000. 000. 000.
000. 000. 000. 000. 000. 000. 000. 000. 000. 000. 000. 000. 000. 000.
000. 000. 000. 000. 000. 000. 000. 000. 000. 000. 000. 000. 000. 000.
000) jogos distintos, e se fossemos analisar todos eles, só conseguiríamos tendo tempo infinito
à nossa disposição.
Finalmente, a quarta classe é a dos problemas computáveis. Desde os simples,
como resolver uma equação do segundo grau, até os verdadeiramente complexos,
como otimizar uma função linear de 10.000 variáveis e 20.000 restrições,
por exemplo.
Haveria uma quinta, sexta, sétima.. classes, mas podemos parar por aqui,
já que nossa questão é resolver problemas difíceis usando o computador.
Há que se ter em mente algumas questões, como: a separação entre as classes
não é caso resolvido. Certos problemas podem ora estar numa classe ora
na outra, dependendo do volume de dados e dos recursos à disposição
para sua solução. Também os limites variam no tempo. À medida que a ciência
e a técnica progridem, existe uma tendência dos problemas de ocuparem
classes crescentes (da 1 para a 2, desta para a 3 e assim por diante).
Diante desta taxonomia, eis o momento de dizer a que vem este texto. Ele
vem apresentar os algoritmos genéticos como sendo uma possibilidade de
solução para os problemas da classe 3. Como o texto é extenso e indigesto,
ele virá por partes. Nesta primeira parte analisaremos o modelo de tudo:
a genética animal. Afinal, ao que se saiba, a genética não faz parte (ainda)
do curriculum de formação de analistas de sistema.
O problema de descobrir como os seres vivos se criam na natureza sempre
ocupou um lugar importante nas especulações do intelecto humano.
Tudo começa quando Mendel publica em 1866 (na verdade os trabalhos foram
primeiramente lidos na Sociedade Histórica Natural de Brünn em 8 de fevereiro
e 8 de março de 1865) um texto com conclusões de suas observações junto
a cruzamentos efetuados com ervilhas. Segundo Mendel, a herança se dá
através de caracteres particulados (um recebido de cada pai) e apenas
um destes caracteres sobrevém no filho, embora o outro permaneça lá pronto
para ser usado nas próximas descendências.
Com esta explicação Mendel conseguiu explicar como os filhos herdavam
características dos pais, sem no entanto levar à pasteurização (homogeneização)
da descendência. Isto é o que diz a Primeira lei de Mendel (Princípio
da segregação):
Padrões hereditários são determinados por genes que ocorrem em pares no
indivíduo, mas que segregam um ao outro na formação dos gametas (células
reprodutivas), de modo que qualquer gameta recebe um o outro dos alelos
(características) pareados. O número duplo de genes é reestabelecido na
prole.
Vejamos uma experiência similar à de Mendel:
Suponhamos a colus blumei, planta caseira que pode ter 2 tipos de folha:
crenada e recortada. A borda da folha crenada é regular quase reta, e
a da recortada, traz profundos recortes. Esta planta se reproduz por cruzamento
ou por autopolinização. Comecemos separando uma planta crenada e uma recortada.
Façamos séries de autopolinização e garantamos que os filhos sempre serão
iguais aos pais. Com isto podemos garantir que tais plantas são de raça
pura para este caractere (um geneticista usaria o termo homozigoto).
Agora cruzamos as duas: todos os filhos de ambas têm folhas recortadas
(já que este é o gene dominante). Cruzando os filhos destes, ou seja,
na segunda geração, temos de crenadas (gene recessivo) e de recortadas.
Note-se que este resultado se mantém, mesmo que o recortado seja o genitor
pistilado (mãe, fornece o óvulo), ou o genitor estaminado (pai, fornece
o gameta masculino).
Trocando em miúdos, tanto o pai como a mãe entregam ao filho uma carga
genética específica para cada caractere (na verdade para a construção
de proteínas, que acionadas em tempo e local certo vão disparar e controlar
os processos vitais). Simplificando, e chamando de gene a esta carga genética,
vemos que em vez do filho tirar uma média entre o gene do pai e o da mãe
e usar esta média (o que levaria a uma indesejável pasteurização de toda
a população em poucas gerações), o filho usa apenas um dos genes (o chamado
dominante), sem no entanto perder a informação transportada pelo gene
dominado, que continua sendo transmitido aos filhos e netos e bisnetos
e....
Na próxima edição, os primórdios da computação genética e como este modelo
acima descrito pode ser simulado em computador e resolver problemas como
o planejamento de secções de asas de aviões caças de combate, ou a minimização
de energia gasta na operação de um gasoduto de 3.000 Km de comprimento,
ou a melhoria substancial dos algoritmos de machine learning, ou...
kantek@celepar.gov.br
|