Discussion de l'article "Algorithmes Génétiques - C'est Facile !" - page 3

 
Je vous ai dit que ma tête était en désordre, alors j'ai pris la mauvaise direction.
Le hachage peut être appliqué à la recherche de doublons au sein de la colonie, et la fonction de recherche d'un hachage peut être rendue simple et rapide, parce que même 1 ou 2 doublons ne feront pas la pluie et le beau temps et ne gâcheront pas le résultat.
 

Le temps d'exécution de l'algorithme GA est incommensurablement petit comparé à l'exécution du FF. Il est donc inutile d'essayer d'accélérer encore l'algorithme, tout comme il est inutile de déplacer l'AG vers une dll, par exemple.

Nous devons essayer de réduire le nombre d'exécutions de FF tout en conservant la précision requise du résultat. L'algorithme dispose de paramètres flexibles à cet effet. En outre, le temps de recherche peut être encore réduit en améliorant les qualités de recherche des AG en général et des opérateurs en particulier. Je recommande d'orienter le potentiel de recherche dans ces directions.

 
joo:

Le temps d'exécution de l'algorithme GA est incommensurablement petit comparé à l'exécution du FF. Il est donc inutile d'essayer d'accélérer encore l'algorithme, tout comme il est inutile de déplacer l'AG vers une dll, par exemple.

Nous devons essayer de réduire le nombre d'exécutions de FF tout en conservant la précision requise du résultat. L'algorithme dispose de paramètres flexibles à cet effet. En outre, le temps de recherche peut être encore réduit en améliorant les qualités de recherche des AG en général et des opérateurs en particulier. Je recommande d'orienter le potentiel de recherche dans ces directions.


Il semble que dll ne sera pas plus rapide que mql 5.
D'accord, dès que j'écrirai une bibliothèque, je la testerai, puis j'écrirai ce qui en est ressorti)).

 

Note importante concernant l'article.

Ne pas utiliser les paramètres de l'algorithme

FFNormaliseDigits et GeneNormaliseDigits

Il n'est pas nécessaire de normaliser la valeur de la fonction d'aptitude et les gènes. La normalisation entraîne une diminution de la capacité de recherche de l'algorithme et une augmentation du nombre d'exécutions de la FF. En outre, plus on supprime de décimales, plus l'impact négatif sur l'algorithme est important.

En d'autres termes, l'introduction de l'opération de normalisation dans l'algorithme était une erreur.

À ne pas confondre avec l'opération d'échantillonnage contrôlée par le paramètre Précision!

 
Remarque importante concernant l'article.

Ne pas utiliser les paramètres de l'algorithme

FFNormalizeDigits et GeneNormalizeDigits

Il n'est pas nécessaire de normaliser la valeur de la fonction d' aptitude et des gènes. La normalisation entraîne une diminution de la capacité de recherche de l'algorithme et une augmentation de la quantité de départs FF. En outre, plus le nombre de signes après une virgule est élevé, plus l'influence négative sur l'algorithme se fait sentir.

En d'autres termes, l'introduction de l'opération de normalisation dans l'algorithme était une erreur.

Ne pas confondre avec l'opération de numérisation opérée dans le paramètre Precision!

 
joo:

Note importante concernant l'article.

Ne pas utiliser les paramètres de l'algorithme

FFNormaliseDigits et GeneNormaliseDigits

Il n'est pas nécessaire de normaliser la valeur de la fonction d'aptitude et les gènes. La normalisation entraîne une diminution de la capacité de recherche de l'algorithme et une augmentation du nombre d'exécutions de la FF. En outre, plus on supprime de décimales, plus l'impact négatif sur l'algorithme est important.

En d'autres termes, l'introduction de l'opération de normalisation dans l'algorithme était une erreur.

À ne pas confondre avec l'opération d'échantillonnage contrôlée par le paramètre Precision!

Il est donc préférable de supprimer la normalisation dans la bibliothèque UGAlib elle-même ou seulement dans FF.
 
Serj_Che:
Est-il préférable de supprimer la normalisation dans la bibliothèque UGAlib elle-même ou seulement dans FF.
FFNormalizeDigits est utilisé dans FF pour normaliser la valeur de fitness et GeneNormalizeDigits est utilisé dans l'algorithme lui-même pour normaliser les gènes. Il n'est pas nécessaire de normaliser les deux.
 
joo:
FFNormalizeDigits est utilisé dans FF pour normaliser la valeur d'aptitude et GeneNormalizeDigits est utilisé dans l'algorithme lui-même pour normaliser les gènes. Il n'est pas nécessaire de normaliser les deux.

Je vois. Bien sûr, je vais le corriger moi-même, mais si ce n'est pas difficile, veuillez poster la version corrigée d'UGAlib.

J'ai peur de faire des erreurs.

 
Mise à jour de la bibliothèque UGA et des exemples dans l'article. La version gratuite de l'auteur 1.1.0 est disponible aux liens dans le texte à la fin de l'article.
 

Un grand merci à l'auteur pour la bibliothèque !

Ajoutez la ligne "cnt++ ;" dans la boucle de la fonction de recherche parente, sinon elle risque d'entrer dans une boucle éternelle !

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

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++; 

  }

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

}