Championnat d'optimisation des algorithmes. - page 132

 

Et, en fait, un exemple de bibliothèque membre. Algorithme d'optimisation fonctionnel, basé sur le RNG. Il est assez bon (pour le RNG) pour la recherche maximale de fonctions avec des paramètres de 1...5 (peut-être plus, aucune restriction dans le code, mais les résultats seront décevants). Ce n'est pas bon pour le championnat, mais ça fera l'affaire pour l'exemple :

#property library
#property strict

//+------------------------------------------------------------------+
// тестовая фитнес функция чемпионата, не известна участникам
#import "ff.ex5"
int    GetParamCount (); 
void   GetParamProperties (double &min, double &max, double &step); 
int    GetCountRunsFF (); 
double FF (double &array []); 
#import
//+------------------------------------------------------------------+


///////////////////////////////////////////////////////////////////////////////| 
//  Здесь список экспортируемых функций библиотеки оптимизации, которые
//обязаны объявлены именно так как показано ниже, для того, что проверочный скрипт
//мог корректно обратится к библиотеке, содержимое этих функций на усмотрение
//участников 
/* 
//+------------------------------------------------------------------+
// алгоритм оптимизации участника
#import "ao.ex5"
// инициализация АО
void   InitAO (int paramCount, int maxFFruns);
// запуск АО 
void   StartAlgo (); 
// получить максимальное значение ФФ       
double GetMaxFF (); 
#import
//+------------------------------------------------------------------+
*/

//+------------------------------------------------------------------+
void InitAO (int paramCount, int maxFFruns) export
{ 
  G_MaxFFruns  = maxFFruns; 
  G_ParamCount = paramCount; // можно и так: G_ParamCount = GetParamCount ();
  GetParamProperties (G_MinParam, G_MaxParam, G_StepParam);
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
void StartAlgo () export
{ 
  bool   stopAlgo = false; 
  int    ffRuns   = 0; 
  double temp     = 0.0; 
  double param []; 
  ArrayResize (param, G_ParamCount); 
  
  //------------------------------------------------------------------
  while(!stopAlgo) 
  {
    GetOptParam (param); 
    temp = FF (param); 
    
    if(temp > G_BestResult) 
    {
      G_BestResult = temp; 
      Comment (G_BestResult);
    } 

    ffRuns++; 
    
    if(ffRuns == G_MaxFFruns) 
      stopAlgo = true; 
  }
  //-----------------------------------------------------------------
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
double GetMaxFF () export
{ 
  return (G_BestResult);
}
//+------------------------------------------------------------------+
///////////////////////////////////////////////////////////////////////////////| 


///////////////////////////////////////////////////////////////////////////////|
// Ниже - функции участников, объявление и содержимое на их усмотрение 

int    G_MaxFFruns  = 0; 
double G_BestResult = -DBL_MAX; 
int    G_ParamCount = 0; 
double G_MinParam   = -DBL_MAX; 
double G_MaxParam   = DBL_MAX; 
double G_StepParam  = 0.0; 

//+------------------------------------------------------------------+
void GetOptParam (double &param []) 
{ 
  int size = ArraySize (param); 
  for(int i = 0; i < size; i++) 
    param [i] = SeInDiSp (RNDfromCI (G_MinParam, G_MaxParam), 
                          G_MinParam, 
                          G_MaxParam, 
                          G_StepParam);
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
double SeInDiSp (double in, double inMin, double inMax, double step) 
{ 
  if(in <= inMin) 
    return (inMin); 
  if(in >= inMax) 
    return (inMax); 
  if(step == 0.0) 
    return (in); 
  else 
    return (inMin + step * (double)MathRound ((in - inMin) / step));
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
double RNDfromCI (double min, double max) 
{ 
  if(min == max) 
    return (min); 
  double Min, Max; 
  if(min > max) 
  {
    Min = max; 
    Max = min;
  }
  else 
  {
    Min = min; 
    Max = max;
  }
  return (double(Min + ((Max - Min) * (double)MathRand () / 32767.0)));
}
//+------------------------------------------------------------------+
 

Le résultat moyen du RSS pour le FF de l'exemple ci-dessus est de -3,9699791274683918.

J'ai fait 5 exécutions du script avec le paramètre 1000 appels FF.

Compiler les exemples et vérifier. A la place du testao.ex5 sur le champ sera votre bibliothèque.

Rappel :

Au championnat le script restera le même sans aucune modification, le contenu de FF dans ff.ex5 sera différent, et la bibliothèque concurrente devrait être ao.ex5, ceci peut être vu par les fonctions importées déclarées.

S'il s'avère nécessaire d'ajouter des fonctions exportées à la bibliothèque des participants, un préavis sera donné à ce sujet. En ce moment, tous les codes de script et les interfaces nécessaires sont affichés (une fois de plus), préparez-vous.

 
Andrey Dik:

Le résultat moyen du RSS pour le FF de l'exemple ci-dessus est de -3,9699791274683918.

J'ai fait 5 exécutions du script avec le paramètre 1000 appels FF.

Compiler les exemples et vérifier. A la place du testao.ex5 sur le champ sera votre bibliothèque.

Rappel :

Au championnat le script restera le même sans aucune modification, le contenu de FF dans ff.ex5 sera différent, et la bibliothèque concurrente devrait être ao.ex5, ceci peut être vu par les fonctions importées déclarées.

S'il s'avère nécessaire d'ajouter des fonctions exportées à la bibliothèque des participants, un préavis sera donné à ce sujet. À ce stade, tous les codes de script et les interfaces nécessaires sont affichés (une fois de plus), préparez-vous.

H L'interface fonctionne. Transféré les trois codes ci-dessus à cinq.

1. appelez le script exécutable comme Ch Script.

2. la bibliothèque de la fonction fitness est nommée ff. C'est ainsi qu'il faut l'appeler. Le script ne le verra pas autrement.

3) La bibliothèque de l'algorithme d'exemple est nommée ao. La bibliothèque doit être nommée ainsi. Sinon, le script ne le verra pas.

J'ai lancé le script sur le graphique. Avant cela, j'ai changé la fonction de fitness dans la bibliothèque en double ffVolue = 2+exp(-MathAbs(x1+x2+x3)) ; le vrai maximum est de trois. Je l'ai.


Si je comprends bien, je dois réécrire mon algorithme dans le format de l'algorithme de l'exemple, renommer mes fonctions dans le code aux noms qui sont dans l'exemple et vérifier qu'elles fonctionnent.

Il n'est pas nécessaire d'étudier l'interface de connexion et l'exemple FF donné.

Dossiers :
ff.mq5  2 kb
ao.mq5  5 kb
 
Yuri Evseenkov:

H L'interface fonctionne. J'ai transféré ces trois codes sur le 5.

1. Nommez le script exécutable comme Ch Script.

2. la bibliothèque de la fonction fitness est nommée ff. C'est ainsi qu'il faut l'appeler. Le script ne le verra pas autrement.

3) La bibliothèque de l'algorithme d'exemple est nommée ao. La bibliothèque doit être nommée ainsi. Sinon, le script ne le verra pas.

J'ai lancé le script sur le graphique. Avant cela, j'ai changé la fonction de fitness dans la bibliothèque en double ffVolue = 2+exp(-MathAbs(x1+x2+x3)) ; le vrai maximum est de trois. Je l'ai.


Si je comprends bien, je dois réécrire mon algorithme dans le format de l'algorithme de l'exemple, renommer mes fonctions dans le code aux noms de l'exemple, et vérifier qu'elles fonctionnent.

Il n'est pas nécessaire d'étudier l'interface de connexion et l'exemple FF donné.

Super ! Vous avez tout fait correctement.

Juste une petite correction dans la mise en évidence : dans l'algorithme du participant,vous devez vous assurer que vous déclarez (exactement comme dans l'exemple) les fonctions exportables obligatoires, le contenu de ces fonctions exportables et la présence d'autres fonctions personnalisées sont à la discrétion du participant .C'est ce qui est dit dans les commentaires.

C'est simple, n'est-ce pas ? ))

 
Oh, et oui... Les exemples fonctionneront également avec MT4. Je n'ai pas vérifié, mais il n'y a rien là-dedans qui ne fonctionnerait pas dans MT4. C'est ce que j'ai dit pour ceux qui sont allergiques (ou qui ont une peur bleue) à MT5, le championnat leur est ouvert aussi.
 
