Algorithmus-Optimierung Meisterschaft. - Seite 50

 
Andrey Dik:

Ich scheine heute Zeit zu haben, um Beispiele zu zeigen.

Wir alle stellen dumme Fragen (jeder zu seiner Zeit) aus der Perspektive derjenigen, die mehr über das Thema wissen. Kein Problem).

Testbeispiele, entschuldigen Sie die Tautologie).

 

Ein Beispiel für eine sehr einfache FF, 2 Parameter.

Sie können Ihre Algorithmen bereits an dieser einfachen Funktion testen.

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

Maximal erreichbarer Wert:3,1415926

Orientieren Sie sich an 1000 Durchläufen, nicht mehr als das.

Die Meisterschaft wird eine FF mit 500 Parametern sein, nicht mehr als 1000 Durchläufe, die FF akzeptiert Parameter im Bereich von -10,0 bis 10,0 mit Inkrementen von 0,1, oberhalb des Bereichs werden die Parameter auf diese Grenzen abgeschnitten (im obigen Beispiel gibt es keine Abschneidung). Liebe Teilnehmerinnen und Teilnehmer, bedenken Sie dies.

 

Testskript für die erste Version des Algorithmus:

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

Das Testskript liefert mir im Moment diese Zahlen:

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

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

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

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

Mein Fazit: Bis jetzt gibt es nichts zu beanstanden, alles funktioniert einwandfrei.

 

Sie müssen davon ausgehen, dass die Optimierung ein Instrument zur Untersuchung eines bestimmten Filters (der Idee, die es umsetzt) ist und nicht die Suche nach einem globalen Extremwert. Andernfalls kämpft man auf dem Spielfeld, wo man selbst im Vergleich zu einer gewöhnlichen Investmentgesellschaft mit ihrem Doktortitel und ihren Ressourcen nur Mittelmaß ist. Obwohl niemand die Software-Masturbation abbestellt hat))

 

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

Sie wirdhäufig mit demBegriff derMaximierungderZielfunktionbeschrieben.

 
Avals:

Sie müssen davon ausgehen, dass die Optimierung ein Instrument zur Untersuchung eines bestimmten Filters (der Idee, die es umsetzt) ist und nicht die Suche nach einem globalen Extremwert. Andernfalls kämpft man auf dem Spielfeld, wo man selbst im Vergleich zu einer gewöhnlichen Investmentgesellschaft mit ihrem Doktortitel und ihren Ressourcen nur Mittelmaß ist. Obwohl niemand die Software-Selbstbefriedigung abbestellt hat))

Genau - ein Werkzeug. Weiter oben im Thread wurde am Beispiel der Suche nach den Wurzeln der Gleichung gezeigt, wie man den Optimierungsalgorithmus verwenden kann. Sie können es für Filter, Indikatoren, neuronale Netze und alles andere verwenden.

Manche Menschen masturbieren, manche arbeiten, und manche masturbieren während der Arbeit. Jedem das Seine. Wir haben ein freies Land.)))

 

Testskriptfür die zweite Version des Algorithmus:

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

Ich habe meinen Algorithmus auch für die zweite Art des Starts überprüft - die Ergebnisse sind ähnlich wie bei der ersten. Das heißt, mir persönlich ist es egal, wie ich den FF aufrufe, ob innerhalb oder außerhalb des Algorithmus - er funktioniert auf die gleiche Weise.

Bitte beachten Sie: Diese beiden Testskripte werden in der Meisterschaft für die Teilnehmer verwendet, so wie sie jetzt sind. Lediglich die Funktion, die optimierten Parameter in einer Datei zu speichern, wird zur Kontrolle hinzugefügt, vielleicht gibt es noch ein paar kleinere Änderungen, die aber sicher noch vor der Meisterschaft umgesetzt werden.

 
Jetzt füge ich Beispiele für die Algorithmen selbst für beide Arten von FF-Aufrufen hinzu, und zwar für die sehr, sehr ursprüngliche und sehr beliebte HFC. Bitte lieben und lieben Sie sie, besonders für Anfänger. Sie sind leicht zu verstehen, ein Beispiel dafür, wie man einen elementar einfachen und gleichzeitig funktionierenden Optimierungsalgorithmus aufbauen kann.
Grund der Beschwerde: