Discussão do artigo "Algoritmos genéticos - é fácil!" - página 15

 

Olá, não vou fazer nenhuma pergunta.

Só quero agradecer imensamente pelo seu trabalho! Muito obrigado!

É muito útil.

 

Olá, eu também gostaria de expressar um grande agradecimento. O GA chamou minha atenção recentemente. Todas as fontes encontradas "sobre o GA" me deixaram desanimado. Eu não sabia para onde ir.... E então me deparei com seu artigo por meio de um link. Em uma palavra, viva! ))

Tenho algumas perguntas. Sei que o artigo foi escrito há muito tempo. Mas ainda assim...

1. as variáveis declaradas não são usadas em lugar algum.

input int    FFNormalizeDigits_P  = 0;        //Número de marcas de adaptação
input int    GeneNormalizeDigits_P= 0;        //Número de caracteres do gene

Esse é um plano para o futuro?

2. Executei o UGA várias vezes e obtive valores diferentes, ou seja, uma vez correto, na segunda vez não exatamente correto. Pergunta - qual dos parâmetros do UGA deve ser definido como "maior" para aumentar o número de respostas corretas.

No trailer observado... A imagem à esquerda mostra um resultado incorreto.

Arquivos anexados:
111.png  8 kb
 
Alexey_74:

...A questão é qual dos parâmetros do AG deve ser definido como "maior" para aumentar o número de respostas corretas.

Em geral, infelizmente, não há e não pode haver uma resposta inequívoca. Tudo depende da tarefa.

Em seu caso específico, tente distorcer esses parâmetros:

input int    ChromosomeCount_P    = 100;    /Número de cromossomos na colônia
input int    Epoch_P               = 50;    //Número de épocas sem aprimoramento
//---
input string GA_OperatorParam     =        "----Operator Parameters----";
input double ReplicationPortion_P  = 100.0; //Dole Replication.
input double NMutationPortion_P    = 10.0;  //Fração de mutação natural.
input double ArtificialMutation_P  = 10.0;  //Dole de Mutação Artificial.
input double GenoMergingPortion_P  = 20.0;  / Empréstimo de genes.
input double CrossingOverPortion_P = 20.0;  //Compartilhamento cruzado.
input double ReplicationOffset_P   = 0.5;   //Coeficiente de deslocamento do limite do intervalo
input double NMutationProbability_P= 5.0;   //Probabilidade de mutação de cada gene em %

:)

Alterar os dois primeiros parâmetros para cima aumenta inequivocamente a convergência, mas, é claro, aumenta o tempo de pesquisa.

 

Obrigado pela resposta. Brincadeiras à parte, observado.... Em geral, não faz sentido compartilhar todas as observações. As "variantes extremas" são suficientes.

Com os dois primeiros parâmetros iguais a 50 e 2, respectivamente, o tempo de execução do algoritmo é de 170-200 ms.

...., igual a 100 e 50, o tempo de execução foi de 103203 ms. Sim, o algoritmo produziu uma correspondência absoluta em termos de resultados, "como deveria" e "como aconteceu".

Infelizmente, ao que me parece, o consumo de tempo não corresponde de forma alguma aos resultados obtidos.

 
Alexey_74:

Obrigado pela resposta. Brincadeiras à parte, observado.... Em geral, não faz sentido compartilhar todas as observações. As "variantes extremas" são suficientes.

Com os dois primeiros parâmetros iguais a 50 e 2, respectivamente, o tempo de execução do algoritmo é de 170-200 ms.

...., igual a 100 e 50, o tempo de execução foi de 103203 ms. Sim, o algoritmo produziu uma correspondência absoluta em termos de resultados, "como deveria" e "como aconteceu".

Infelizmente, ao que me parece, o consumo de tempo não corresponde de forma alguma aos resultados obtidos.

Se o problema puder ser resolvido por métodos newtonianos, ele deverá ser resolvido por eles. Você obterá resultados precisos em pouco tempo.

Caso contrário, seja bem-vindo à GA. O ditado sobre um microscópio e nozes vem à mente aqui.

 
Urain:

Se o problema puder ser resolvido por métodos newtonianos, ele deverá ser resolvido por eles. Obtenha resultados precisos em um curto espaço de tempo.

Caso contrário, vá para a AG. Isso faz lembrar o ditado sobre um microscópio e nozes.

Infelizmente, não há métodos simples. Qualquer que seja a tarefa que você execute, o problema da otimização vem à tona. Como todas as hipóstases de BP, chamadas de indicadores, são paramétricas. Até mesmo o mesmo ziguezague, ao que parece....

E, como existem parâmetros, isso significa que eles devem ser re(sub)vencidos. A variante mais simples são os ciclos aninhados. Como mostra a prática, na maioria das vezes isso não é uma opção. É por isso que usamos o GA. E não do maligno, de forma alguma. )) É uma necessidade urgente.

Há um ou dois anos, fiz um experimento puro. Se você pegar dois mashki com períodos longos, a diferença entre eles (em uma janela separada) parecerá um gráfico bastante suave de forma claramente senoidal. Eu queria ver

se a soma de várias senoides pode repetir esse gráfico. Criei um script que deveria pegar 3 senoides. No início, eu queria 5, mas depois mudei de ideia para três (experimento, por que esquentar a cabeça?). O resultado foram 3 ciclos (2 aninhados)

É claro que, se você remover os comentários dos ciclos, os algoritmos cíclicos funcionarão mais rapidamente. Mas não 100 vezes, infelizmente, e a possibilidade de rastrear o processo desaparece completamente.

