Championnat d'optimisation des algorithmes. - page 3

 
Andrey Dik:

La bibliothèque *.ex doit être essentiellement un moyen unifié d'accéder à l'algorithme. L'algorithme peut être intégré dans cette bibliothèque standard, ou il peut appeler son algorithme à partir de cette bibliothèque avec ses propres fonctions.

Et quelle fonction donner au participant ? Le participant lui donnera ou lui passera quelque chose ? Jeu de mots, je ne suis pas sûr de ce que vous voulez dire.

Le participant doit être informé de la fonction (ff) qu'il étudie. Celui pour lequel il va chercher le maximum ou le minimum. Son algorithme de recherche sera, bien sûr, dans sa bibliothèque.

Je veux dire qu'il ne faut pas donner la fonction elle-même (envoyer le code), mais la transmettre d'une manière ou d'une autre au code du concurrent pendant le championnat.

 

et l'algorithme FF n'a pas besoin d'être donné.

Le script demande à la bibliothèque un tableau de paramètres optimisables via l'importation.

le script envoie ce tableau à la bibliothèque FF, qui renvoie le résultat.

le script envoie le résultat à la bibliothèque membre

le script appelle la fonction de service de la bibliothèque membre, si nécessaire, l'algorithme fera quelque chose, ou c'est juste une fonction vide à l'intérieur.

J'écris depuis mon portable, désolé

 
Andrey Dik:

et l'algorithme FF n'a pas besoin d'être donné.

Le script demande à la bibliothèque un tableau de paramètres optimisables via l'importation.

le script envoie ce tableau à la bibliothèque FF, qui renvoie le résultat.

le script envoie le résultat à la bibliothèque membre

le script appelle la fonction de service de la bibliothèque membre, si nécessaire, l'algorithme fera quelque chose, ou c'est juste une fonction vide à l'intérieur.

J'écris depuis mon portable, désolé

Pas clair. Nous attendrons un exemple dans le code.
 

Bien que cela soit partiellement clair, il est spécifiquement clair que c'est par le jo)).

Il s'avère que lorsqu'une fonction membre est appelée, cette fonction doit effectuer une étape de son travail. Il faut tout mettre à l'envers. Je n'ai pas envie d'y penser. La tâche est donc déjà compliquée, et nous devons y ajouter des complications encore plus artificielles.

Il y a deux façons possibles de procéder :

1. Une classe avec des ffs, comme je l'ai décrit plus haut.

2. Un participant importe une bibliothèque dans sa bibliothèque avec ff. Le vérificateur le remplacera par le sien.

Il n'y a pas d'autres options. A moins que l'on puisse passer un pointeur à la fonction, si c'est possible (mais jusqu'à présent personne n'a suggéré où regarder dans l'aide). Le participant doit avoir la pleine capacité d'appeler une fonction ff.

 

en général, comme ça, et bien sûr, il y aura un compteur de temps. schéma :

#import "oa.ex5" // алгоритм оптимизации участника
void   ServiceFunc1 (); 
int    GetReplaysCount (); // запрос количества запусков ФФ (у участника может быть свой размер колонии или нечто подобное если это не ГА 
void   GetOptParam (double &param []); 
void   ServiceFunc2 (); 
bool   StopAlgo ();        // этой функцией участник по желанию может остановить оптимизацию
int    GetEpochCount ();   // если участник желает использовать своё фиксированное значение "эпох"
void   SendFFvolue (double &volue); 
double GetMaxFF (); 
#import

#import "ff.ex5" // тестовая фитнес функция чемпионата, не известна участникам 
double GetFFvolue (double &param []); // передаём в ФФ оптимизируемые параметры, получаем результат ФФ 
#import

void OnStart () 
{ 
  bool   stopAlgo = false; 
  int    epoch = GetEpochCount (); 
  int    maxEpochPossible = 1000; 
  double param []; 
  double volue; 
  int    epochCNT = 0; 
  int    ffCNT = 0; 
  
  double FFvolue = -DBL_MAX; 
  
  ServiceFunc1 (); 
  while(!stopAlgo) 
  {
    for(int i = 0; i < GetReplaysCount (); i++) 
    {
      GetOptParam (param); 
      volue = GetFFvolue (param); 
      ffCNT++; 
      SendFFvolue (volue);
    }
    ServiceFunc2 (); 
    
    epochCNT++; 
    
    if(epochCNT >= epoch) 
      stopAlgo = true; 
    
    if(epochCNT >= maxEpochPossible) 
      stopAlgo = true;
  }
  
  Print ("Epoch: " + (string)epochCNT + " ; FF starts: " + (string)ffCNT + " ; MaxFF: " + (string)GetMaxFF ());
} 
 
Dmitry Fedoseev:

Un participant doit avoir la pleine capacité d'appeler une fonction ff.

Non, ça ne devrait pas. Et il ne devrait pas, parce que si ce n'est pas le cas, vous pouvez utiliser l'optimisation interne de l'EA dans le testeur intégré, et si c'est le cas, alors il y aura très peu d'utilisation pratique pour les traders.

Mon article montre un exemple où le FF est appelé à partir de l'algorithme. Cela réduit le champ d'application. Si vous prenez l'algorithme de l'article (ce qui n'est pas interdit par le règlement), vous devrez faire preuve d'ingéniosité pour vous débarrasser d'un tel appel interne des FF.

 
Andrey Dik:

en général, comme ça, et bien sûr, il y aura un compteur de temps. schéma :

Non, pas bon)) une telle approche. Un participant doit pouvoir effectuer un cycle, c'est-à-dire que son action unique implique plusieurs appels aux ffs.
 
Andrey Dik:
Non, ça ne devrait pas. Et il ne devrait pas, car si ce n'est pas le cas, vous pouvez utiliser l'optimisation interne de l'EA dans le testeur intégré, et si c'est le cas, alors il y aura très peu d'utilisation pratique pour les traders.
Regardez la méthode universelle exposée ci-dessus. Et si un appel unique par un intermédiaire, cela nécessitera une adaptation très sérieuse de la fonction de recherche, c'est exactement ce que personne ne fera, parce qu'il faudra sortir le cerveau et le mettre en place par l'intermédiaire de l'EA.
 
Dmitry Fedoseev:
Non, ça ne marche pas)) une telle approche. Un participant doit être capable de faire tourner des cycles, c'est-à-dire que sa seule action implique plusieurs appels à ffs.
Désolé, les cycles seront contrôlés en externe. Tout est juste. :)
 
Andrey Dik:
Désolé, les cycles seront contrôlés en externe. C'est juste et équitable. :)
Non. La fonction ff doit compter les appels.