Algorithmus-Optimierung Meisterschaft. - Seite 132

 

Und ein Beispiel für eine Mitgliederbibliothek. Funktionierender Optimierungsalgorithmus, basierend auf RNG. Es ist ziemlich gut (für RNG) für die Suche maximal für Funktionen mit Parametern von 1...5 (vielleicht mehr, keine Einschränkungen in den Code, aber die Ergebnisse werden enttäuschend sein). Das ist nicht gut für die Meisterschaft, aber es reicht zum Beispiel:

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

Das durchschnittliche Ergebnis der HSS für die FF aus dem obigen Beispiel ist -3,9699791274683918.

Ich habe 5 Durchläufe des Skripts mit dem Parameter 1000 FF-Aufrufe durchgeführt.

Beispiele kompilieren und prüfen. Anstelle des Testsao.ex5 auf dem Champ wird Ihre Bibliothek stehen.

Zur Erinnerung:

Bei der Meisterschaft wird das Skript unverändert bleiben, der Inhalt von FF in ff.ex5 wird anders sein, und die konkurrierende Bibliothek sollte ao.ex5 sein, das kann man an den deklarierten importierten Funktionen sehen.

Sollte es notwendig sein, exportierte Funktionen in die Teilnehmerbibliothek aufzunehmen, wird dies im Voraus angekündigt. Im Moment werden (wieder einmal) alle Skriptcodes und erforderlichen Schnittstellen angezeigt, machen Sie sich bereit.

 
Andrey Dik:

Das durchschnittliche Ergebnis der HSS für die FF aus dem obigen Beispiel ist -3,9699791274683918.

Ich habe 5 Durchläufe des Skripts mit dem Parameter 1000 FF-Aufrufe durchgeführt.

Beispiele kompilieren und prüfen. Anstelle des Testsao.ex5 auf dem Champ wird Ihre Bibliothek stehen.

Zur Erinnerung:

Bei der Meisterschaft wird das Skript unverändert bleiben, der Inhalt von FF in ff.ex5 wird anders sein, und die konkurrierende Bibliothek sollte ao.ex5 sein, das kann man an den deklarierten importierten Funktionen sehen.

Sollte es notwendig sein, exportierte Funktionen in die Teilnehmerbibliothek aufzunehmen, wird dies im Voraus angekündigt. An dieser Stelle werden (noch einmal) alle Skriptcodes und erforderlichen Schnittstellen angezeigt, machen Sie sich bereit.

H Die Schnittstelle funktioniert. Übertragen der drei oben genannten Codes auf Fünfer.

1. Rufen Sie das ausführbare Skript als Ch Script auf.

2. Die Bibliothek der Fitnessfunktion heißt ff. So sollte es auch genannt werden. Das Skript wird es sonst nicht sehen.

3 Die Bibliothek des Beispielalgorithmus heißt ao. Die Bibliothek sollte so benannt werden. Andernfalls wird das Skript es nicht sehen.

Ich habe das Skript auf dem Diagramm ausgeführt. Davor habe ich die Fitnessfunktion in der Bibliothek auf double ffVolue = 2+exp(-MathAbs(x1+x2+x3)) geändert; das tatsächliche Maximum ist drei. Ich hab's.


So wie ich es verstehe, muss ich meinen Algorithmus im Format des Beispielalgorithmus umschreiben, meine Funktionen im Code in die Namen umbenennen, die im Beispiel stehen, und überprüfen, ob sie funktionieren.

Es ist nicht notwendig, die Verbindungsschnittstelle und das angegebene Beispiel FF zu studieren.

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

H Die Schnittstelle funktioniert. Die drei oben genannten Codes wurden auf Five übertragen.

1. Benennen Sie das ausführbare Skript als Ch Script.

2. Die Bibliothek der Fitnessfunktion heißt ff. So sollte es auch genannt werden. Das Skript wird es sonst nicht sehen.

3 Die Bibliothek des Beispielalgorithmus heißt ao. Die Bibliothek sollte so benannt werden. Andernfalls wird das Skript es nicht sehen.

Ich habe das Skript auf dem Diagramm ausgeführt. Davor habe ich die Fitnessfunktion in der Bibliothek in double ffVolue = 2+exp(-MathAbs(x1+x2+x3)) geändert; das tatsächliche Maximum ist drei. Ich hab's.


