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

 
ivandurak:
Quels critères et combien de descendants doivent être tués ? A partir de quelle époque l'inceste peut-il être autorisé ? En général, on ne sait pas très bien selon quel principe tuer les parents. Malheureusement, votre travail n'est pas tout à fait adapté à mes objectifs, mais je vous remercie beaucoup de m'avoir brossé dans le sens du poil.

Il n'est pas nécessaire de tuer qui que ce soit. Cela peut fonctionner même avec un seul chromosome (se croiser avec soi-même). En moyenne, 50 chromosomes suffisent pour tous les usages.

Vous ne comprenez tout simplement pas l'algorithme.

L'algorithme est universel, il convient à tous les usages, c'est pourquoi il est appelé UGA. Il y a simplement des tâches qui peuvent être résolues plus rapidement par d'autres moyens.

 
ivandurak:

1. Donnez-moi un indice, s'il vous plaît ....

2. selon quel critère et combien de descendants tuer.

3. Le nombre de parents et de descendants doit dépendre du nombre de paramètres à optimiser.

4. A partir de quelle époque l'inceste peut être autorisé .

5. En général, il n'est pas évident de savoir selon quel principe il faut tuer les parents .

6. Malheureusement, votre travail n'est pas tout à fait adapté à mes besoins, mais je vous remercie d'avance.

1. Je ne comprends pas très bien l'objectif de votre message. Si vous avez besoin de conseils sur la mise en œuvre de votre algorithme, vous avez besoin de détails, d'un concept général, pour ainsi dire, afin qu'il y ait matière à discussion.

Si les questions portent sur l'algorithme décrit dans l'article, voir 2, 3, 4, 5, 5. 2, 3, 4, 5, 6.

2. Les descendants ne sont pas tués. Les doublons des parents et de leurs descendants sont tués.

3. 50 individus dans l'ensemble de la population est la signification la plus couramment utilisée.

4. Les croisements "avec soi-même" ne sont pas autorisés. Mais si c'est vraiment nécessaire (la population est en train de "s'éteindre"), c'est possible. Dans ce cas :) plusieurs tentatives sont faites pour trouver un "partenaire" adéquat.

5. Les parents ne sont pas "tués" au hasard ou sous certaines conditions, mais sont remplacés par des descendants (exactement la moitié de la population est remplacée par des descendants - si, bien sûr, la population est pleine).

6. Si le problème est très "spécifique", essayez peut-être (si c'est possible) de trouver d'abord une solution analytique.

 

Je vous remercie pour votre réponse rapide. J'ai besoin de génétique pour diverses expériences. Malheureusement, dans le réseau, l'ensemble de l'algorithme est mal décrit, principalement les déterminants de l'AG ; si vous donnez un lien vers la description (en russe), je vous en serai très reconnaissant. Ci-dessous, je vais décrire comment je vois les choses, si ce n'est pas difficile à corriger.

1 Créer aléatoirement des individus parentaux, pas moins de 50.

2 Générer à partir d'eux, par croisements et mutations, une colonie de descendants dont le nombre n'est pas inférieur à ...... Je n'ai trouvé nulle part de description.

3 Recherche de doublons, suppression de l'individu parental.

5 Si nécessaire, complète les colonies de descendants et de parents. Les parents sont créés au hasard, les descendants naturellement.

4 On les passe tous au FF. Le FF est placé en dehors de l'AG.

5 Nous les classons tous. Le meilleur d'entre eux se voit attribuer le statut de Rambo. Plus le classement est élevé, plus il a de chances de devenir papa.

6 Diviser l'ensemble des individus en forts et faibles. Les forts deviendront des parents à l'étape suivante.

7 Supprimer une partie de la colonie par la progéniture (les plus inaptes). Avec une faible probabilité, nous éliminons une partie de la colonie des parents, comme dans le cas d'une mort accidentelle, Rambo n'est pas soumis à la purge des cadres.

8 C'est la fin de l'ère.

9 Si pendant .... (préciser) un seul et même individu détient le drapeau Rambo - les calculs se terminent GA convergé, sinon passer au point 3.

 
ivandurak:
....
Désolé, mais j'ai l'impression que vous devriez relire l'article.
 
J'ai écrit mon AG avec beaucoup d'efforts. Mais il reste bloqué dans les extrêmes locaux. Avez-vous des recommandations générales sur la façon d'éviter cela ?
 
ivandurak:
J'ai écrit mon AG avec beaucoup d'efforts. Mais il se bloque dans les extrêmes locaux. Pouvez-vous me donner quelques recommandations générales sur la manière de l'éviter ?

Ce n'est pas une contagion, c'est une magie spéciale, "génétique". :)

Quelle fonction utilisez-vous comme FF ?

Je recommande de tester, calibrer et déboguer votre algorithme d'optimisation sur des fonctions spécialement conçues à cet effet.

Тестовая многопеременная многоэкстремальная функция. - MQL4 форум
  • www.mql5.com
Тестовая многопеременная многоэкстремальная функция. - MQL4 форум
 