É por isso que o experimento foi cancelado sem ter começado. Mas a escala e a gravidade de uma situação aparentemente simples "foi ouvida" me surpreenderam e quase me assustaram. ))

 

Andrew, há mais duas perguntas:

1. No exemplo do ziguezague alternativo, você usou a frase "...quando o genótipo de um cromossomo não corresponde ao fenótipo". O que isso significa em relação à AG?

2. Pelo que entendi, a classificação é feita em ordem decrescente. Ou seja, quanto maior o valor em Colony[0][chromos], mais adaptado é o indivíduo?

Ou seja, se eu entendi corretamente, no caso de trabalhar com crivulinas no FF, pode-se (deve-se) usar os coeficientes de correlação r ou R, pois eles tendem a 0->1. E não se pode usar o MSE, pois ele é ->0.

 
Alexey_74:

Andrew, há mais duas perguntas:

1. No exemplo do ziguezague alternativo, você usou a frase "...quando o genótipo de um cromossomo não corresponde ao fenótipo". O que isso significa em relação à AG?

2. Pelo que entendi, a classificação é feita em ordem decrescente. Ou seja, quanto maior o valor em Colony[0][chromos], mais adaptado é o indivíduo?

3. ou seja, se entendi corretamente, no caso de trabalhar com curvulinas no FF, pode-se (deve-se) usar os coeficientes de correlação r ou R, pois eles tendem a 0->1. e não se pode usar o MSE, pois ele é ->0.

1. Se os genes de um cromossomo forem iguais aos argumentos da função que está sendo otimizada, o genótipo corresponderá ao fenótipo (genótipo - valores de genes, fenótipo - valores de argumentos). Se os genes e os argumentos não forem iguais (algum tipo de transformação é usado), eles não corresponderão. Pesquise no Google os conceitos de genótipo e fenótipo em biologia.

2. Sim, mas isso não é fundamental. Você pode especificar explicitamente a direção da classificação ou pode multiplicar o valor FF por -1.

3. desculpe, não entendi a pergunta.

 
joo:

1. Se os genes de um cromossomo forem os mesmos que os argumentos da função que está sendo otimizada, o genótipo corresponderá ao fenótipo (genótipo - valores dos genes, fenótipo - valores dos argumentos). Se os genes e os argumentos não forem iguais (algum tipo de transformação é usado), eles não corresponderão. Pesquise no Google os conceitos de genótipo e fenótipo em biologia.

2. Sim, mas isso não é fundamental. Você pode especificar explicitamente a direção da classificação ou pode multiplicar o valor FF por -1.

3. desculpe, não entendi a pergunta.

Obrigado.

1. Foi o que eu imaginei. Mas adivinhar é algo nebuloso e perigoso. É muito mais desejável ter certeza. Quanto à pesquisa no Google, obrigado pela orientação, mas acho que não vou usá-la. Desde a escola eu me lembro de recessivo, dominante, alelo, fenótipo, genótipo, homozigoto, heterozigoto.... Meu Deus, que monte de besteira na minha cabeça. M-sim, eles sabiam como transmitir conhecimento na escola soviética.... ))

2. também compreensível.

3. mas não havia um terceiro ponto. Apenas a terceira linha (uma continuação do segundo parágrafo), na qual o pensamento em voz alta, como "Se eu estiver certo...". Não é uma pergunta. Embora pareça que possa ser. Bem, então, pergunta retórica. Vou explicar o significado. Por exemplo, de forma puramente sintética. Temos um sinal de curva de forma senoidal e sabemos que ele é uma soma de três senoides. Tenho quase certeza absoluta de que o AG lidará com essa tarefa facilmente e produzirá períodos de todas as três senoides. Mas, no processo, é necessário medir o quanto a soma das três senoides é semelhante à referência. Em meu arsenal, há três medidas desse tipo: r (Pearson), R (p-quadrado) e MSE. Especialmente porque essas coisas também são usadas em paradigmas de redes neurais como medidas de "aptidão".

Mais uma vez, obrigado, isso torna tudo mais claro e transparente. Novamente, só recentemente mergulhei no tópico de AGs. Portanto, todos os epítetos como novato, burro, valenok são, infelizmente, todos meus.... ))

P.S. Conheço os análogos biológicos, é claro. Mas esse conhecimento é puramente para nutrir a compreensão da essência dos processos descritos por linguagens de programação de alto nível. E isso, não em todos os lugares e nem sempre. Não amarro análogos biológicos com análogos de neurocomputadores em um nó apertado. De alguma forma, na biologia (natureza) tudo funciona em uma única vez. Mas na neurocomputação, por algum motivo, na maioria das vezes não funciona.

 

Andrew, mais uma pergunta.

input string GA_OperatorParam     =        "----Operator Parameters----";
input double ReplicationPortion_P  = 100.0; //Dole Replication.
input double NMutationPortion_P    = 10.0;  //Fração de mutação natural.
input double ArtificialMutation_P  = 10.0;  //Dole de Mutação Artificial.
input double GenoMergingPortion_P  = 20.0;  / Empréstimo de genes.
input double CrossingOverPortion_P = 20.0;  //Compartilhamento cruzado.
input double ReplicationOffset_P   = 0.5;   //Coeficiente de deslocamento do limite do intervalo
input double NMutationProbability_P= 5.0;   //Probabilidade de mutação de cada gene em %

Podemos dizer que esses valores dessas variáveis são adequados para a maioria dos problemas de otimização? Como se diz em algumas fontes "... 90% dos problemas podem ser resolvidos usando um perceptron comum".