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...
|