A definição do ponto de parada de um algoritmo genético anula o objetivo do algoritmo?


11

A Wikipedia define o ponto de terminação de um GA para isso:

Geralmente, o algoritmo termina quando um número máximo de gerações foi produzido ou um nível de aptidão satisfatório foi alcançado para a população. Se o algoritmo terminou devido a um número máximo de gerações, uma solução satisfatória pode ou não ter sido alcançada.

Agora, se ele termina quando um nível de condicionamento físico satisfatório é alcançado e você é quem define esse nível de condicionamento físico, por que você não seria capaz de criar o genoma "perfeito" desde o início, já que já conhece as características? deste genoma perfeito?

Acho que estou um pouco confuso aqui. Eu pensei que o objetivo de um AG era evoluir constantemente e nos mostrar possivelmente uma solução ainda melhor do que pensávamos, e nossa função de condicionamento físico era apenas algo que o ajudou ao longo do caminho, não algo que colocamos no pedestal como terminação " estado perfeito ". Isso não destrói o ponto?


1
Provavelmente, um ajuste melhor para a história.
Karl Bielefeldt

Não o fez, embora não foi que :)
slandau

1
@ Karl: A questão é um pouco suave para a história. Provavelmente será fechado lá.
Robert Harvey

2
Obrigado, @Robert. Agora me lembro por que não visito lá. Eu acho que essa é uma dessas perguntas "entre as rachaduras".
Karl Bielefeldt

1
Você também conhece as características do seu "companheiro perfeito": elas o farão perfeitamente feliz! Mas isso não é suficiente para encontrá-los (muito menos construí-los do zero ...). A experimentação também é necessária.
precisa saber é o seguinte

Respostas:


17

A função de aptidão avalia a saída do seu algoritmo. É bem possível reconhecer uma saída ideal quando você a vê, mas não conhece as etapas para produzir essa saída a partir de qualquer entrada. É aí que os algoritmos genéticos são mais úteis.

Por exemplo, uma aplicação divertida comum do GA é produzir uma animação que pode mover uma criatura virtual de maneira eficiente. É fácil saber se a criatura está se movendo a uma certa velocidade em uma linha relativamente reta. Essa é a sua função de condicionamento físico. É muito mais difícil contar a sequência exata dos movimentos "musculares" para conseguir isso.


3
Também deve ser observado que você costuma parar após x gerações, porque o GA pode girar indefinidamente porque fica "preso" em um mínimo / máximo local que não satisfaz sua pontuação ideal de condicionamento físico. Isso pode acontecer se as funções de seleção / cruzamento / mutação não estiverem ajustadas o suficiente para o conjunto de problemas.
Steven Evers

@Karl Lembro-me da solução do algoritmo genético de Andrew Cooke para produzir o primeiro "Hello World" de Malbolge e depois perdi uma solução melhor por e-mail para ele stackoverflow.com/questions/5338627/…
pageman

8

Geralmente, você pode determinar a adequação de uma solução, mas não pode determinar diretamente a própria solução. Digamos que você esteja tentando desenvolver coelhos rápidos, e há um punhado de genes que afetam a velocidade do coelho. Você pode testar a velocidade do coelho, mas enumerar todas as combinações de genes relacionados à velocidade seria impraticável. Nesse caso, você pode ter um GA que compete com coelhos e cria os mais rápidos. Você poderia fazer isso para sempre, mas provavelmente preferiria parar quando:

  • você encontrou um coelho mais rápido que X, ou
  • a melhoria incremental ao longo de n gerações caiu abaixo de algum limite, ou
  • você criou coelhos através de gerações

5

O objetivo principal do GA é fornecer a solução para o problema que possui esse nível de condicionamento físico. É difícil encontrar essa solução usando outros algoritmos de pesquisa mais convencionais, e é por isso que você está usando um GA em primeiro lugar.

Ou, em vez de um limite de valor de condicionamento físico, você pode decidir quantas gerações deseja executar (quanto mais gerações executar, maior a chance de encontrar valores de condicionamento cada vez mais altos). Por exemplo, no problema do vendedor ambulante, é necessário obter um caminho com o menor custo entre as cidades que você precisa percorrer.

Se a sua condição de parada é um determinado nível de condicionamento aceitável ou uma certa restrição de tempo (executando o GA por um período máximo ou um número limitado de gerações para aplicativos críticos como o pathfinding ou AI) é geralmente determinado pelo seu problema domínio.


3

Intuitivamente, o objetivo de um algoritmo genético é formular uma solução algorítmica para um problema que não se presta a uma análise lógica direta. Uma vez atingido esse objetivo, o GA não precisa mais prosseguir.

Obviamente, se um melhor "condicionamento físico" for desejado, o algoritmo genético pode ser deixado em execução para ver se consegue encontrar uma solução mais altamente otimizada ou o próprio algoritmo genético pode ser ajustado para ver se convergirá para uma solução melhor.


2

Um algoritmo genético requer alguma maneira de recompensar bons genes com maior propagação. Se você não tinha como distinguir bons genes de genes ruins, não poderia usar um algoritmo genético.

