08.02.2015 Views

Programação Funcional e Concorrente com Scheme

Programação Funcional e Concorrente com Scheme

Programação Funcional e Concorrente com Scheme

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

notas de aula - Jerônimo C. Pellegrini<br />

6.2 programação genética<br />

Um dos poucos casos onde o procedimento eval é a melhor maneira de resolver um<br />

problema é a implementação de programação genética.<br />

Programação genética [26, 27, 28, 29, 30] é um método programação automática: através<br />

de programação genética é possível obter programas de <strong>com</strong>putador sem a necessidade<br />

de desenvolver os algoritmos usados nestes programas.<br />

O método de programação genética é inspirado na Teoria da Evolução natural de<br />

Darwin: cada programa é visto <strong>com</strong>o um indivíduo em uma população (a população<br />

inicial é um conjunto de programas gerado aleatoreamente). Um sistema de Programação<br />

Genética então simula idéias da Teoria da Evolução Natural modificando esses programas:<br />

dois programas podem se reproduzir sexuadamente através de uma operação de cross-over<br />

e também pode haver mutação, que modifica alguma característica de um indivíduo. Os<br />

indivíduos obtidos através destas operações constituem uma nova geração. Assim <strong>com</strong>o<br />

na Evolução Natural, indivíduos que se adequam melhor ao meio tem probabilidade<br />

maior de reproduzir e portanto de propagar seu DNA para as próximas gerações. Em<br />

Programação Genética, a adequação de um programa é verificada através de sua execução:<br />

deve haver alguma maneira de medir a “qualidade” de um programa e <strong>com</strong>pará-lo <strong>com</strong><br />

outros.<br />

O algoritmo básico de Programação Genética é:<br />

1) Gere aleatoreamente uma população inicial de formas <strong>Scheme</strong> usando apenas<br />

os operadores definidos e números aleatóreos pequenos (entre um e quinze, por<br />

exemplo);<br />

2) Execute cada programa da população e meça o valor de cada um deles usando uma<br />

função de adequação (fitness);<br />

3) Crie uma nova população:<br />

a) Copie os melhores programas;<br />

b) Faça mutação em alguns dos programas;<br />

c) Crie novos programas por cross-over.<br />

Versão Preliminar<br />

A seguir detalharemos um exemplo: temos um conjunto de pontos (x, y) e queremos<br />

encontrar uma função que quando aplicada aos valores de x aproxime os valores de y <strong>com</strong><br />

140<br />

[ 27 de outubro de 2010 at 15:47 ]

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!