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

 
Eu lhe disse que minha cabeça está uma bagunça, então fui na direção errada.
O hash pode ser aplicado à busca de duplicatas na colônia, e a função de encontrar um hash pode ser simples e rápida, porque mesmo uma ou duas duplicatas não farão o clima e não prejudicarão o resultado.
 

O tempo de execução do algoritmo GA é incomensuravelmente pequeno em comparação com a execução do FF. Portanto, não faz sentido tentar acelerar ainda mais o algoritmo, assim como não faz sentido mover o GA para um dll, por exemplo.

Devemos tentar reduzir o número de execuções de FF com a precisão necessária do resultado. O algoritmo tem configurações flexíveis para essa finalidade. Além disso, o tempo de pesquisa pode ser reduzido ainda mais com o aprimoramento das qualidades de pesquisa dos AGs em geral e dos operadores em particular. Recomendo direcionar o potencial de pesquisa para essas direções.

 
joo:

O tempo de execução do algoritmo GA é incomensuravelmente pequeno em comparação com a execução do FF. Portanto, não faz sentido tentar acelerar ainda mais o algoritmo, assim como não faz sentido mover o GA para um dll, por exemplo.

Devemos tentar reduzir o número de execuções de FF com a precisão necessária do resultado. O algoritmo tem configurações flexíveis para essa finalidade. Além disso, o tempo de pesquisa pode ser reduzido ainda mais com o aprimoramento das qualidades de pesquisa dos AGs em geral e dos operadores em particular. Recomendo direcionar o potencial de pesquisa para essas direções.


Parece que a dll agora não será mais rápida do que a mql 5.
Ok, assim que eu escrever uma biblioteca, vou testá-la e depois escreverei o que saiu))).

 

Observação importante sobre o artigo.

Não use os parâmetros do algoritmo

FFNormaliseDigits e GeneNormaliseDigits

Não é necessário normalizar o valor da função de aptidão e os genes. A normalização reduz a capacidade de pesquisa do algoritmo e aumenta o número de execuções de FF. Além disso, quanto mais casas decimais forem descartadas, maior será o impacto negativo sobre o algoritmo.

Em outras palavras, a introdução da operação de normalização no algoritmo foi um erro.

Não confundir com a operação de amostragem controlada pelo parâmetro Precision!

 
Observação importante para o artigo.

Não use os parâmetros do algoritmo

FFNormalizeDigits e GeneNormalizeDigits

Não é necessário normalizar o valor da função de aptidão e dos genes. A normalização leva à diminuição da capacidade de busca do algoritmo e ao aumento da quantidade de FFs iniciais. E, quanto mais sinais após uma vírgula forem rejeitados, mais forte será a influência negativa no algoritmo.

Em outras palavras, a introdução da operação de normalização no algoritmo foi um erro.

Não confundir com a operação de digitalização operada no parâmetro Precision!

 
joo:

Observação importante sobre o artigo.

Não use os parâmetros do algoritmo

FFNormaliseDigits e GeneNormaliseDigits

Não é necessário normalizar o valor da função de aptidão e os genes. A normalização reduz a capacidade de pesquisa do algoritmo e aumenta o número de execuções de FF. Além disso, quanto mais casas decimais forem descartadas, maior será o impacto negativo sobre o algoritmo.

Em outras palavras, a introdução da operação de normalização no algoritmo foi um erro.

Não confundir com a operação de amostragem controlada pelo parâmetro Precision!

Portanto, na própria biblioteca UGAlib, é melhor remover a normalização ou apenas em FF.
 
Serj_Che:
É melhor remover a normalização na própria biblioteca UGAlib ou apenas na FF.
FFNormalizeDigits é usado no FF para normalizar o valor de aptidão e GeneNormalizeDigits é usado no próprio algoritmo para normalizar os genes. Não há necessidade de normalizar ambos.
 
joo:
O FFNormalizeDigits é usado no FF para normalizar o valor de aptidão e o GeneNormalizeDigits é usado no próprio algoritmo para normalizar os genes. Não há necessidade de normalizar ambos.

Entendo. É claro que eu mesmo corrigirei o problema, mas se não for difícil, publique a versão corrigida do UGAlib.

Tenho medo de cometer erros.

 
Biblioteca UGA e exemplos atualizados no artigo. A atual versão gratuita do autor 1.1.0 está disponível nos links no texto, no final do artigo.
 

Muito obrigado ao autor pela biblioteca!

Adicione a linha "cnt++;" no loop da função de pesquisa principal, caso contrário, ela poderá entrar em um loop eterno!

 //Отбор двух родителей.

void SelectTwoParents

(

int &address_mama,

int &address_papa

)

{

  //-----------------------Переменные-------------------------------------

  int cnt=1;

  address_mama=0;//адрес материнской особи в популяции

  address_papa=0;//адрес отцовской особи в популяции

  //----------------------------------------------------------------------

  //----------------------------Отбор родителей--------------------------

  //Десять попыток выбрать разных родителей.

  while (cnt<=10)

  {

    //Для материнской особи

    address_mama=NaturalSelection();

    //Для отцовской особи

    address_papa=NaturalSelection();

    if (address_mama!=address_papa)

      break;

    cnt++; 

  }

  //---------------------------------------------------------------------

}