Optimizasyon Algoritmaları Şampiyonası. - sayfa 50

 
Andrey Dik :

Bugün örnekler göstermek için zamanım var gibi görünüyor.

Hepimiz aptalca sorular soruyoruz (her biri kendi zamanında), soru hakkında daha çok şey bilenlerin bakış açısından. Sorun yok.)

Test senaryolarını test edin, totolojiyi bağışlayın.)

 

Çok basit bir FF örneği, 2 parametre.

Algoritmalarınızı bu basit fonksiyon üzerinde zaten test edebilirsiniz.

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

Alınabilecek maksimum değer: 3.1415926

Artık 1000 lansmana odaklanın.

Şampiyonanın 500 parametreli bir FF'si olacak, 1000'den fazla olmayacak, FF -10.0 ila 10.0 aralığındaki parametreleri 0.1'lik artışlarla kabul edecek, aralığın ötesinde parametreler bu limitlere kesilecek (kırpma yok yukarıdaki örnekte). SW. Üyeler, bunu aklınızda bulundurun.

 

Algoritmanın ilk sürümü için test komut dosyası:

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

Test komut dosyası şimdi bana şu numaraları veriyor:

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

2016.06.21 22:36:15.214 OAC varyantı 1 (GBPUSD,H1) Süre: 1119 µs; 0.00111900 sn

2016.06.21 22:36:15.214 OAC varyantı 1 (GBPUSD,H1) FF başlar: 1000

2016.06.21 22:36:15.213 OAC varyantı 1 (GBPUSD,H1) Maks: 3.14159260

Sonuç olarak: şikayet edecek bir şey yokken, her şey doğru çalışıyor.

 

Optimizasyonun, global bir ekstremum arayışı değil, belirli bir filtreyi (uyguladığı fikri) incelemek için bir araç olduğu gerçeğinden hareket etmeliyiz. Aksi takdirde, sıradan bir yatırım şirketinin bile doktora ve kaynaklarına kıyasla yavru olduğunuz bir sahada savaşıyorsunuz. Kimse yazılım mastürbasyonunu iptal etmese de))

 

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

hangisi en iyi sonuçları verir . Genellikle amaç fonksiyonu maksimizasyonu olarak tanımlanır .

 
Avals :

Optimizasyonun, global bir ekstremum arayışı değil, belirli bir filtreyi (uyguladığı fikri) incelemek için bir araç olduğu gerçeğinden hareket etmeliyiz. Aksi takdirde, sıradan bir yatırım şirketinin bile doktora ve kaynaklarına kıyasla yavru olduğunuz bir sahada savaşıyorsunuz. Kimse yazılım mastürbasyonunu iptal etmese de))

Enstrüman budur. Konunun önceki bölümlerinde, optimizasyon algoritmasının nasıl kullanılabileceği bir denklemin köklerini bulma örneğiyle gösterilmişti. Ayrıca filtreler, göstergeler, sinir ağları ve genel olarak her şey için kullanılabilir.

Biri mastürbasyon yapıyor, biri çalışıyor ve biri çalışırken mastürbasyon yapıyor. Herkesinki kendine. Biz özgür bir ülkeyiz.

 

Algoritmanın ikinci sürümü için test komut dosyası :

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

Algoritmamı ve ikinci başlatma seçeneği için kontrol ettim - sonuçlar birinciye benzer. Yani, algoritmanın içinden veya dışından FF'yi nasıl çağıracağımı şahsen umursamıyorum - aynı şekilde çalışıyor.

Lütfen dikkat: Şampiyonada katılımcılar için şu anda oldukları formda kullanılacak olan bu iki test senaryosu. Yalnızca optimize edilmiş parametreleri bir dosyaya kaydetme işlevleri eklenecektir, kontrol için, şampiyonadan önce yansıyacak küçük değişiklikler elbette olabilir.

 
Şimdi aynı, yerel ve sevilen RNG'de her iki tür FF çağrısının gerçek algoritmalarının örneklerini ekleyeceğim. Sizden özellikle yeni başlayanlar için sevgi ve iyilik rica ediyorum. Anlaşılması kolay, basit bir temel ve aynı zamanda çalışan bir optimizasyon algoritmasını nasıl oluşturabileceğinize dair bir örnek.