최적화 알고리즘 챔피언십. - 페이지 50

 
Andrey Dik :

오늘은 사례를 보여드릴 시간이 있는 것 같습니다.

우리 모두는 질문에 대해 더 많이 알고 있는 사람들의 관점에서 어리석은 질문을 합니다. 괜찮아요.)

테스트 케이스를 테스트하고 동어반복을 용서하십시오.)

 

매우 간단한 FF, 2개의 매개변수의 예.

이 간단한 기능에서 이미 알고리즘을 테스트할 수 있습니다.

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

얻을 수 있는 최대값: 3.1415926

더 이상 1000개 출시에 집중하세요.

챔피언십에는 500개의 매개변수가 있는 FF가 있으며 1000개 이하의 시작이 가능합니다. FF는 0.1 단계로 -10.0에서 10.0 범위의 매개변수를 허용합니다. 이 범위를 초과하면 매개변수가 이러한 제한으로 잘립니다. 위의 예에서 잘라냄). 남. 회원님들께서는 이 점 유의하시기 바랍니다.

 

알고리즘의 첫 번째 버전에 대한 테스트 스크립트:

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

테스트 스크립트는 이제 다음 숫자를 제공합니다.

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

2016.06.21 22:36:15.214 OAC 변형 1(GBPUSD,H1) 시간: 1119 µs; 0.00111900초

2016.06.21 22:36:15.214 OAC 변형 1(GBPUSD,H1) FF 시작: 1000

2016.06.21 22:36:15.213 OAC 변형 1(GBPUSD,H1) 최대: 3.14159260

나는 결론을 내립니다. 불평할 것은 없지만 모든 것이 올바르게 작동합니다.

 

최적화는 특정 필터(구현하는 아이디어)를 연구하기 위한 도구이지 전역 극한값을 찾는 것이 아니라는 사실에서 출발해야 합니다. 그렇지 않으면 일반 투자회사의 박사와 자원에 비하면 후배에 불과한 분야에서 싸우고 있는 것입니다. 아무도 소프트웨어 자위를 취소하지 않았지만))

 

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

최고의 결과 제공 합니다. 종종 목적 함수 최대화관점 에서 설명 됩니다 .

 
Avals :

최적화는 특정 필터(구현하는 아이디어)를 연구하기 위한 도구이지 전역 극한값을 찾는 것이 아니라는 사실에서 출발해야 합니다. 그렇지 않으면 일반 투자회사의 박사와 자원에 비하면 후배에 불과한 분야에서 싸우고 있는 것입니다. 아무도 소프트웨어 자위를 취소하지 않았지만))

그것이 바로 악기입니다. 스레드 앞부분에서 최적화 알고리즘이 어떻게 사용될 수 있는지 방정식의 근을 찾는 예제로 설명했습니다. 필터, 지표, 신경망 및 일반적인 모든 것에 사용할 수도 있습니다.

누군가는 자위하고 누군가는 일하고 누군가는 일하면서 자위합니다. 각자에게. 우리는 자유로운 나라입니다.

 

알고리즘의 두 번째 버전에 대한 테스트 스크립트 :

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

내 알고리즘을 확인하고 두 번째 실행 옵션에 대해 - 결과는 첫 번째와 유사합니다. 즉, 나는 개인적으로 알고리즘 내부 또는 외부에서 FF를 호출하는 방법에 신경 쓰지 않습니다. 동일한 방식으로 작동합니다.

참고: 지금과 같은 상태의 참가자를 위해 챔피언십에서 사용되는 것은 이 두 가지 테스트 스크립트입니다. 최적화된 파라미터를 파일로 저장하는 기능만 추가될 예정이며, 컨트롤을 위해 챔피언십 전에 반영될 사소한 변경 사항이 있을 수 있습니다.

 
이제 동일한 기본 및 사랑받는 RNG에서 두 가지 유형의 FF 호출에 대한 실제 알고리즘의 예를 추가하겠습니다. 특히 초보자 분들에게 많은 사랑 부탁드립니다. 그것들은 이해하기 쉽고, 기본적으로 간단하고 동시에 작동하는 최적화 알고리즘을 구축하는 방법의 예입니다.