O que exatamente são os algoritmos genéticos e para que tipo de problemas eles servem?


16

Percebi que algumas perguntas neste site mencionam algoritmos genéticos e isso me fez perceber que realmente não sei muito sobre eles.

Já ouvi o termo antes, mas não é algo que já usei, por isso não tenho muita ideia de como eles funcionam e para que servem. Tudo o que sei é que eles envolvem algum tipo de evolução e valores que mudam aleatoriamente.

Você pode me dar uma breve explicação, de preferência incluindo algum tipo de exemplo prático que ilustra os princípios básicos?

Respostas:


11

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.

insira a descrição da imagem aqui


Obrigado por responder aqui! Embora eu pessoalmente ache que essa é uma pergunta ideal para o AI SE, porque é básica e de "alto nível", não tenha vergonha de direcionar o OP e os leitores para o Cross Validated para perguntas mais avançadas sobre o assunto, adequadas para essa pilha .
DukeZhou

8

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.


O que se entende por solução ? Você pode me dar um exemplo prático com um problema específico, para que eu possa imaginar melhor como isso pode ser?
Disenchanted Lurker

@InquisitiveLurker Adicionei exemplos. Deixe-me saber se eles não estão suficientemente claros; Ficarei feliz em atualizar minha resposta.
SL Barth - Restabelece Monica

6

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.


6

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:

  • As funções de cruzamento são fáceis de definir e naturais : Ao lidar com certos tipos de dados, as funções de cruzamento / mutação podem ser fáceis de definir. Por exemplo, seqüências de caracteres (por exemplo, seqüências de DNA ou genes) podem ser facilmente mutadas através da junção de duas seqüências candidatas para obter uma nova (é por isso que a natureza usa algoritmos genéticos!). Árvores (como árvores filogenéticas ou árvores de análise) também podem ser emendadas, substituindo um galho de uma árvore por um galho de outra. Formas (como asas de avião ou formas de barco) podem ser facilmente alteradas, desenhando uma grade na forma e combinando diferentes seções da grade dos pais para obter um filho. Normalmente, isso significa que seu problema é composto de partes diferentes e reunir partes de soluções distintas é uma solução candidata válida.
    • Isso significa que, se seu problema for definido em um espaço vetorial em que as coordenadas não tenham significado especial, os AGs não serão uma boa opção. Se for difícil formular seu problema como um GA, não vale a pena.
  • Avaliação da caixa preta : se, para um candidato, sua função de condicionamento físico for avaliada fora do computador, os AGs são uma boa idéia. Por exemplo, se você estiver testando uma forma de asa em um túnel de ar, algoritmos genéticos ajudarão você a gerar boas formas candidatas para tentar.
    • Exceção: Simulações . Se sua função de fitness estiver medindo o desempenho de um design de bico e exigir a simulação da dinâmica de fluidos para cada formato de bico, os GAs podem funcionar bem para você. Eles também podem funcionar se você estiver simulando um sistema físico com o passar do tempo e estiver interessado em quão bem o seu projeto é executado ao longo da operação, por exemplo. modelagem de padrões de locomoção . No entanto, métodos que usam equações diferenciais parciais como restrições estão sendo desenvolvidos na literatura, por exemplo. Otimização restrita do PDE , portanto, isso pode mudar no futuro.

Não apropriado:

  • Você pode calcular um gradiente para sua função: se você tiver acesso ao gradiente de sua função, poderá fazer a descida do gradiente, que geralmente é muito mais eficiente que os GAs. A descida do gradiente pode ter problemas com mínimos locais (como os AGs), mas muitos métodos foram estudados para mitigar isso.
  • Você conhece a função de condicionamento físico de forma fechada : provavelmente é possível calcular o gradiente. Muitos idiomas têm bibliotecas que oferecem suporte à diferenciação automática , então você nem precisa fazer isso manualmente. Se sua função não for diferenciável, você poderá usar a descida do subgradiente .
  • Seu problema de otimização é de uma forma conhecida, como um programa linear ou um programa quadrático : os GAs (e métodos de otimização de caixa preta em geral) são muito ineficientes em termos do número de candidatos que precisam avaliar e são evitados, se possível.
  • O espaço da sua solução é pequeno : se você pode organizar seu espaço de pesquisa com eficiência, pode garantir que encontrou a melhor solução e fazer gráficos de contorno do espaço da solução para ver se há uma região que você precisa explorar mais.

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.


O CMA-ES é bom para problemas em que as soluções podem ser representadas como vetores com valor real.
NietzscheanAI

5

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:

  • NP-complete - O número de soluções possíveis para o problema é exponencial, mas verificar a adequação de uma solução é relativamente barato (tecnicamente, com polinômio de tempo no tamanho da entrada).
  • Caixa preta - os AGs funcionam razoavelmente bem, mesmo se você não tiver um modelo particularmente informado do problema a ser resolvido. Isso significa que essas abordagens também são úteis como uma abordagem de 'prototipagem rápida' para a solução de problemas.

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?"

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.