Programação Evolutiva

O que é programação evolutiva?

Programação evolutiva (PE) é uma técnica de computação inspirada na evolução natural. Diferentemente dos algoritmos genéticos, ela enfatiza mutação em vez de crossover. Cada indivíduo é uma estrutura que representa um programa ou uma máquina de estados. Originalmente, ela evoluía autômatos finitos para prever sequências temporais. Hoje, a PE é aplicada a problemas de otimização contínua e discreta. A aptidão é medida pelo desempenho do indivíduo em uma tarefa específica. Os melhores indivíduos são selecionados para produzir filhos por mutação. Não há recombinação genética na forma clássica da PE. Portanto, a diversidade é mantida exclusivamente por variações mutacionais. Ela é considerada uma das abordagens evolutivas mais antigas.

Mecanismos centrais de funcionamento

A PE opera com uma população de tamanho fixo, geralmente entre 50 e 200. Cada indivíduo sofre mutação gaussiana ou cauchy em seus parâmetros. A intensidade da mutação pode ser fixa ou auto-adaptativa, como nas ES. Após a mutação, todos os filhos são avaliados pela função de aptidão. A seleção é feita por torneio estocástico ou por truncamento (μ,λ). Os indivíduos sobreviventes formam a próxima geração. Esse ciclo se repete até que um critério de parada seja satisfeito. A PE é particularmente eficaz para funções com muitas variáveis. Além disso, ela lida bem com ruído e incertezas nos dados.

Diferenças e aplicações práticas

A grande diferença da PE para os algoritmos genéticos é a ausência de crossover. Isso a torna mais simples de implementar e ajustar. Por outro lado, ela pode convergir mais lentamente em paisagens complexas. A PE é amplamente usada em previsão de séries temporais e finanças. Também é aplicada em controle de processos industriais e robótica. Sua capacidade de evoluir estratégias de tomada de decisão é notável. Para iniciantes, a PE oferece um ponto de entrada suave na computação evolutiva.

A programação evolutiva foi proposta por Lawrence Fogel nos anos 1960. Ele utilizou autômatos finitos para prever eventos em ambientes incertos. Cada autômato era uma sequência de estados e transições mutáveis. A aptidão media a precisão da previsão ao longo do tempo. Com o tempo, a PE foi generalizada para vetores numéricos reais. Atualmente, ela é frequentemente confundida com estratégias evolutivas. Contudo, a PE mantém sua identidade pela ênfase na mutação pura. Muitos pesquisadores a usam para problemas onde o crossover é prejudicial. Por exemplo, em otimização de redes neurais recorrentes. A mutação pode alterar pesos, arquitetura ou funções de ativação. A PE também é usada para gerar regras fuzzy automaticamente. Sua flexibilidade permite incorporar conhecimentos específicos do domínio. Ela é uma ferramenta valiosa para problemas mal definidos. Assim, a PE complementa outras técnicas evolutivas no arsenal do cientista.

Um exemplo clássico é evoluir um controlador para o problema do pêndulo invertido. O objetivo é manter a haste na vertical aplicando forças laterais. Cada indivíduo é um vetor de parâmetros de um controlador PID. A aptidão é o tempo que o pêndulo permanece equilibrado. A mutação ajusta os ganhos proporcional, integral e derivativo. Após algumas gerações, a PE encontra um conjunto estável de parâmetros. Esse problema ilustra a capacidade de otimização contínua da PE.


Enunciado do exemplo clássico

Utilize programação evolutiva para minimizar a função de Schwefel em 5 dimensões: f(x) = 418.9829*5 – Σᵢ xᵢ * sin(√|xᵢ|), com xᵢ ∈ [-500, 500]. O mínimo global é em xᵢ = 420.9687 para todo i, com f ≈ 0. Use população de 100 indivíduos, mutação gaussiana com sigma=15, auto-adaptação. Seleção por torneio estocástico de tamanho 2, com 80% de chance de vencer. Execute 300 gerações e armazene o melhor fitness por geração. Plote a curva de convergência e a distribuição final dos parâmetros.

Este código implementa a PE clássica com mutação auto-adaptativa. A curva de convergência mostra a redução do erro ao longo do tempo. O gráfico de violino revela a dispersão dos parâmetros na última geração. Observa-se que a maioria dos indivíduos se aproxima do ótimo teórico. A ausência de crossover é compensada pela diversidade da mutação. Para iniciantes, este exemplo demonstra a eficácia da PE pura. A programação evolutiva é, portanto, uma alternativa simples e poderosa.

Deixe um comentário