João Araujo
Dr. en Informatique, Université de Versailles, França.

Me parece um Celacanto

Trabalho de Laboratório de Programação 2009-2

Combatendo as trevas da ignorância, neste semestre usaremos a poderosa linguagem C para explicar um dos maiores mistérios da vida na terra e derrubar por vez com certas teorias criacionistas que pipocam por aí: Como as espécies evoluem! Mais que isso, vamos provar que pequenas mudanças aleatórias, direcionadas por um processo chamado seleção natural, podem levar a grandes saltos evolutivos! Para isso, faremos um programa muito simples na nossa linguagem mais amada.

Primeiro, expliquemos a teoria como foi formulada por Charles Darwin, há 150 anos: a seleção natural atua escolhendo os indivíduos mais aptos. Estes passam seus genes para as gerações futuras e assim evoluem uma espécie. A seleção natural não é um processo aleatório. O meio determina quem serão os escolhidos para passar seus genes adiante. Ou como Darwin escreveu em seu livro A Origem das Espécies

Pode-se dizer que a seleção natural realiza seu escrutínio dia a dia, hora a hora, pelo mundo, de qualquer variação, mesmo as mais sutis; rejeitando aquelas que são ruins e preservando e fazendo prosperar todas as que são boas; trabalhando silenciosa e imperceptivelmente, onde e quando surgir a oportunidade na melhora de cada ser orgânico em relação a suas condições orgânicas e inorgânicas de vida. Não vemos nada desse lento progresso, até que os ponteiros do relógio das eras tenham marcado um longo lapso de tempo e assim tão imperfeita é a nossa visão sobre o profundo passo das eras geológicas que tudo o que podemos ver é que as formas de vida são agora diferentes daquelas que existiam antes”.

Mas como usar C para provar isso?

A ideia é a seguinte: escolhemos uma frase que será nosso objetivo, ela atuará como molde da seleção natural, escolhendo os indivíduos mais aptos. No nosso caso “CELACANTO PROVOCA MAREMOTO” e tentaremos, a partir de frases de mesmo tamanho, mas com caracteres variando aleatoriamente, atingir esta frase. Começamos com uma frase aleatória do mesmo tamanho da frase objetivo, e desta frase geramos x frases filhas, iguais à frase genitora, mas com uma probabilidade y em cada letra, dela sofrer uma “mutação”. Das frases filhas, escolhemos a que mais se aproxima da frase objetivo (a seleção). Isto pode ser feito dando uma pontuação para cada frase filha, por exemplo, cada letra correta na posição correta vale 1 ponto. Se alguma frase gerada é igual à frase objetivo, o programa para. Senão, ele pega a frase mais “apta”, ou seja, com maior pontuação e gera outra geração de frases filhas, reiniciando o processo.

Seu programa deverá ter algumas características:

  1. Ele será invocado com a seguinte sintaxe: nome-do-programa <opção1> <opção 2>…<opção n>
  2. As opções podem ser:
    • -pn, que dá a probabilidade da mutação por letra (ex. -p3 implica numa porcentagem de 3% de chance de mutação, default é 5%).
    • -gn, que dá o número de filhas geradas a cada geração (ex. g50 implica em gerar 50 frases filhas a cada geração. Default é 100)
    • -f nome_arquivo que especifica um arquivo do qual será lida frase (ex. -f texto.txt)
    • frase, quando a frase é especificada na própria chamada (ex. “HAMLET OTELO”; A frase default é “CELACANTO PROVOCA MAREMOTO”).
  3. Cada frase selecionada deverá ser armazenada numa lista encadeada. Ao final da execução, esta lista deve ser impressa ao contrário, ou seja, partindo da última colocada nesta lista até a primeira.
  4. O programa deve emitir uma alerta quando a geração de frases filhas não tiver nenhuma com pontuação maior que a da mãe, o que provoca uma involução)
  5. A cada geração, o programa deve mostrar a frase escolhida para gerar outra prole.

Limitamos a entrada das frases a usar apenas letras maiúsculas, sem sinal nenhum de pontuação ou letras acentuadas.

O que é o Celacanto? É um peixe considerado um fóssil vivo. Se imaginava extinto, mas foi redescoberto em 1938. Celacanto provoca maremoto? Ora, procurem no Google. Dica: ele era personagem do National Kid.

trabalho_2009-2.txt · Última modificação: 04/12/2009 13:11:11 (edição externa)
geomatica Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0