Pardonnez mon intrusion, mais il s'agit d'une question de principe. J'ai pris un exemple dans votre article et j'ai écrit un script pour le vérifier. La réponse ne coïncide pas avec l'exemple, soit les skis ne se déplacent pas, soit le problème se situe au niveau du rembourrage entre la chaise et le clavier. S'il n'est pas difficile de titiller comme un chaton, le deuxième jour je n'arrive pas à trouver l'erreur. Cordialement, je vous prie d'agréer, Madame, Monsieur, mes salutations distinguées.
void OnStart()
  {
   double y,x1,x2 ;
   x1=-3.315699;
   x2=-3.072485;
   y=pow((cos(2-pow(x1,2))-1.1),2)+pow((sin(0.5-x1)-1.2),2)-pow((cos(2-pow(x2,2))-1.1),2)+pow((sin(0.5-x2)-1.2),2);
   Print("La solution 1 est probablement la bonne = ",y) ;
//-------------------------------------------------------------------
   x1=2.252170;
   x2=-4.5171187;
   y=pow((cos(2-pow(x1,2))-1.1),2)+pow((sin(0.5-x1)-1.2),2)-pow((cos(2-pow(x2,2))-1.1),2)+pow((sin(0.5-x2)-1.2),2);
   Print("La solution 2 est la mienne = ",y) ;
  }
 
ivandurak:
Pardonnez mon intrusion, mais il s'agit d'une question de principe. J'ai pris un exemple dans votre article et j'ai écrit un script pour le vérifier. La réponse ne coïncide pas avec l'exemple, soit les skis ne se déplacent pas, soit le problème se situe au niveau du rembourrage entre la chaise et le clavier. S'il n'est pas difficile de titiller comme un chaton, le deuxième jour je n'arrive pas à trouver l'erreur. Je vous prie d'agréer, Madame, Monsieur, l'expression de mes salutations distinguées.
Exactement, il faut changer le joint. Désolé.
 
ivandurak:
Pardonnez mon intrusion, mais il s'agit d'une question de principe. J'ai pris un exemple dans votre article et j'ai écrit un script pour le vérifier. La réponse ne coïncide pas avec l'exemple, soit les skis ne se déplacent pas, soit le problème se situe au niveau du rembourrage entre la chaise et le clavier. S'il n'est pas difficile de titiller comme un chaton, le deuxième jour je n'arrive pas à trouver l'erreur. Je vous prie d'agréer, Madame, Monsieur, l'expression de mes salutations distinguées.

Si vous n'avez pas confiance dans le FF lui-même, en ce sens que vous n'êtes pas sûr que vos extrema sont tels, vous pouvez exécuter la fonction dans un testeur, le testeur GA en ce sens est assez bon, et trouve une solution assez précise, mais seulement avec un petit nombre de paramètres (1,2).

En général, il faut comprendre que l'AG ne trouve pas une solution exacte, mais une solution robuste. C'est-à-dire une solution qui est assez bonne par rapport à l'ensemble des solutions possibles.

 
ivandurak:
Pardonnez mon intrusion, mais il s'agit d'une question de principe. J'ai pris un exemple dans votre article et j'ai écrit un script pour le vérifier. La réponse ne coïncide pas avec l'exemple, soit les skis ne se déplacent pas, soit le problème se situe au niveau du rembourrage entre la chaise et le clavier. S'il n'est pas difficile de titiller comme un chaton, le deuxième jour je ne trouve pas l'erreur. Je vous prie d'agréer, Monsieur, l'expression de mes sentiments distingués.
void OnStart()
  {
   double y,x1,x2 ;
   x1=-3.315699;
   x2=-3.072485;
   //y=pow((cos(2.0-pow(x1,2.0))-1.1),2.0)+pow((sin(0.5-x1)-1.2),2.0)-
   //  pow((cos(2.0-pow(x2,2.0))-1.1),2.0)+pow((sin(0.5-x2)-1.2),2.0);
   y=  pow(cos((double)(2*x1*x1))-0.11 e1, 0.2 e1)+pow(sin(0.5 e0*(double)x1)-0.12 e1,0.2 e1) - 
       pow(cos((double)(2*x2*x2))-0.11 e1, 0.2 e1)+pow(sin(0.5 e0*(double)x2)-0.12 e1,0.2 e1);
   Print("La solution 1 est correcte = ",y) ;
   //-------------------------------------------------------------------
   x1=2.252170;
   x2=-4.5171187;
   //y=pow((cos(2.0-pow(x1,2.0))-1.1),2.0)+pow((sin(0.5-x1)-1.2),2.0)-
   //  pow((cos(2.0-pow(x2,2.0))-1.1),2.0)+pow((sin(0.5-x2)-1.2),2.0);
   y=  pow(cos((double)(2*x1*x1))-0.11 e1, 0.2 e1)+pow(sin(0.5 e0*(double)x1)-0.12 e1,0.2 e1) - 
       pow(cos((double)(2*x2*x2))-0.11 e1, 0.2 e1)+pow(sin(0.5 e0*(double)x2)-0.12 e1,0.2 e1);
   Print("Décision 2. Faux = ",y) ;
  }
J'ai une correspondance pour une raison quelconque. Probablement parce que j'ai utilisé la fonction comme dans l'article.