Andrey Dik:
Oh, et oui... Les exemples fonctionneront également dans MT4. Je ne l'ai pas vérifié, mais il n'y a rien qui puisse ne pas fonctionner dans MT4. C'est ce que j'ai dit pour ceux qui sont allergiques (ou qui ont une peur bleue) à MT5, le championnat est ouvert pour eux aussi.

Pour le faire fonctionner dans foursquare, remplacez #import "ff.ex5" et #import "ao.ex5" par #import "ff.ex4" et #import "ao.ex4" dans le script exécutable et dans l'exemple d'algorithme de membre.

Vous pouvez également écrire en 4 . Par exemple, lorsque j'ai compilé du code MQL4 dans MQL5, il n'y avait qu'une seule erreur. J'ai changé TRUE en true ou one et ça a marché. Je devrais juste l'écrire comme indiqué dans l'exemple. Je n'ai pas encore corrigé mon propre code. Je vais essayer.


Dossiers :
Ch_script.mq4  2 kb
ff.mq4  2 kb
ao.mq4  5 kb
 

Bonjour !

Je suis en train de préparer une plateforme (site web) dédiée aux algorithmes d'optimisation, où il y aura des concours, des informations utiles et bien d'autres choses intéressantes et utiles.

Chacun pourra tester sa force dans l'écriture d'algorithmes et les confronter aux autres participants. Le participant n'aura pas besoin d'envoyer l'algorithme au serveur, toute interaction avec le FF, situé sur le serveur, se fait via REST, le participant envoie un ensemble d'arguments au serveur, et reçoit le résultat en retour du FF, aucun arbitre n'est nécessaire car tout est extrêmement transparent, tout en restant secret pour les algorithmes des participants.

Restez à l'écoute !

 
Andrey Dik:

...

Attendez les nouvelles !

Attente


 
Andrey Dik:

Bonjour !

Je suis en train de préparer une plateforme (site web) dédiée aux algorithmes d'optimisation, où il y aura des concours, des informations utiles et bien d'autres choses intéressantes et utiles.

Chacun pourra tester sa force dans l'écriture d'algorithmes et les confronter aux autres participants. Le participant n'aura pas besoin d'envoyer l'algorithme au serveur, toute interaction avec le FF, situé sur le serveur, se fait via REST, le participant envoie un ensemble d'arguments au serveur, et reçoit le résultat en retour du FF, aucun arbitre n'est nécessaire car tout est extrêmement transparent, tout en restant secret pour les algorithmes des participants.

Attendez les nouvelles !

Intéressant !

N'écoutez pas les conseillers et les critiques du forum, faites ce que vous pensez, sinon rien ne fonctionnera ;))

 
Andrey F. Zelinsky:

Attente

Sergey Chalyshev:

Intéressant !

N'écoutez pas les conseillers et les critiques du forum, faites ce que vous voulez ou cela ne marchera plus ;))

Merci !)

Raison: