Pas pour les développeurs MT ! Par quoi remplacer INIT_PARAMETERS_INCORRECT ? - page 8

 
Aleksey Vyazmikin:

Vous avez 4 paramètres, vous devez donc organiser ces 4 paramètres pour ne travailler qu'avec les bonnes valeurs, alors la génétique peut être utile.

Comment cela ?

Si chaque paramètre peut prendre 3 valeurs correctes, alors siuse_parameter = true vous obtenez 81 passes, et si = false, alors 80 passes sont inutiles.

Alors, comment l'organiser "en quelque sorte" ?

 
Сергей Таболин:

Comment cela fonctionne-t-il ?

Si chaque param_ peut prendre 3 valeurs correctes, alors siuse_parameter = true vous obtenez 81 passes, et si = false, alors 80 passes sont inutiles.

Alors, comment arranger "d'une manière ou d'une autre" cela ?

Je ne peux pas donner de réponse à cette question car au minimum je ne comprends pas les conditions d'optimisation - soit vous énoncez mal, soit je suis bête.

Vous avez 4 paramètres interdépendants ou deux paires ?

Si vous avez 4 variantes mutuellement dépendantes et, comme vous l'avez écrit précédemment, toutes les variantes dans un fichier comme un seul paramètre, alors la génétique va remplir aléatoirement (et peut-être par une autre méthode - question pour MQ) le champ et optimiser la partie sélectionnée. Si vous avez d'autres paramètres à optimiser, en dehors de ces 4, alors le généticien sera capable de rechercher le réglage optimal par rapport aux paramètres sélectionnés et aux autres paramètres.

 
Сергей Таболин:

Dans votre cas, seules des chaînes valides peuvent être générées.

Vous avez 1953 combinaisons valides. Sortez le paramètre int de 0 à 1952 et générez la combinaison correcte par le numéro de séquence.

 
Alexey Navoykov:

C'est votre erreur. Il n'y a pas de passages "inutiles" en génétique. Il fait le tri tout seul, en éliminant les choses inutiles, ce qui permet d'économiser du temps et des ressources. Et vous ne faites qu'interférer avec lui.

En fait, vous vous contredisez. D'abord vous dites que vous voulez que tout fonctionne tout seul en appuyant sur un bouton magique, sans aucun effort supplémentaire de votre part. Mais en même temps vous créez des shamans dans le code, censés aider l'algorithme d'optimisation.

Bref, tout est clair maintenant :

Il n'est pas nécessaire d'éliminer quoi que ce soit par INIT_PARAMETERS_INCORRECT, il suffit de calculer 121 selon la logique de votre programme, et la génétique fera son travail et le résultat sera obtenu en moins de 1953 passages.

Si vous optimisez en utilisant la recherche complète lente, alors bien sûr les passes supplémentaires ne sont pas nécessaires. Vous pouvez introduire un paramètre supplémentaire dans votre EA définissant le type d'optimisation. Si c'est une recherche complète, les passes supplémentaires sont rejetées, alors que si c'est génétique, elles ne le sont pas. Il est dommage que MQL ne vous fournisse pas une telle option. Les développeurs devraient demander d'ajouter cette fonction.

Le fait est que, lorsque j'ai été confronté au problème des dizaines de résultats identiques dans les résultats d'optimisation, j'ai créé un sujet demandant comment s'en débarrasser. Malheureusement, après l'interdiction, tous mes sujets et tous mes commentaires ont disparu de mes publications, je ne peux donc pas vous donner le lien.

C'est là qu'on m'a dit d'utiliser INIT_PARAMETERS_INCORRECT.

Et oui, je ne comprends pas pourquoi vous avez besoin de vous engager dans des courses sciemment inutiles :

  • 100000
  • 010000
  • 001000
  • 000100
  • 000010
  • 000001
  • 110000
  • 011000
  • 001100
  • 000110
  • 000011
  • etc.

