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

 

Bonjour, je ne poserai pas de questions.

Je veux juste vous dire un grand merci pour votre travail ! Je vous remercie !

C'est très utile.

 

Bonjour, je tiens moi aussi à vous adresser un grand merci. L'AG a attiré mon attention récemment. Toutes les sources trouvées "à propos de GA" m'ont découragé. Je ne savais pas où aller.... Et puis je suis tombé sur votre article grâce à un lien. En un mot, hourra ! ))

J'ai quelques questions. Je sais que l'article a été écrit il y a longtemps. Mais tout de même...

1. les variables déclarées ne sont utilisées nulle part.

input int    FFNormalizeDigits_P  = 0;        //Nombre de marques d'adaptation
input int    GeneNormalizeDigits_P= 0;        //Nombre de caractères du gène

Est-ce un plan pour l'avenir ?

2. J'ai lancé l'UGA plusieurs fois et j'ai obtenu des valeurs différentes, c'est-à-dire une fois correctes, la deuxième fois pas tout à fait correctes. La question est de savoir lequel des paramètres de l'UGA devrait être réglé sur "plus grand" pour augmenter le nombre de réponses correctes.

Dans la bande-annonce observée... L'image de gauche montre un résultat incorrect.

Dossiers :
111.png  8 kb
 
Alexey_74:

...La question est de savoir lequel des paramètres de l'AG doit être réglé "plus grand" pour augmenter le nombre de réponses correctes.

En général, malheureusement, il n'y a pas et il ne peut pas y avoir de réponse univoque. Tout dépend de la tâche.

Dans votre cas particulier, essayez de modifier ces paramètres :

input int    ChromosomeCount_P    = 100;    //Nombre de chromosomes dans la colonie
input int    Epoch_P               = 50;    //Nombre d'époques sans amélioration
//---
input string GA_OperatorParam     =        "----Opérateur Paramètres----";
input double ReplicationPortion_P  = 100.0; //Dole Replication.
input double NMutationPortion_P    = 10.0;  /Fraction de mutation naturelle.
input double ArtificialMutation_P  = 10.0;  /Dole de la Mutation Artificielle.
input double GenoMergingPortion_P  = 20.0;  //Emprunt de gènes.
input double CrossingOverPortion_P = 20.0;  //Action de croisement.
input double ReplicationOffset_P   = 0.5;   //Coefficient de décalage de la limite d'intervalle
input double NMutationProbability_P= 5.0;   /Probabilité de mutation de chaque gène en %.

:)

La modification des deux premiers paramètres vers le haut sans ambiguïté augmente la convergence, mais, bien sûr, augmente le temps de recherche.

 

Merci pour votre réponse. J'ai joué, observé.... En général, il n'est pas utile de partager toutes les observations. Les "variantes extrêmes" suffisent amplement.

Avec les deux premiers paramètres égaux à 50 et 2, respectivement, le temps d'exécution de l'algorithme est de 170-200 ms.

...., égal à 100 et 50, le temps d'exécution était de 103203 ms. Oui, l'algorithme a produit une correspondance absolue en termes de résultats, "comme il se doit" et "comme il s'est avéré".

Hélas, il me semble que la consommation de temps ne correspond pas du tout aux résultats obtenus.

 
Alexey_74:

Merci de votre réponse. J'ai joué, observé.... En général, il n'est pas utile de partager toutes les observations. Les "variantes extrêmes" suffisent amplement.

Avec les deux premiers paramètres égaux à 50 et 2, respectivement, le temps d'exécution de l'algorithme est de 170-200 ms.

...., égal à 100 et 50, le temps d'exécution était de 103203 ms. Oui, l'algorithme a produit une correspondance absolue en termes de résultats, "comme il se doit" et "comme il s'est avéré".

Hélas, il me semble que la consommation de temps ne correspond pas du tout aux résultats obtenus.

Si le problème peut être résolu par les méthodes newtoniennes, il doit l'être. Vous obtiendrez des résultats précis en peu de temps.