Para que um algoritmo genético funcione, você deve permitir que as soluções mais adequadas sejam reproduzidas, de preferência às soluções menos adequadas. Caso contrário, você apenas tentaria soluções aleatórias.

Aqui está um exemplo típico da minha própria experiência: ao desenvolver um dos primeiros sistemas de discagem por voz, tivemos dificuldade em encontrar um algoritmo para combinar um nome falado com uma cópia armazenada com o mesmo nome. Fomos informados de que 95% de precisão na escolha de um nome em 25 era suficiente. Tínhamos um corpus armazenado de pessoas dizendo 25 nomes 10 vezes cada.

Primeiro, desenvolvemos um sistema de entrada que media o comprimento da palavra falada e a energia da frequência em vários trechos normalizados. Em seguida, desenvolvemos um algoritmo que atribuiu pesos às correspondências nesses parâmetros e comparamos dois conjuntos de parâmetros através desses pesos.

Agora, tivemos um último passo - qual deveria ser o valor desses pesos?

Criamos 1.000 conjuntos aleatórios de pesos e os testamos contra o corpus. Jogamos fora os 500 que tiveram o pior desempenho. Para os 500 restantes, duplicamos cada um e, em um deles, aumentamos ou diminuímos aleatoriamente um dos pesos.

Repetimos esse processo em um computador por cerca de duas semanas até finalmente ter um conjunto de pesos que atendiam ao critério de precisão de 95%. Em seguida, testamos em dados que não estão no corpus. Era cerca de 92% exato. Por isso, demoramos mais para obter 98% de precisão no corpus e esse conjunto de pesos produziu 95% de precisão nos dados que não estão no corpus.

Portanto, o ponto é que você deve ter uma função de condicionamento físico para executar um algoritmo genético. Se você não tem como diferenciar genes bons de genes ruins, como garantir que os genes bons se reproduzam e os genes ruins não?


0

Repita até que uma solução não difira muito da iteração anterior. Por muito, entenda uma tolerância fixa.

Solution in iteration n-6: 600
Solution in iteration n-5: 800
Solution in iteration n-4: 768
Solution in iteration n-3: 780 
Solution in iteration n-2: 778
Solution in iteration n-1: 778.23
Solution in iteration n: 780.18
Solution in iteration n+1: 780.1815

Neste exemplo, se sua tolerância fixa foi de 0,01, (n + 1) diz para você parar porque abs (solução (n + 1) -solução (n)) <0,01.

Resumindo, é aí que o seu algoritmo pode dizer: isso não vai melhorar!


0

Para uma resposta rápida à sua pergunta principal: Há uma grande diferença entre saber o que você deseja obter e saber como chegar lá.

Mais detalhadamente, por exemplo, com um dos problemas mais populares resolvidos usando algoritmos genéticos / evolutivos, geralmente um estudo de caso em sala de aula, encontrando a rota ideal em um gráfico. Isso geralmente é usado em redes para encontrar a rota mais barata de um extremo ao outro. Ao definir custos (número de saltos, custo de cada salto, etc ...), você também define seu custo-alvo (nível de condicionamento físico) no qual está satisfeito com o resultado. Seu algoritmo pode não encontrar o melhor, mas encontrará um ótimo aceitável em termos de algoritmo. Com isso, quero dizer que a relação custo / benefício de encontrar uma resposta melhor é proibitiva.

Com o GA / EA, você descobrirá que é um comportamento normal que você encontre rapidamente uma resposta ótima de 95% +, mas diminuir os últimos 5% é exponencialmente mais caro. Portanto, a teoria é que você define um ideal aceitável para obter o melhor resultado no menor tempo possível. Como o custo de encontrar, digamos o 1% superior, pode superar seus benefícios acima dos 5% superiores, você define o seu ideal aceitável.

Resumindo, agora você não responde a nenhum problema específico, apenas define, por problema, o seu ideal aceitável, o ponto em que encontrar uma resposta melhor não é prático.


0

Há pesquisas para corrigir bugs em C com algoritmos genéticos , fornecendo casos de teste negativos e positivos como funções de condicionamento físico, além de código quebrado como entrada. Este é um exemplo de um problema que pode ser resolvido por um ser humano, mas é mais fácil para um algoritmo genético. É importante observar:

Embora os métodos descritos neste documento não desenvolvam novos programas a partir do zero, eles mostram como desenvolver software legado para reparar falhas existentes.

No entanto, novos programas têm evoluído a partir do zero-não apenas em C. Os poucos programas não triviais escritas no Malbolge linguagem de programação esotérica tem tudo (que eu saiba) foi evoluído, não está escrito. A linguagem é complexa demais para um programador usar e complicada demais para deduzir programas com eficiência apenas da lógica; portanto, a maioria dos programas escritos nela foi produzida por algoritmos genéticos. A função de condicionamento físico geralmente é a distância de edição da saída esperada.

Isso é bem circular, de certa forma. Observando que o código genético complexo é escrito por processos evolutivos, podemos simular processos evolutivos para produzir código em uma linguagem complexa diferente, mesmo sem saber como o código funciona!

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.