Optimizasyon Algoritmaları Şampiyonası. - sayfa 132

 

Ve aslında katılımcının kütüphanesinden bir örnek. RNG'ye dayalı çalışma optimizasyon algoritması. 1 ... 5 adet (belki daha fazla, kodda herhangi bir kısıtlama yoktur, ancak sonuçlar iç karartıcı olacaktır) parametrelerle maksimum işlev aramak (RNG için) oldukça iyidir. Bir şampiyon için oldukça zayıf, ancak bir örnek verecek olursak:

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

Yukarıdaki örnekten FF için RNG algoritmasının ortalama sonucu -3.9699791274683918'dir.

1000 parametresi FF'yi çağıran bir komut dosyasının parçaları 5 başlattı.

Örnekleri derleyin ve test edin. Şampiyon üzerindeki test ao.ex5 yerine kitaplığınız olacak.

Hatırlatmama izin ver:

Şampiyonada, komut dosyası değişiklik olmadan aynı kalacak, ff.ex5'teki FF'nin içeriği farklı olacak ve katılımcının kitaplığı ao.ex5 olmalıdır, bu beyan edilen içe aktarılan işlevlerden görülebilir.

Katılımcıların kitaplığına dışa aktarılan işlevlerin eklenmesi gerekirse, bu önceden bildirilecektir. Şu anda scriptin tüm kodları ve gerekli arayüzler gösteriliyor (tekrar), hazır olun.

 
Andrey Dik :

Yukarıdaki örnekten FF için RNG algoritmasının ortalama sonucu -3.9699791274683918'dir.

1000 parametresi FF'yi çağıran bir komut dosyasının parçaları 5 başlattı.

Örnekleri derleyin ve test edin. Şampiyon üzerindeki test ao.ex5 yerine kitaplığınız olacak.

Hatırlatmama izin ver:

Şampiyonada, komut dosyası değişiklik olmadan aynı kalacak, ff.ex5'teki FF'nin içeriği farklı olacak ve katılımcının kitaplığı ao.ex5 olmalıdır, bu beyan edilen içe aktarılan işlevlerden görülebilir.

Katılımcıların kitaplığına dışa aktarılan işlevlerin eklenmesi gerekirse, bu önceden bildirilecektir. Şu anda scriptin tüm kodları ve gerekli arayüzler gösteriliyor (tekrar), hazır olun.

H Arayüz çalışıyor. Yukarıdaki üç kodu ilk beşe aktardı.

1. Yürütülebilir betiği Ch Script olarak adlandırdım.

2. Uygunluk işlevi kitaplığına ff adını verdi . Öyle denmeli. Aksi takdirde, komut dosyası görmez.

3. Katılımcının algoritma örnek kitaplığına ao adı verildi. Öyle denmeli. Aksi takdirde, komut dosyası görmez.

Komut dosyasını grafikte çalıştırın. Ondan önce, kütüphanedeki uygunluk fonksiyonunu double ffVolue = 2+exp(-MathAbs(x1+x2+x3)); olarak değiştirdim. Gerçek maksimum üçtür. Olmuş.


Anladığım kadarıyla algoritmanızı örnek bir algoritma formatında yeniden yazmanız, koddaki fonksiyonlarınızı örnekteki isimlerle yeniden adlandırmanız ve performansı kontrol etmeniz gerekiyor.

Bağlantı arayüzünü ve verilen FF örneğini incelemeye gerek yoktur.

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

H Arayüz çalışıyor. Yukarıdaki üç kodu ilk beşe aktardı.

1. Yürütülebilir betiği Ch Script olarak adlandırdım.

2. Uygunluk işlevi kitaplığına ff adını verdi . Öyle denmeli. Aksi takdirde, komut dosyası görmez.

3. Katılımcının algoritma örnek kitaplığına ao adı verildi. Öyle denmeli. Aksi takdirde, komut dosyası görmez.

Komut dosyasını grafikte çalıştırın. Ondan önce, kütüphanedeki uygunluk fonksiyonunu double ffVolue = 2+exp(-MathAbs(x1+x2+x3)); olarak değiştirdim. Gerçek maksimum üçtür. Olmuş.


