Como Algoritmos Evolucionários se comparam?
Conheça o Evolutionary Algorithm Playground, um web app interativo para comparar Algoritmo Genéticos e Otimização por Enxame de Partículas
Computação Evolucionária é o nome coletivo para uma variedade de técnicas de resolução de problemas baseadas em princípios de evolução biológica, como a seleção natural e herança genética. [1]
Dois desses métodos são Algoritmos Genéticos e Otimização por Enxame de Partículas (Particle Swarm Optimization — PSO).
O Algoritmo Genético (GA) é baseado na teoria evolutiva desenvolvida por Charles Darwin. Através das gerações, processos de seleção, cruzamento, mutação e elitismo são aplicados à população para encontrar o indivíduo mais apto.
Particle Swarm Optimization (PSO) é um método computacional baseado no conceito de enxames, como cardumes de peixes e bandos de pássaros. Ele procura iterativamente pelo indivíduo mais apto dentro do cluster.
Ambos algoritmos são aplicados a problemas de otimização. Um problema de otimização é o tipo de problema que busca encontrar a melhor solução entre todas as soluções viáveis. De acordo com o problema, a melhor solução pode ser os argumentos que maximizem ou minimizem a saída de uma função objetivo. Exemplos de grandezas de maximização são lucros, desempenho, vendas, crescimento, etc. As grandezas de minimização podem ser perdas, gastos de material e muitas outras.
A partir desses conceitos, o Evolutionary Algorithm Playground foi desenvolvido.
https://evolutionary-algorithm-playground.streamlit.app/
É um aplicativo da web totalmente baseado em Python que permite aos usuários ajustar vários parâmetros e ver como os algoritmos funcionam. Os algoritmos foram construídos do zero usando Numpy. O aplicativo foi desenvolvido usando Streamlit.
O objetivo do aplicativo é melhorar a compreensão de algoritmos bioinspirados de uma forma amigável e interativa. Além disso, pretende-se divulgar os algoritmos, pouco abordados na comunidade de Data Science.
Que tal darmos uma olhada nos algoritmos?
Otimização por Enxame de Partículas
Uma população é construída dentro do intervalo de busca (definido pelo usuário). Diferentemente do Algoritmo Genético, aqui a população é contínua. Também leva em consideração o número de indivíduos e a dimensão do problema (ambos definidos pelo usuário).
Os indivíduos da população serão avaliados individualmente através da função de teste. Após a avaliação, eles se movimentarão de acordo com as velocidades cognitivas e sociais. A velocidade também é influenciada por um peso de inércia (definido pelo usuário), que normalmente diminui ao longo do processo evolutivo. A velocidade cognitiva é influenciada pelo parâmetro de autoconfiança e a velocidade social é influenciada pelo parâmetro de confiança social. Isso é repetido iterativamente até que o número de gerações seja atingido.
Indivíduos que ultrapassaram o intervalo máximo do intervalo serão “grampeados” para os limites do intervalo.
Algoritmo Genético
Em outra ocasião, detalhei a implementação do algoritmo genético, então encorajo a leitura detalhada do post a seguir:
Há muito espaço para melhorias no projeto, portanto fique à vontade para propor aperfeiçoamentos. Melhorias no código para ganho de velocidade, implementação de novos algoritmos, novas funções de teste e outros métodos são mais que bem vindos.
Código do Projeto:
Meu perfil no LinkedIn:
Fontes:
[1] A.E. Eiben, James E Smith, Introduction to Evolutionary Computing (2003), Springer-Verlag Berlin Heidelberg
Nota:
Esse é um post traduzido de um texto de minha própria autoria. O post original se encontra no meu perfil.