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.