Anladığım kadarıyla algoritmanızı örnek bir algoritma formatında yeniden yazmanız, koddaki fonksiyonlarınızı örnekteki isimlerle yeniden adlandırmanız ve performansı kontrol etmeniz gerekiyor .

Bağlantı arayüzünü ve verilen FF örneğini incelemeye gerek yoktur.

Harika! Her şeyi doğru yaptın.

Vurgulananı biraz düzelteceğim: katılımcının algoritmasında, zorunlu dışa aktarılan işlevlerin bir bildiriminin (tam örnekte olduğu gibi), dışa aktarılan bu işlevlerin içeriğinin ve diğer öğelerin varlığının sağlanması gerekir. özel olanlar - katılımcının takdirine bağlı olarak. Yorumlarda öyle yazıyor.

Çok basit, değil mi? ))

 
Oh, ve evet... Örnekler MT4'te de çalışacak. Kontrol etmedim, ancak orada MT4'te çalışamayacak hiçbir şey yok. Bunu MT5'e alerjisi (veya korkusu) olanlar için söyledim, şampiyona onlara da açık.
 
Andrey Dik :
Oh, ve evet... Örnekler MT4'te de çalışacak. Kontrol etmedim, ancak orada MT4'te çalışamayacak hiçbir şey yok. Bunu MT5'e alerjisi (veya korkusu) olanlar için söyledim, şampiyona onlara da açık.

Dörtlü olarak çalışmasını sağlamak için, yürütülebilir komut dosyasında #import "ff.ex5" ve #import "ао.ex5" öğelerini #import "ff.ex4" ve #import "ао.ex4" ile değiştirmeniz gerekir. katılımcının algoritma örneği.

Ayrıca dörtlü de yazabilirsiniz. Örneğin MQL4 kodunu MQL5'e derlediğimde sadece bir hata vardı. TRUE'yu true veya bir olarak değiştirdim ve her şey çalıştı. Sadece örnekte belirtildiği gibi yazmanız yeterlidir. Henüz kodumu değiştirmedim. Deneyeceğim.


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

Tünaydın!

Optimizasyon algoritmalarına adanmış, yarışmaların, faydalı bilgilerin ve çok daha ilginç ve faydalı olacağı bir platform (web sitesi) hazırlıyorum.

Herkes algoritma yazma becerilerini test edebilecek ve diğer katılımcılarla karşılaştırmalı olarak test edebilecek. Katılımcının algoritmayı sunucuya göndermesine gerek yoktur, sunucuda bulunan FF ile tüm etkileşim REST üzerinden gerçekleşir, katılımcı sunucuya bir dizi argüman gönderir ve FF sonucunu geri alır, bir hakem gerekli değildir çünkü katılımcıların algoritmaları gizli kalırken her şey son derece şeffaftır.

Haber bekleyin!

 
Andrey Dik :

...

Haber bekleyin!

Bekleriz


 
Andrey Dik :

Tünaydın!

Optimizasyon algoritmalarına adanmış, yarışmaların, faydalı bilgilerin ve çok daha ilginç ve faydalı olacağı bir platform (web sitesi) hazırlıyorum.

Herkes algoritma yazma becerilerini test edebilecek ve diğer katılımcılarla karşılaştırmalı olarak test edebilecek. Katılımcının algoritmayı sunucuya göndermesine gerek yoktur, sunucuda bulunan FF ile tüm etkileşim REST üzerinden gerçekleşir, katılımcı sunucuya bir dizi argüman gönderir ve FF sonucunu geri alır, bir hakem gerekli değildir çünkü katılımcıların algoritmaları gizli kalırken her şey son derece şeffaftır.

Haber bekleyin!

İlginç!

Sadece forum danışmanlarını ve eleştirmenlerini dinlemeyin, aklınızdan geçeni yapın, aksi takdirde hiçbir şey tekrar işe yaramaz))

 
Andrey F. Zelinsky :

Bekleriz

Sergey Chalyshev :

İlginç!

Sadece forum danışmanlarını ve eleştirmenlerini dinlemeyin, aklınızdan geçeni yapın, aksi takdirde hiçbir şey tekrar işe yaramaz))

Teşekkürler!)

Neden: