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

 
Urain:

....

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 performante par rapport à l'ensemble des solutions possibles.

Les fonctions de test sont "vaincues". Elles doivent être vaincues.

Ainsi, vous avez tout dit correctement.

 
joo:

Les fonctions de test sont "vaincues". Elles doivent être vaincues.

Mais vous dites tout ce qu'il faut.

Oui, oui, je n'ai pas élaboré, et c'est pourquoi il s'agit de fonctions de test, l'algorithme doit les prendre, sinon un tel algorithme ne peut pas être considéré comme réussi.

Il est difficile d'imaginer ce que l'algorithme trouvera dans le champ inconnu s'il ne passe même pas le test.

 

Merci à tous, ça marche.

Il a fallu que je sois si stupide pour confondre moins et multiplier.

 
ivandurak:

Merci à tous, cela fonctionne.

Vous parlez de votre algorithme ? Félicitations !
 

Je me demande comment visser correctement l'UGA, si nous devons optimiser différentes variables avec la même valeur de la fonction d'aptitude pour minimiser l'erreur d'approximation ? Problème classique. Un réseau neuronal à deux couches à cinq passages avec 4 neurones, par exemple, nécessite une recherche de 22 coefficients avec un biais dans la plage [-1...1] avec une précision de 0,0001 et, simultanément, dans la même fonction cible, la sélection des paramètres des indicateurs d'entrée 5 pièces*2paramètres= 10 variables dans la plage 5...50. Ou séparément, mais avec un pas de 0,01.

Bien sûr, vous pouvez coder les valeurs des indicateurs dans la plage de poids. Mais c'est un peu différent.

Et encore une question. Est-il possible de transmettre à l'UGA les conditions de saut de gènes ? C'est-à-dire, par exemple, que les gènes responsables de l'indicateur devraient correspondre à la condition G23< G24 G25<G26 et ainsi de suite.

 
miklelv:

Je me demande comment visser correctement l'UGA, si nous devons optimiser différentes variables avec la même valeur de la fonction d'aptitude pour minimiser l'erreur d'approximation ? Problème classique. Un réseau neuronal à deux couches à cinq passages avec 4 neurones, par exemple, nécessite une recherche de 22 coefficients avec un biais dans la plage [-1...1] avec une précision de 0,0001 et, simultanément, dans la même fonction cible, la sélection des paramètres des indicateurs d'entrée 5 pièces*2paramètres= 10 variables dans la plage 5...50. Ou séparément, mais avec un pas de 0,01.

Bien sûr, vous pouvez coder les valeurs des indicateurs dans l'intervalle des poids. Mais c'est un peu différent.

Et encore une question. Est-il possible de transmettre à l'UGA les conditions de saut de gènes ? C'est-à-dire, par exemple, que les gènes responsables de l'indicateur devraient correspondre à la condition G23< G24 G25<G26 et ainsi de suite.

C'est tout, c'est tout,

il y a une fourchette dans laquelle la plupart des paramètres fonctionnent, le reste est simplement ajusté par décalage et mise à l'échelle.

Vous comprenez que le code de l'article n'est pas un développement commercial peaufiné pour chaque éternuement du consommateur.

Il y a un désir de fixer des plages pour chaque paramètre, personne ne vous tient la main, mais n'oubliez pas qu'avec le nombre de paramètres qui se compte en milliers, fixer des plages à la main deviendra très problématique.


avoir une plage de gènes [-1;1] --> (int)NormaliseDouble( ((gene+1)/2)*45+5 ,0) --> [5;50]

Bien que je sois d'accord sur le fait qu'il y aura beaucoup de gènes différents donnant le même résultat, vous pouvez créer un paramètre de précision pour combiner les gènes, par exemple de 0 à 1000ème gène précision à 3 chiffres, de 1000 à 1010 précision à 0 chiffre.

 
miklelv:

Et une dernière question. Est-il possible de transmettre les conditions de saut de gène à l'UGA ? C'est-à-dire, par exemple, que les gènes responsables de l'indicateur doivent remplir la condition G23<G24 G25<G26 et ainsi de suite.

Nous pouvons le faire de cette façon : Paramètre1=G23 Paramètre2=G23+G24.
 
her.human:
Vous pouvez procéder comme suit : Paramètre1=G23 Paramètre2=G23+G24.

Lors de la conversion de la plage, il est préférable d'effectuer une conversion avec une vérification logique, qui inclura la rupture.

Sinon, il n'y aura pas de lien entre une partie de l'intervalle brisé et une autre. Il faut comprendre ici que les gènes sont empruntés à différents chromosomes uniquement en conséquence, le deuxième gène ne peut être emprunté que pour la production du deuxième gène du nouveau chromosome.

Si un paramètre est représenté par deux gènes, il n'y aura pas de lien entre eux.

 
Urain:

Il est préférable d'effectuer une transformation avec un contrôle logique, qui inclura la rupture.

Sinon, il n'y aura pas de lien entre une partie de l'intervalle brisé et une autre, il faut comprendre que les gènes sont empruntés à différents chromosomes uniquement en conséquence, le deuxième gène ne peut être emprunté que pour la production du deuxième gène du nouveau chromosome.

Si un paramètre est représenté par deux gènes, il n'y aura pas de lien entre eux.

C'est peut-être mieux.

J'ai proposé une variante simple. L'AG peut la traiter sans problème.

En général, les gènes ne sont pas toujours empruntés, de nouveaux gènes peuvent être générés.

 
Je vous remercie pour vos commentaires. Il est certainement plus facile à coder. J'essaie de reproduire Prediction Wizard de Neuroshell sur mql. Là, pendant 2-3 secondes sur un historique de 200-2000 barres dans un cycle de 20 indices avec 2-4 paramètres chacun dans la gamme de 5...50 est formé pendant 2-3 secondes sur un historique de 200-2000 barres à partir de la sélection de ces 20 meilleurs indicateurs (par exemple, 5 pcs). Et tout cela est écrit en VBbasic. Il doit s'agir d'un algorithme génial. UGA fera très bien l'affaire.