Os algoritmos evolutivos são uma família de algoritmos de otimização baseados no princípio da seleção natural darwiniana . Como parte da seleção natural, um determinado ambiente possui uma população de indivíduos que competem pela sobrevivência e reprodução. A capacidade de cada indivíduo atingir esses objetivos determina sua chance de ter filhos, ou seja, de transmitir seus genes para a próxima geração de indivíduos, que por razões genéticas terão uma chance maior de se sair bem, melhor ainda, ao realizar esses dois objetivos.
Esse princípio de melhoria contínua ao longo das gerações é adotado por algoritmos evolutivos para otimizar soluções para um problema. Na geração inicial , uma população composta por diferentes indivíduos é gerada aleatoriamente ou por outros métodos. Um indivíduo é uma solução para o problema, mais ou menos boa: a qualidade do indivíduo em relação ao problema é denominada adequação , que reflete a adequação da solução ao problema a ser resolvido. Quanto maior a aptidão de um indivíduo, maior a probabilidade de passar parte ou todo o seu genótipo para os indivíduos da próxima geração.
Um indivíduo é codificado como um genótipo , que pode ter qualquer formato, como um vetor de bits ** ( algoritmos genéticos ) ou um vetor de real (estratégias de evolução). Cada genótipo é transformado em fenótipo ao avaliar o indivíduo, ou seja, quando é calculada sua adequação. Em alguns casos, o fenótipo é idêntico ao genótipo: é chamado de codificação direta . Caso contrário, a codificação é chamada indireta. Por exemplo, suponha que você queira otimizar o tamanho de um paralelepípedo retangular definido por seu comprimento, altura e largura. Para simplificar o exemplo, suponha que essas três quantidades sejam números inteiros entre 0 e 15. Em seguida, podemos descrever cada uma delas usando um número binário de 4 bits. Um exemplo de uma solução potencial pode ser o genótipo 0001 0111 01010. O fenótipo correspondente é um paralelepípedo de comprimento 1, altura 7 e largura 10.
Durante a transição da antiga para a nova geração, são chamados operadores de variação , cujo objetivo é manipular indivíduos. Existem dois tipos distintos de operadores de variação:
- os operadores de mutação , que são usados para introduzir variações dentro do mesmo indivíduo, como mutações genéticas;
- Os operadores de cruzamento , utilizados para cruzar pelo menos dois genótipos diferentes, como cruzamentos genéticos desde a criação.
Algoritmos evolutivos provaram-se em vários campos, como pesquisa operacional, robótica, biologia, nuances ou criptografia. Além disso, eles podem otimizar vários objetivos simultaneamente e podem ser usados como caixas-pretas, porque não assumem nenhuma propriedade no modelo matemático para otimizar. Sua única limitação real é a complexidade computacional.
Um algoritmo genético é um algoritmo que gera aleatoriamente várias soluções tentadas para um problema. Esse conjunto de soluções tentadas é chamado de "população".
Em seguida, tenta ver até que ponto essas soluções resolvem o problema, usando uma determinada função de condicionamento físico . As soluções tentadas com o melhor valor de condicionamento físico são usadas para gerar uma nova população. Isso pode ser feito fazendo pequenas alterações nas soluções tentadas (mutação) ou combinando as soluções tentadas existentes (crossover).
A idéia é que, com o tempo, surja uma tentativa de solução que tenha um valor de adequação alto o suficiente para resolver o problema.
A inspiração para isso veio da teoria da evolução; as soluções mais adequadas sobrevivem e procriam.
Exemplo 1
Suponha que você estivesse procurando a maneira mais eficiente de cortar várias formas de um pedaço de madeira. Você quer desperdiçar o mínimo de madeira possível.
Suas soluções tentadas seriam arranjos aleatórios dessas formas no seu pedaço de madeira. O condicionamento físico seria determinado pela quantidade de madeira restante após o corte das formas após esse arranjo.
Quanto menos madeira sobrar, melhor será a tentativa de solução.
Exemplo 2
Suponha que você esteja tentando encontrar um polinômio que passe por vários pontos. Suas soluções tentadas seriam polinômios aleatórios.
Para determinar a adequação desses polinômios, você determina quão bem eles se encaixam nos pontos fornecidos. (Nesse caso em particular, você provavelmente usaria o método dos mínimos quadrados para determinar quão bem o polinômio se encaixa nos pontos). Em várias tentativas, você obteria polinômios que se encaixam melhor nos pontos, até ter um polinômio que se encaixasse nos pontos o suficiente.
fonte
Esta resposta solicita um exemplo prático de como alguém pode ser usado, o qual tentarei fornecer além das outras respostas. Eles parecem ter um bom trabalho em explicar o que é um algoritmo genético. Então, isso dará um exemplo.
Digamos que você tenha uma rede neural (embora não seja a única aplicação dela), que, a partir de algumas entradas fornecidas, produzirá algumas saídas. Um algoritmo genético pode criar uma população desses e, ao ver qual é o melhor resultado, criar e matar membros da população. Eventualmente, isso deve otimizar a rede neural se ela for complicada o suficiente.
Aqui está uma demonstração que fiz, que apesar de estar mal codificada, pode ajudá-lo a entender. http://khrabanas.github.io/projects/evo/evo.html Aperte o botão evoluir e mexa nos objetivos.
Ele usa um algoritmo genético simples para criar, mudar e decidir entre qual população sobrevive. Dependendo de como as variáveis de entrada são definidas, a rede poderá chegar a algum nível de proximidade. Dessa forma, a população provavelmente se tornará um grupo homogêneo, cujos resultados se assemelham aos objetivos.
O algoritmo genético está tentando criar uma espécie de "rede neural" que, ao absorver RGB, produzirá uma cor de saída. Primeiro, gera uma população aleatória. Então, pegando 3 membros aleatórios da população, selecionando aquele com a menor aptidão e removendo-o da população. A aptidão é igual à diferença no objetivo superior ao quadrado + à diferença no objetivo inferior ao quadrado. Em seguida, cria os dois remanescentes juntos e adiciona a criança ao mesmo lugar na população que o membro morto. Quando o acasalamento ocorre, há uma chance de ocorrer uma mutação. Essa mutação alterará um dos valores aleatoriamente.
Como observação lateral, devido à forma como é configurada, é impossível estar totalmente correto em muitos casos, embora atinja uma relativa proximidade.
fonte
Há várias respostas boas aqui explicando o que são algoritmos genéticos e dando exemplos de aplicativos. Estou adicionando alguns conselhos de propósito geral sobre o que eles servem, mas também casos em que você NÃO deve usá-los. Se meu tom parece duro, é porque o uso de GAs em qualquer um dos casos da seção Inadequado fará com que seu trabalho seja instantaneamente rejeitado em qualquer diário de primeira linha.
Primeiro, seu problema DEVE ser um problema de otimização. Você precisa definir uma "função de condicionamento físico" que está tentando otimizar e precisa ter uma maneira de medi-la.
Boa:
Não apropriado:
Finalmente, se você estiver considerando uma AG, considere um trabalho mais recente em Estratégias Evolucionárias. Sou tendencioso em relação ao CMA-ES , que considero um bom algoritmo simples que captura a noção de um gradiente no cenário da aptidão de uma maneira que os GAs tradicionais não.
fonte
Conforme observado em outra resposta, tudo o que você precisa para aplicar algoritmos genéticos (GAs) é representar uma solução potencial para o seu problema de uma forma sujeita a cruzamento e mutação. Idealmente, a função de condicionamento físico fornecerá algum tipo de feedback suave sobre a qualidade de uma solução, em vez de simplesmente ser uma 'Agulha no Palheiro'.
Aqui estão algumas características dos problemas que os Algoritmos Genéticos (e de fato as Metaheurísticas em geral) são bons para:
No entanto, apesar de seu amplo uso para esse fim, observe que os AGs na verdade não são otimizadores de função - os mecanismos do GA tendem a não explorar regiões 'periféricas' do espaço de pesquisa, na esperança de encontrar uma solução distante de alta qualidade, mas a agrupar-se em torno de mais picos facilmente atingíveis no 'cenário da aptidão'.
Mais detalhes sobre a aplicabilidade dos AGs são dados em um famoso artigo inicial "O que dificulta um problema para um algoritmo genético?"
fonte