Campionato di ottimizzazione degli algoritmi. - pagina 132

 

E, in realtà, un esempio di biblioteca membro. Algoritmo di ottimizzazione funzionante, basato su RNG. È abbastanza buono (per RNG) per la ricerca massima di funzioni con parametri di 1...5 (forse più, nessuna restrizione nel codice, ma i risultati saranno deludenti). Non è buono per il campionato, ma lo farà per esempio:

#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)));
}
//+------------------------------------------------------------------+
 

Il risultato medio dell'HSS per il FF dell'esempio precedente è -3,9699791274683918.

Ho fatto 5 esecuzioni dello script con il parametro 1000 chiamate FF.

Compilare gli esempi e controllare. Al posto del testao.ex5 sul campione ci sarà la vostra libreria.

Promemoria:

Al campionato lo script rimarrà lo stesso senza alcuna modifica, il contenuto dei FF in ff.ex5 sarà diverso, e la libreria concorrente dovrebbe essere ao.ex5, lo si può vedere dalle funzioni dichiarate importate.

Se diventa necessario aggiungere funzioni esportate alla libreria dei partecipanti, ci sarà un preavviso di questo. Al momento tutti i codici di script e le interfacce richieste sono mostrati (ancora una volta), preparatevi.

 
Andrey Dik:

Il risultato medio dell'HSS per il FF dell'esempio precedente è -3,9699791274683918.

Ho fatto 5 esecuzioni dello script con il parametro 1000 chiamate FF.

Compilare gli esempi e controllare. Al posto del testao.ex5 sul campione ci sarà la vostra libreria.

Promemoria:

Al campionato lo script rimarrà lo stesso senza alcuna modifica, il contenuto di FF in ff.ex5 sarà diverso, e la libreria concorrente dovrebbe essere ao.ex5, questo può essere visto dalle funzioni dichiarate importate.

Se diventa necessario aggiungere funzioni esportate alla libreria dei partecipanti, ci sarà un preavviso di questo. A questo punto vengono mostrati (ancora una volta) tutti i codici di script e le interfacce richieste, preparatevi.

H L'interfaccia funziona. Trasferito i tre codici di cui sopra a cinque.

1. chiamato lo script eseguibile come Ch Script.

2. la libreria della funzione di fitness si chiama ff. È così che dovrebbe essere chiamato. Lo script non lo vedrà altrimenti.

3. La libreria dell'algoritmo di esempio si chiama ao. La biblioteca dovrebbe avere questo nome. Altrimenti lo script non lo vedrà.

Ho eseguito lo script sul grafico. Prima di questo, ho cambiato la funzione di fitness nella libreria in doppio ffVolue = 2+exp(-MathAbs(x1+x2+x3)); il massimo reale è tre. Capito.


Da quanto ho capito, devo riscrivere il mio algoritmo nel formato dell'algoritmo dell'esempio, rinominare le mie funzioni nel codice con i nomi che sono nell'esempio e controllare che funzionino.

Non c'è bisogno di studiare l'interfaccia di connessione e l'esempio FF dato.

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

H L'interfaccia funziona. Trasferito questi tre codici al 5.

1. nominare lo script eseguibile come Ch Script.

2. la libreria della funzione di fitness si chiama ff. È così che dovrebbe essere chiamato. Lo script non lo vedrà altrimenti.

3. La libreria dell'algoritmo di esempio si chiama ao. La biblioteca dovrebbe avere questo nome. Altrimenti lo script non lo vedrà.

Ho eseguito lo script sul grafico. Prima di questo, ho cambiato la funzione di fitness nella libreria in doppio ffVolue = 2+exp(-MathAbs(x1+x2+x3)); il massimo reale è tre. Capito.


Da quanto ho capito, devo riscrivere il mio algoritmo nel formato dell'algoritmo dell'esempio, rinominare le mie funzioni nel codice con i nomi dell'esempio e controllare che funzionino.

Non c'è bisogno di studiare l'interfaccia di connessione e l'esempio FF dato.

Grande! Avete fatto tutto correttamente.

Solo una piccola correzione nell'evidenziato: nell'algoritmo del partecipante,bisogna assicurarsi di dichiarare (esattamente come nell'esempio) le funzioni esportabili obbligatorie, il contenuto di queste funzioni esportabili e la presenza di altre personalizzate sono a discrezione del partecipante .Questo è quello che c'è scritto nei commenti.

È semplice, vero? ))

 
Oh, e sì... Gli esempi funzionano anche in MT4. Non ho controllato, ma non c'è niente lì dentro che non funzionerebbe in MT4. Questo è quello che ho detto per coloro che sono allergici (o emtapatici) a MT5, il campionato è aperto anche a loro.
 
Andrey Dik:
Oh, e sì... Gli esempi funzionano anche in MT4. Non ho controllato, ma non c'è niente che non possa funzionare in MT4. Questo è quello che ho detto per coloro che sono allergici (o emtapy paura) a MT5, il campionato è aperto anche per loro.

Per farlo funzionare in foursquare, sostituite #import "ff.ex5" e #import "ao.ex5" con #import "ff.ex4" e #import "ao.ex4" nello script eseguibile e nell'algoritmo membro di esempio.

Si può anche scrivere in 4 . Per esempio, quando ho compilato il codice MQL4 in MQL5, c'era solo un errore. Ho cambiato TRUE con true o one e ha funzionato. Dovrei scriverlo come mostrato nell'esempio, non ho ancora sistemato il mio codice. Farò un tentativo.


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

Buon pomeriggio!

Sto preparando una piattaforma (sito web) dedicata agli algoritmi di ottimizzazione, dove ci saranno concorsi, informazioni utili e molte altre cose interessanti e utili.

Ognuno potrà mettere alla prova la propria forza nello scrivere algoritmi e testarli contro gli altri partecipanti. Il partecipante non avrà bisogno di inviare l'algoritmo al server, tutta l'interazione con il FF, situato sul server, avviene tramite REST, il partecipante invia un insieme di argomenti al server, e ottiene il risultato indietro FF, nessun arbitro è richiesto come tutto è estremamente trasparente, pur rimanendo segreto per i partecipanti algoritmi.

Restate sintonizzati!

 
Andrey Dik:

...

Aspettate le notizie!

In attesa


 
Andrey Dik:

Buon pomeriggio!

Sto preparando una piattaforma (sito web) dedicata agli algoritmi di ottimizzazione, dove ci saranno concorsi, informazioni utili e molte altre cose interessanti e utili.

Ognuno potrà mettere alla prova la propria forza nello scrivere algoritmi e testarli contro gli altri partecipanti. Il partecipante non avrà bisogno di inviare l'algoritmo al server, tutta l'interazione con il FF, situato sul server, avviene tramite REST, il partecipante invia un insieme di argomenti al server, e ottiene il risultato indietro FF, nessun arbitro è richiesto come tutto è estremamente trasparente, pur rimanendo segreto per i partecipanti algoritmi.

Aspettate le notizie!

Interessante!

Non ascoltate i consiglieri e i critici del forum, fate quello che vi viene in mente, altrimenti non funzionerà nulla ))

 
Andrey F. Zelinsky:

In attesa

Sergey Chalyshev:

Interessante!

Basta non ascoltare i consiglieri e i critici del forum, fai quello che vuoi o non funzionerà più ))

Grazie!)