si c'est essentiellement la même chose ?

Et d'après ce que je sais de la génétique, il s'avère que ces chaînes répétitives vont tourner, et les meilleures peuvent ne pas être du tout en vue de cet algorithme .... N'est-ce pas ?

 
TheXpert:

Cela a été dit de nombreuses fois auparavant dans des mots différents. en transformant l'espace d'entrée. dans votre cas, vous ne pouvez générer que des chaînes valides.

vous avez 1953 combinaisons valides. enlevez le paramètre int de 0 à 1952 et générez la combinaison correcte par le numéro de séquence. ceci est une option.

C'est ce que j'ai fini par faire...

 
Сергей Таболин:

Et oui, je ne comprends pas pourquoi on s'engagerait dans une course sciemment inutile :

  • 100000
  • 010000
  • 001000
  • 000100
  • 000010
  • 000001
  • 110000
  • 011000
  • 001100
  • 000110
  • 000011
  • etc.

si c'est essentiellement la même chose ?

Et d'après ce que je sais de la génétique, il s'avère que ces chaînes répétitives vont tourner, et les meilleures peuvent ne pas être du tout en vue de cet algorithme... N'est-ce pas ?

Alors, quel est le meilleur brin ? C'est aussi un certain nombre de copies répétées. Et cette répétition augmente les chances que l'une de ces copies soit repérée par la recherche.

Par conséquent, les chances (probabilités) sont les mêmes avec ou sans répétitions, et le temps de recherche génétique sera le même dans les deux cas.

En général, je vous recommande quand même de comprendre le fonctionnement de l'algorithme génétique, sinon il est inutile de vous expliquer quoi que ce soit.

 
Alexey Navoykov:

Alors, quelles sont les meilleures chaînes ? ...

Si je le savais, je n'aurais pas besoin d'optimiser non plus.

Peut-être que la meilleure est 326000, 514300 ou 346215 ?

 
Сергей Таболин:

Si je le savais, il n'y aurait pas besoin d'optimiser non plus.

Peut-être que la meilleure est 326000, 514300 ou 346215 ?

C'était juste une question introductive à laquelle je donnais une explication.

Ce n'est donc pas "le meilleur" mais "le meilleur, étant donné toutes sortes de copies de cette chaîne.

Vous ne comprenez pas une chose simple, à savoir qu'en passant au crible la chaîne en fonction deINIT_PARAMETERS_INCORRECT, vous risquez de manquer une de ces chaînes réussies ou proche de celle-ci. La recherche ne se raccourcit donc pas.

 
Alexey Navoykov:

C'était juste une question introductive à laquelle je donnais une explication.

Ce n'est donc pas "le meilleur", mais "le meilleur, compte tenu de tous les exemplaires différents de cette chaîne".

Vous ne comprenez pas une chose simple, à savoir qu'en filtrant la chaîne selonINIT_PARAMETERS_INCORRECT, vous risquez de manquer exactement une de ces chaînes réussies, ou une chaîne proche de celle-ci. La recherche ne se raccourcit donc pas.

J'élimine EXCLUSIVEMENT les répétitions ! Dans l'exemple, ils sont marqués d'un fond rouge.

Comment une chaîne de 120000 peut-elle être meilleure qu'une chaîne de 010020 ? C'est la même chaîne ! Et 100002, et 000012 ! Alors pourquoi toutes ces répétitions de la même chose ?

 
Сергей Таболин:

J'élimine EXCLUSIVEMENT les répétitions ! Dans l'exemple, ils sont marqués d'un fond rouge.

Comment la chaîne 120000 peut-elle être meilleure que la chaîne 010020 ? C'est la même chaîne ! Et 100002, et 000012 ! Alors pourquoi toutes ces répétitions de la même chose ?

OK, vous ne comprenez pas, mais c'est normal. Pour les personnes entendantes, j'ai dit tout ce que j'avais à dire. Je ne vois pas l'intérêt de continuer...