So wie ich es verstehe, muss ich meinen Algorithmus im Format des Beispielalgorithmus umschreiben, meine Funktionen im Code in die Namen umbenennen, die im Beispiel stehen, und überprüfen, ob sie funktionieren.

Es ist nicht notwendig, die Verbindungsschnittstelle und das angegebene Beispiel FF zu studieren.

Großartig! Sie haben alles richtig gemacht.

Nur eine kleine Korrektur in der hervorgehobenen: im Algorithmus des Teilnehmersmüssen Sie sicherstellen, dass Sie (genau wie im Beispiel) die obligatorischen exportierbaren Funktionen deklarieren, der Inhalt dieser exportierbaren Funktionen und das Vorhandensein anderer benutzerdefinierter Funktionen liegen im Ermessen des Teilnehmers .So steht es in den Kommentaren.

Es ist ganz einfach, nicht wahr? ))

 
Oh, und ja... Die Beispiele funktionieren auch in MT4. Ich habe es nicht überprüft, aber es gibt nichts, was in MT4 nicht funktionieren würde. Das ist, was ich sagte, für diejenigen, die allergisch (oder emtapathobic) zu MT5 sind, ist die Meisterschaft offen für sie zu.
 
Andrey Dik:
Oh, und ja... Die Beispiele funktionieren auch in MT4. Ich habe es nicht überprüft, aber es gibt nichts, was in MT4 nicht funktionieren könnte. Das ist, was ich sagte, für diejenigen, die allergisch sind (oder emtapy Angst) zu MT5, Meisterschaft ist offen für sie zu.

Damit es in foursquare funktioniert, ersetzen Sie #import "ff.ex5" und #import "ao.ex5" durch #import "ff.ex4" und #import "ao.ex4" im ausführbaren Skript und im Beispielmitglied-Algorithmus.

Sie können auch in 4 schreiben. Als ich zum Beispiel MQL4-Code in MQL5 kompilierte, gab es nur einen Fehler. Ich habe TRUE in true oder one geändert und es hat funktioniert. Ich sollte es einfach so schreiben, wie im Beispiel gezeigt. Ich habe meinen eigenen Code noch nicht korrigiert. Ich werde es ausprobieren.


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

Guten Tag!

Ich bereite eine Plattform (Website) vor, die den Optimierungsalgorithmen gewidmet ist und auf der es Wettbewerbe, nützliche Informationen und viele andere interessante und nützliche Dinge geben wird.

Jeder kann seine Stärken beim Schreiben von Algorithmen testen und sie mit anderen Teilnehmern vergleichen. Der Teilnehmer braucht den Algorithmus nicht an den Server zu senden, die gesamte Interaktion mit dem FF, der sich auf dem Server befindet, erfolgt über REST, der Teilnehmer sendet eine Reihe von Argumenten an den Server und erhält das Ergebnis zurück FF, kein Schiedsrichter ist erforderlich, da alles äußerst transparent ist, während die Algorithmen der Teilnehmer geheim bleiben.

Bleiben Sie dran!

 
Andrey Dik:

...

Warten Sie auf Neuigkeiten!

Warten


 
Andrey Dik:

Guten Tag!

Ich bereite eine Plattform (Website) vor, die den Optimierungsalgorithmen gewidmet ist und auf der es Wettbewerbe, nützliche Informationen und viele andere interessante und nützliche Dinge geben wird.

Jeder kann seine Stärken beim Schreiben von Algorithmen testen und sie mit anderen Teilnehmern vergleichen. Der Teilnehmer braucht den Algorithmus nicht an den Server zu senden, die gesamte Interaktion mit dem FF, der sich auf dem Server befindet, erfolgt über REST, der Teilnehmer sendet eine Reihe von Argumenten an den Server und erhält das Ergebnis zurück FF, kein Schiedsrichter ist erforderlich, da alles äußerst transparent ist, während die Algorithmen der Teilnehmer geheim bleiben.

Warten Sie auf Neuigkeiten!

Interessant!

Hören Sie nicht auf die Berater und Kritiker im Forum, machen Sie, was Ihnen einfällt, sonst wird nichts funktionieren ))

 
Andrey F. Zelinsky:

Warten

Sergey Chalyshev:

Interessant!

Hören Sie einfach nicht auf die Berater und Kritiker des Forums, machen Sie, was Sie wollen, sonst wird es nicht mehr funktionieren ))

Danke!)