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

 

J'ai rencontré ce problème : selon la logique du programme, il est nécessaire d'éliminer les appels de fonction invalides. J'utilise INIT_PARAMETERS_INCORRECT pour cela. Mais l'optimisation génétique s'arrête pratiquement d'un coup. Les développeurs se fâchent avec les questions concernant cette situation. Ils conseillent d'étudier l'analyse génétique et ainsi de suite.

Mais pourquoi en ai-je besoin ? En tant qu'utilisateur, je veux obtenir des résultats et je ne me soucie pas de savoir comment cela fonctionne.

Voici donc un exemple sur trois fonctions 1, 2 et 3. 0 ne doit pas être utilisé.

Dans une chaîne, les fonctions ne doivent pas se répéter et il ne doit pas y avoir de 0 entre les fonctions (sinon il peut y avoir des répétitions).

Un exemple de chaînes autorisées :

  • 100
  • 120
  • 130
  • 123
  • 132
  • 2..
  • 3..

Exemple de chaînes inacceptables :

  • 010
  • 001
  • 110
  • 101
  • 111
  • 121
  • 122
  • 131
  • 133
  • 112
  • 113
  • 102
  • 103
  • 2..
  • 3..
Comme vous pouvez le constater, il y a un ordre de grandeur plus important de chaînes invalides que de chaînes valides. Comment effectuer un échantillonnage ? Comment remplacer INIT_PARAMETERS_INCORRECT ? Où dois-je creuser ?

 
Annuler les calculs dans les On-fonctions si les paramètres sont gauches. L'exécution sera plus lente queINIT_PARAMETERS_INCORRECT, mais pas de manière significative.
 
Comment ça ? Je peux vous donner un petit exemple ?
 

Pourriez-vous être plus explicite sur les ensembles possibles de paramètres d'entrée, les ensembles indésirables, et pourquoi il y a trop d'ensembles indésirables ?

Je suis tout à fait d'accord avec les développeurs pour dire qu'il ne devrait pas y avoir trop d'ensembles indésirables. L'optimum n'est pas supérieur à 10%.

 
Сергей Таболин:
Comment ça ? Je peux vous donner un petit exemple ?

fxsaber a raison.

Si le jeu de paramètres est incorrect, vous retournez toutes les fonctions OnTick() en même temps. Et onTester - vous renvoyez le résultat minimum.

 
Сергей Таболин:
Comment ça ? Je peux vous donner un petit exemple ?
input int i = 0; 

bool Incorrect;
 
int OnInit()
{
  Incorrect = !i; // нулевое значение считается некорректным (пример)
  
//  return(Incorrect ? INIT_PARAMETERS_INCORRECT : INIT_SUCCEEDED); // Было
  return(INIT_SUCCEEDED);
}

void OnTick()
{
  if (Incorrect)
    return;
    
  // ...
}
 
Il ne s'agit pas d'ensembles de paramètres d'entrée ! Ils constituent un ensemble de fonctions qui ne doivent pas être répétées ! Dans l'optimisation lente, INIT_PARAMETERS_INCORRECT aide vraiment à construire des chaînes valides pour appeler ces fonctions, mais j'en ai 6. J'ai 117649 variantes de chaînes. Mais ces chaînes sont inutiles sans certains paramètres d'entrée. Avec eux, nous avons déjà plus de 38.000.000 ! Il n'y a aucun moyen de contourner le problème avec la force brute lente.
 
Сергей Таболин:
Il ne s'agit pas d'ensembles de paramètres d'entrée ! C'est un ensemble de fonctions qui ne doivent pas être répétées ! Dans l'optimisation lente, INIT_PARAMETERS_INCORRECT aide vraiment à construire des chaînes valides pour appeler ces fonctions, mais j'en ai 6. J'ai 117649 variantes de chaînes. Mais ces chaînes sont inutiles sans certains paramètres d'entrée. Avec eux, nous avons déjà plus de 38.000.000 ! Il n'y a aucun moyen de contourner le problème avec la force brute lente.

La génétique va mourir car la surface d'optimisation du critère d'optimisation doit être plus ou moins continue (lisse). Dans votre cas, cependant, vous obtenez un grand nombre de pics (échecs).


Vous pouvez régler l'expérience suivante. Prenez le conseiller expert standard et ajoutez-y quelques paramètres supplémentaires pour l'optimisation - des faux. Ce qui fait que 90% de leurs sets sont INCORRECTS. GA va mourir. Bien qu'il se débrouille très bien sans faux paramètres.

 
fxsaber:

Je l'ai. Il s'agit simplement de sélectionner les bonnes fonctions et leur ordre dans l'optimiseur. Et écrire manuellement toutes les chaînes non pertinentes.... Et comment l'optimiseur les trouvera-t-il alors ?

 
fxsaber:

La génétique va mourir car la surface d'optimisation du critère d'optimisation doit être plus ou moins continue (lisse). Dans votre cas, cependant, vous obtenez un grand nombre de pics (creux).

Je comprends ça. Je ne comprends pas seulement comment le contourner ?

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

Je comprends cela. Ce que je ne comprends pas, c'est comment le contourner ?

Une recette consiste à ce que les développeurs traitent le résultat des passes INCORRECTES comme la passe CORRECTE la plus proche calculée précédemment. Cela permettra d'égaliser les trous dans la surface d'optimisation.

Raison: