Championnat d'optimisation des algorithmes. - page 50

 
Andrey Dik:

Il semble que j'aie le temps de montrer des exemples aujourd'hui.

Nous posons tous des questions stupides (chacun en son temps) du point de vue de ceux qui en savent plus sur le sujet. Aucun problème).

Exemples de tests, pardonnez la tautologie).

 

Un exemple d'un FF très simple, 2 paramètres.

Vous pouvez déjà tester vos algorithmes sur cette simple fonction.

#property library
#property strict

int  countRuns    = 0;

//+------------------------------------------------------------------+
int GetParamCountFF () export
{ 
  return (2);
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
double FF (double &array []) export
{ 
  countRuns++;

  int sizeArray = ArraySize (array); 
  if(sizeArray != 2) 
    return (-DBL_MAX); 
  return (-(pow (2.4 + array [0], 2.0) + pow (array [1] - 2.3, 2.0))+3.1415926);
}
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
int GetCountRunsFF () export
{ 
  return (countRuns);
}
//+------------------------------------------------------------------+

Valeur maximale que vous pouvez obtenir :3.1415926

Orientez-vous vers 1000 courses, pas plus.

Le championnat sera un FF avec 500 paramètres, pas plus de 1000 courses, le FF acceptera des paramètres dans la gamme de -10.0 à 10.0 avec des incréments de 0.1, au-dessus de la gamme les paramètres seront coupés à ces limites (dans l'exemple ci-dessus il n'y a pas de coupure). Chers participants, gardez ceci à l'esprit.

 

Script de test sur la première version de l'algorithme:

#property script_show_inputs
#property strict

//+------------------------------------------------------------------+
// алгоритм оптимизации участника
#import "\\Projects\\OAC\\lib\\ao_v1.ex5"
// инициализация АО
void   InitAO (int paramCount, int maxFFruns); 
// функции алгоритма перед началом оптимизации
void   ServiceFunc1 (); 
// функции алгоритма на каждой "эпохе" (итерации) вначале
void   ServiceFunc2 (); 
// функции алгоритма на каждой "эпохе" (итерации) вконце
void   ServiceFunc3 (); 
// запрос количества пакетной обрабобки (аналог колонии ГА)
int    GetReplaysCount (); 
// получение параметров  
void   GetOptParam (double &param []); 
// отправить в алгоритм значение ФФ соответствующее параметрам 
void   SendFFvolue (double volue); 
// этой функцией алгоритм по может остановить оптимизацию
bool   StopAlgo (); 
// получить максимальное значение ФФ       
double GetMaxFF (); 
#import
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
// тестовая фитнес функция чемпионата, не известна участникам
#import "\\Projects\\OAC\\lib\\ff.ex5"
// запросить количество параметров ФФ 
int    GetParamCountFF (); 
// запуск ФФ, получеие значения соответствующее параметроам ФФ
double FF (double &array []); 
// произведённое количество запусков ФФ
int    GetCountRunsFF (); 
#import
//+------------------------------------------------------------------+

//--- input parameters
input int MaxFFruns_P = 1000; 


//+------------------------------------------------------------------+
void OnStart () 
{ 
  // узнаем, сколько параметров нужно оптимизировать
  int paramCount = GetParamCountFF (); 
  
  bool   stopAlgo = false; 
  int    ffRuns = 0; 
  double param []; 
  ArrayResize (param, paramCount); 
  
  ulong  startTime = GetMicrosecondCount (); 
  
  //------------------------------------------------------------------
  InitAO (paramCount, MaxFFruns_P);
  ServiceFunc1 (); 
  while(!stopAlgo) 
  {
    if(StopAlgo ()) 
      break; 
    
    ServiceFunc2 (); 
    
    for(int i = 0; i < GetReplaysCount (); i++) 
    {
      GetOptParam (param); 
      SendFFvolue (FF (param)); 
      ffRuns++; 
      if(ffRuns == MaxFFruns_P) 
      {
        stopAlgo = true; 
        break;
      }
    }
    
    ServiceFunc3 (); 
    
    if(StopAlgo () || stopAlgo) 
      break;
  }
  //-------------------------------------------------------------------
  
  startTime = GetMicrosecondCount () - startTime; 
  
  Print ("Макс: " + DoubleToString (GetMaxFF (), 8)); 
  Print ("Запусков ФФ: " + (string)GetCountRunsFF ()); 
  Print ("Время: " + (string)startTime + " мкс; " + DoubleToString ((double)startTime/1000000.0, 8) + " c"); 
  Print ("---------------------------------");
}
//+------------------------------------------------------------------+
 

Le script de test me donne ces chiffres en ce moment :

2016.06.21 22:36:15.214 OAC variant 1 (GBPUSD,H1) ---------------------------------

2016.06.21 22:36:15.214 OAC variant 1 (GBPUSD,H1) Temps : 1119 µs ; 0.00111900 c

2016.06.21 22:36:15.214 OAC variant 1 (GBPUSD,H1) FF Runs : 1000

2016.06.21 22:36:15.213 OAC variant 1 (GBPUSD,H1) Max : 3.14159260

Je conclus : rien à redire jusqu'à présent, tout fonctionne correctement.

 

Il faut partir du principe que l'optimisation est un outil permettant d'étudier un filtre particulier (l'idée qu'il met en œuvre), et non la recherche d'un extremum global. Sinon, vous vous battez sur le terrain, où vous êtes médiocre par rapport au doctorat et aux ressources d'une société d'investissement ordinaire. Bien que personne n'ait annulé la masturbation des logiciels))

 

ОПТИМИЗАЦИЯ(optimization) Выбор из всех возможных вариантов использования ресурсов тех

quidonnentles meilleursrésultats.Elle estsouventdécriteentermes demaximisation de lafonctioncible.

 
Avals:

Il faut partir du principe que l'optimisation est un outil permettant d'étudier un filtre particulier (l'idée qu'il met en œuvre), et non la recherche d'un extremum global. Sinon, vous vous battez sur le terrain, où vous êtes médiocre par rapport au doctorat et aux ressources d'une société d'investissement ordinaire. Bien que personne n'ait annulé la masturbation du logiciel))

Exactement - un outil. Plus tôt dans le fil de discussion, il a été démontré sur l'exemple de la recherche des racines de l'équation comment vous pouvez utiliser l'algorithme d'optimisation. Vous pouvez l'utiliser pour des filtres, des indicateurs, des réseaux neuronaux ou tout autre élément.

Certaines personnes se masturbent, d'autres travaillent, et d'autres encore se masturbent en travaillant. Chacun son truc. Nous avons un pays libre.)))

 

Script de testpour la deuxième version de l'algorithme:

#property script_show_inputs
#property strict

//+------------------------------------------------------------------+
// алгоритм оптимизации участника
#import "\\Projects\\OAC\\lib\\ao_v2.ex5"
// инициализация АО
void   InitAO (int paramCount, int maxFFruns); 
void   StartAlgo (); 
// получить максимальное значение ФФ       
double GetMaxFF (); 
#import
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
// тестовая фитнес функция чемпионата, не известна участникам
#import "\\Projects\\OAC\\lib\\ff.ex5"
// запросить количество параметров ФФ 
int    GetParamCountFF (); 
// запуск ФФ, получеие значения соответствующее параметроам ФФ
double FF (double &array []); 
// произведённое количество запусков ФФ
int    GetCountRunsFF (); 
#import
//+------------------------------------------------------------------+

//--- input parameters
input int MaxFFruns_P = 1000; 


//+------------------------------------------------------------------+
void OnStart () 
{ 
  // узнаем, сколько параметров нужно оптимизировать
  int    paramCount = GetParamCountFF (); 

  ulong  startTime = GetMicrosecondCount (); 
  
  //------------------------------------------------------------------
  InitAO (paramCount, MaxFFruns_P);
  StartAlgo ();
  //------------------------------------------------------------------
  
  startTime = GetMicrosecondCount () - startTime; 
  
  Print ("Макс: " + DoubleToString (GetMaxFF (), 8)); 
  Print ("Запусков ФФ: " + (string)GetCountRunsFF ()); 
  Print ("Время: " + (string)startTime + " мкс; " + DoubleToString ((double)startTime / 1000000.0, 8) + " c"); 
  Print ("---------------------------------");
}
//+------------------------------------------------------------------+
 

J'ai également vérifié mon algorithme pour la deuxième façon de commencer - les résultats sont similaires à ceux de la première. C'est-à-dire que, personnellement, je ne me soucie pas de la manière d'appeler le FF, depuis l'intérieur ou l'extérieur de l'algorithme - il fonctionne de la même manière.

Veuillez noter que ces deux scripts de test seront utilisés dans le championnat pour les participants, comme ils le sont actuellement. Seule la fonction de sauvegarde des paramètres optimisés dans un fichier sera ajoutée, pour le contrôle, peut-être y aura-t-il quelques changements mineurs, qui seront reflétés avant le championnat, c'est certain.

 
Je vais maintenant ajouter des exemples des algorithmes eux-mêmes pour les deux types d'appels FF, sur le très, natif et bien-aimé HFC. S'il vous plaît, aimez-les et adorez-les, surtout pour les débutants. Ils sont faciles à comprendre, un exemple de la façon dont vous pouvez construire un algorithme d'optimisation élémentaire simple et en même temps fonctionnel.