Si ce n'est pas le cas, bienvenue à l'AG. L'expression "un microscope et des écrous" me vient à l'esprit.

 
Urain:

Si le problème peut être résolu par les méthodes newtoniennes, il doit l'être par elles. Obtenez des résultats précis en peu de temps.

Si ce n'est pas le cas, il faut s'adresser à l'AG. Cela me rappelle le dicton sur le microscope et les écrous.

Malheureusement, il n'existe pas de méthode simple. Quelle que soit la tâche entreprise, le problème de l'optimisation se pose. Toutes les hypostases BP, appelées indicateurs, sont paramétriques. Même le même zigzag, semble-t-il....

Et puisqu'il y a des paramètres, cela signifie qu'il faut les re(sub)battre. La variante la plus simple est celle des cycles imbriqués. Comme le montre la pratique, ce n'est le plus souvent pas une option. C'est pourquoi nous utilisons l'AG. Et pas du tout de la part du méchant. )) C'est une nécessité urgente.

Il y a un an ou deux, j'ai fait une expérience pure et simple. Si vous prenez deux mashki avec de longues périodes, leur différence (dans une fenêtre séparée) ressemblera à un graphique assez lisse de forme clairement sinusoïdale. Je voulais voir

si la somme de plusieurs sinusoïdes peut reproduire ce graphique. J'ai créé un script censé récupérer 3 sinusoïdes. Au début, j'en voulais 5, puis j'ai changé d'avis pour trois (expérience, pourquoi s'échauffer ?). Le résultat a été 3 cycles (2 imbriqués)

Bien sûr, si l'on supprime les commentaires des cycles, les algorithmes cycliques fonctionnent plus rapidement. Mais pas 100 fois, malheureusement, et la possibilité de suivre le processus disparaît complètement.

C'est pourquoi l'expérience a été annulée sans avoir commencé. Mais l'ampleur et la gravité d'une situation apparemment simple "a été entendue" m'a surpris et presque effrayé. ))

 

Andrew, j'ai encore deux questions à poser :

1. Dans l'exemple du zigzag alternatif, vous avez utilisé la phrase "...lorsque le génotype d'un chromosome ne correspond pas au phénotype". Qu'est-ce que cela signifie par rapport à l'AG ?

2. Si je comprends bien, le classement se fait par ordre décroissant. C'est-à-dire que plus la valeur de Colony[0][chromos] est élevée, plus l'individu est adapté ?

Si j'ai bien compris, lorsqu'on travaille avec des crivulines dans FF, on peut (doit) utiliser les coefficients de corrélation r ou R car ils tendent vers 0->1. Et on ne peut pas utiliser MSE car il est ->0.

 
Alexey_74:

Andrew, j'ai encore deux questions à poser :

1. Dans l'exemple du zigzag alternatif, vous avez utilisé la phrase "...lorsque le génotype d'un chromosome ne correspond pas au phénotype". Qu'est-ce que cela signifie par rapport à l'AG ?

2. Si je comprends bien, le classement se fait par ordre décroissant. C'est-à-dire que plus la valeur de Colony[0][chromos] est élevée, plus l'individu est adapté ?

3. si j'ai bien compris, dans le cas du travail avec les curvulines dans FF, on peut (doit) utiliser les coefficients de corrélation r ou R, car ils tendent vers 0->1. et on ne peut pas utiliser MSE, car il est ->0.

1. Si les gènes d'un chromosome sont les mêmes que les arguments de la fonction optimisée, le génotype correspond au phénotype (génotype - valeurs des gènes, phénotype - valeurs des arguments). Si les gènes et les arguments ne sont pas égaux (une sorte de transformation est utilisée), ils ne correspondent pas. Cherchez sur Google les concepts de génotype et de phénotype en biologie.

2. Oui, mais ce n'est pas fondamental. Vous pouvez spécifier explicitement la direction du classement, ou vous pouvez multiplier la valeur FF par -1.

3) Désolé, je n'ai pas compris la question.

 
joo:

1. Si les gènes d'un chromosome sont identiques aux arguments de la fonction optimisée, le génotype correspond au phénotype (génotype - valeurs des gènes, phénotype - valeurs des arguments). Si les gènes et les arguments ne sont pas égaux (une sorte de transformation est utilisée), ils ne correspondent pas. Cherchez sur Google les concepts de génotype et de phénotype en biologie.

2. Oui, mais ce n'est pas fondamental. Vous pouvez spécifier explicitement la direction du classement, ou vous pouvez multiplier la valeur FF par -1.

3) Désolé, je n'ai pas compris la question.

Merci de votre compréhension.

1. C'est ce que j'ai supposé. Mais deviner est une chose trouble et dangereuse. Il est beaucoup plus souhaitable d'avoir une certitude. Pour ce qui est de googler, merci pour le conseil, mais je ne l'utiliserai pas, je pense. Depuis l'école, je me souviens de récessif, dominant, allèle, phénotype, génotype, homozygote, hétérozygote.... Mon Dieu, que de bêtises dans ma tête ! M-oui, ils savaient comment donner des connaissances à l'école soviétique.... ))

2) C'est également compréhensible.

3) Mais il n'y avait pas de troisième point. Juste la troisième ligne (suite du deuxième paragraphe), où l'on pense tout haut, comme "Si j'ai raison...". Ce n'est pas une question. Bien qu'il semble que ce soit le cas. Dans ce cas, il s'agit d'une question rhétorique. Je vais en expliquer le sens. Par exemple, de manière purement synthétique. Nous avons un signal de courbe de forme sinusoïdale et nous savons qu'il s'agit d'une somme de trois sinusoïdes. Je suis presque absolument certain que l'AG s'acquittera facilement de cette tâche et produira les périodes des trois sinusoïdes. Mais au cours du processus, il est nécessaire de mesurer à quel point la somme des trois sinusoïdes est similaire à la référence. Dans mon arsenal, il existe trois mesures de ce type : r (Pearson), R (p-carré) et MSE. D'autant plus que ces éléments sont également utilisés dans les paradigmes de réseaux neuronaux comme mesures de "fitness".

Merci encore, cela rend les choses plus claires, plus transparentes. Encore une fois, je n'ai que récemment plongé dans le sujet des AG. Par conséquent, tous les épithètes tels que novice, idiot, valenok sont, hélas, tous les miens.... ))

P.S. Je connais les analogues biologiques, bien sûr. Mais cette connaissance est purement destinée à favoriser la compréhension de l'essence des processus décrits par les langages de programmation de haut niveau. Et cela, pas partout et pas toujours. Je ne fais pas un nœud serré entre les analogues biologiques et les analogues neuro-informatiques. D'une certaine manière, en biologie (nature), tout fonctionne en une seule fois. Mais en neuro-informatique, pour une raison ou une autre, la plupart du temps, cela ne fonctionne pas.

 

Andrew, une dernière question.

input string GA_OperatorParam     =        "----Opérateur Paramètres----";
input double ReplicationPortion_P  = 100.0; //Dole Replication.
input double NMutationPortion_P    = 10.0;  /Fraction de mutation naturelle.
input double ArtificialMutation_P  = 10.0;  /Dole de la Mutation Artificielle.
input double GenoMergingPortion_P  = 20.0;  //Emprunt de gènes.
input double CrossingOverPortion_P = 20.0;  //Action de croisement.
input double ReplicationOffset_P   = 0.5;   //Coefficient de décalage de la limite d'intervalle
input double NMutationProbability_P= 5.0;   /Probabilité de mutation de chaque gène en %.

Peut-on dire que de telles valeurs de ces variables conviennent à la plupart des problèmes d'optimisation ? Comme on peut le lire dans certaines sources "... 90% des problèmes peuvent être résolus à l'aide d'un perceptron ordinaire".