Discusión sobre el artículo "Algoritmos Genéticos: ¡Es fácil!" - página 3

 
Hash puede aplicarse a la búsqueda de duplicados dentro de la colonia, y la función de encontrar un hash puede hacerse simple y rápida, porque incluso 1-2 duplicados no harán el tiempo y no estropearán el resultado.
 

El tiempo de ejecución del algoritmo GA es inconmensurablemente pequeño comparado con la ejecución de FF. Por lo tanto, no tiene sentido intentar acelerar aún más el algoritmo, al igual que no tiene sentido trasladar el AG a una dll, por ejemplo.

Debemos intentar reducir el número de ejecuciones FF con la precisión requerida del resultado. El algoritmo tiene ajustes flexibles para este propósito. Además, el tiempo de búsqueda puede reducirse aún más mejorando las cualidades de búsqueda de los AG en general y de los operadores en particular. Recomiendo dirigir el potencial de investigación en estas direcciones.

 
joo:

El tiempo de ejecución del algoritmo GA es inconmensurablemente pequeño comparado con la ejecución de FF. Por lo tanto, no tiene sentido intentar acelerar aún más el algoritmo, al igual que no tiene sentido trasladar el AG a una dll, por ejemplo.

Debemos intentar reducir el número de ejecuciones FF con la precisión requerida del resultado. El algoritmo tiene ajustes flexibles para este propósito. Además, el tiempo de búsqueda puede reducirse aún más mejorando las cualidades de búsqueda de los AG en general y de los operadores en particular. Recomiendo dirigir el potencial de investigación en estas direcciones.


Parece que dll ahora no será más rápido que mql 5.
Vale, en cuanto escriba una librería la probaré, luego escribiré lo que salió))).

 

Nota importante al artículo.

No utilice los parámetros del algoritmo

FFNormaliseDigits y GeneNormaliseDigits

No es necesario normalizar el valor de la función de aptitud y los genes. La normalización provoca una disminución de la capacidad de búsqueda del algoritmo y un aumento del número de ejecuciones FF. Además, cuantos más decimales se descarten, mayor será el impacto negativo en el algoritmo.

En otras palabras, introducir la operación de normalización en el algoritmo fue un error.

¡No confundir con la operación de muestreo controlada por el parámetro Precisión!

 
La observación importante al artículo.

No utilice los parámetros del algoritmo

FFNormalizeDigits y GeneNormalizeDigits

No es necesario normalizar el valor de la función de aptitud y los genes. La normalización conduce a la disminución de la capacidad de búsqueda del algoritmo y el aumento de la cantidad de arranques FF. Y, cuantos más signos después de una coma se rechaza, la influencia negativa en el algoritmo se muestra más fuertemente.

En otras palabras, la introducción de la operación de normalización en el algoritmo fue un error.

¡No confundir con la operación de digitalización operada en el parámetro Precisión!

 
joo:

Nota importante al artículo.

No utilice los parámetros del algoritmo

FFNormaliseDigits y GeneNormaliseDigits

No es necesario normalizar el valor de la función de aptitud y los genes. La normalización provoca una disminución de la capacidad de búsqueda del algoritmo y un aumento del número de ejecuciones FF. Además, cuantos más decimales se descarten, mayor será el impacto negativo en el algoritmo.

En otras palabras, introducir la operación de normalización en el algoritmo fue un error.

¡No confundir con la operación de muestreo controlada por el parámetro Precisión!

Así que en la propia librería UGAlib es mejor eliminar la normalización o sólo en FF.
 
Serj_Che:
¿Es mejor eliminar la normalización en la propia biblioteca UGAlib o sólo en FF.
FFNormalizeDigits se utiliza en FF para normalizar el valor de fitness y GeneNormalizeDigits se utiliza en el propio algoritmo para normalizar los genes. No es necesario normalizar ambos.
 
joo:
FFNormalizeDigits se utiliza en FF para normalizar el valor de fitness y GeneNormalizeDigits se utiliza en el propio algoritmo para normalizar los genes. No es necesario normalizar ambos.

Ya veo. Por supuesto, lo corregiré yo mismo, pero si no es difícil, por favor publica la versión corregida de UGAlib.

Me temo que cometeré errores.

 
Biblioteca UGA actualizada y ejemplos al artículo. La actual versión gratuita de autor 1.1.0 está disponible en los enlaces en el texto al final del artículo.
 

¡Muchas gracias al autor por la biblioteca!

Añade la línea "cnt++;" en el bucle de la función de búsqueda padre, ¡de lo contrario puede entrar en un bucle 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++; 

  }

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

}