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

 

그리고 실제로 참가자 라이브러리의 예입니다. RNG 기반 작업 최적화 알고리즘. 1 ... 5 개 양의 매개 변수가있는 최대 기능을 검색하는 것이 (RNG의 경우) 상당히 좋습니다 (코드에 제한이 없지만 결과는 우울할 것입니다). 챔피언에게는 다소 약하지만 예를 들면 다음과 같습니다.

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

위의 예에서 FF에 대한 RNG 알고리즘의 평균 결과는 -3.9699791274683918입니다.

매개변수 1000이 있는 스크립트의 조각 5 실행은 FF를 호출합니다.

예제를 컴파일하고 테스트합니다. 챔피언의 테스트 o.ex5 대신 라이브러리가 됩니다.

상기시켜 드리겠습니다:

챔피언십에서 스크립트는 변경 없이 그대로 유지되고 ff.ex5의 FF 내용은 달라지며 참가자의 라이브러리는 ao.ex5여야 합니다. 이는 선언 된 가져온 함수 에서 확인할 수 있습니다.

내보낸 기능을 참가자 라이브러리에 추가해야 하는 경우 사전에 알려드립니다. 현재 스크립트의 모든 코드와 필요한 인터페이스가 표시됩니다(다시 한 번). 준비하십시오.

 
Andrey Dik :

위의 예에서 FF에 대한 RNG 알고리즘의 평균 결과는 -3.9699791274683918입니다.

매개변수 1000이 있는 스크립트의 조각 5 실행은 FF를 호출합니다.

예제를 컴파일하고 테스트합니다. 챔피언의 테스트 o.ex5 대신 라이브러리가 됩니다.

상기시켜 드리겠습니다:

챔피언십에서 스크립트는 변경 없이 그대로 유지되고 ff.ex5의 FF 내용은 달라지며 참가자의 라이브러리는 ao.ex5여야 합니다. 이는 선언 된 가져온 함수 에서 확인할 수 있습니다.

내보낸 기능을 참가자 라이브러리에 추가해야 하는 경우 사전에 알려드립니다. 현재 스크립트의 모든 코드와 필요한 인터페이스가 표시됩니다(다시 한 번). 준비하십시오.

H 인터페이스가 작동 중입니다. 위의 3개 코드를 상위 5개로 옮겼습니다.

1. 실행 가능한 스크립트 를 Ch Script라고 불렀습니다.

2. 피트니스 함수 라이브러리의 이름을 ff로 지정했습니다. 그렇게 불러야 합니다. 그렇지 않으면 스크립트에서 볼 수 없습니다.

3. 참가자의 알고리즘 예제 라이브러리 이름은 ao입니다. 그렇게 불러야 합니다. 그렇지 않으면 스크립트에서 볼 수 없습니다.

차트에서 스크립트를 실행합니다. 그 전에 라이브러리의 피트니스 함수를 double ffVolue = 2+exp(-MathAbs(x1+x2+x3)); 실제 최대값은 3입니다. 일어난.


내가 이해한 대로 예제 알고리즘의 형식으로 알고리즘을 다시 작성하고 코드의 함수 이름을 예제에 있는 이름으로 바꾸고 성능을 확인해야 합니다.

연결 인터페이스와 주어진 FF의 예를 공부할 필요는 없습니다.

파일:
ff.mq5  2 kb
ao.mq5  5 kb
 
Yuri Evseenkov :

H 인터페이스가 작동 중입니다. 위의 3개 코드를 상위 5개로 옮겼습니다.

1. 실행 가능한 스크립트의 이름 을 Ch Script로 지정했습니다.

2. 피트니스 함수 라이브러리의 이름을 ff로 지정했습니다. 그렇게 불러야 합니다. 그렇지 않으면 스크립트에서 볼 수 없습니다.

3. 참가자의 알고리즘 예제 라이브러리 이름은 ao입니다. 그렇게 불러야 합니다. 그렇지 않으면 스크립트에서 볼 수 없습니다.

차트에서 스크립트를 실행합니다. 그 전에 라이브러리의 피트니스 함수를 double ffVolue = 2+exp(-MathAbs(x1+x2+x3)); 실제 최대값은 3입니다. 일어난.


내가 알기 로는 예제 알고리즘의 형식으로 알고리즘을 다시 작성하고 코드의 함수 이름을 예제에 있는 이름으로 바꾸고 성능을 확인해야 합니다 .

연결 인터페이스와 주어진 FF의 예를 공부할 필요는 없습니다.

놀라운! 당신은 모든 것을 올바르게했습니다.

강조 표시된 부분을 약간 수정하겠습니다. 참가자의 알고리즘 에서 필수 내보낸 함수의 선언(예제에서와 같이), 이러한 내보낸 함수의 내용 및 기타 사용자 정의 - 참가자의 재량에 따라. 댓글에 그렇게 나와있습니다.

간단하지 않나요? ))

 
아, 그리고 예... 예제는 MT4에서도 작동합니다. 확인하지 않았지만 MT4에서 작동하지 않는 것은 없습니다. MT5에 알러지(혹은 공포)가 있으신 분들을 위해 챔피언십도 열려있습니다.
 
Andrey Dik :
아, 그리고 예... 예제는 MT4에서도 작동합니다. 확인하지 않았지만 MT4에서 작동하지 않는 것은 없습니다. MT5에 알러지(혹은 공포)가 있으신 분들을 위해 챔피언십도 열려있습니다.

4중으로 작동하게 하려면 실행 가능한 스크립트와 참가자의 알고리즘 예.

4가지로 쓰셔도 됩니다. 예를 들어 MQL4 코드를 MQL5로 컴파일했을 때 오류가 하나만 있었습니다. TRUE를 true 또는 1로 변경하면 모든 것이 작동합니다. 예제에 표시된 대로만 작성하면 됩니다. 아직 코드를 변경하지 않았습니다. 노력하겠습니다.


파일:
Ch_script.mq4  2 kb
ff.mq4  2 kb
ao.mq4  5 kb
 

안녕하세요!

콘테스트, 유용한 정보 및 훨씬 더 흥미롭고 유용한 최적화 알고리즘 전용 플랫폼(웹사이트)을 준비 중입니다.

누구나 알고리즘 작성 능력을 테스트하고 다른 참가자와 비교하여 테스트할 수 있습니다. 참가자는 알고리즘을 서버에 보낼 필요가 없습니다. 서버에 있는 FF와의 모든 상호 작용은 REST를 통해 이루어지며 참가자는 일련의 인수를 서버에 보내고 FF 결과를 다시 받습니다. 중재자는 필요하지 않습니다. 참가자의 알고리즘은 비밀로 유지되는 동안 모든 것이 매우 투명합니다.

소식을 기다리십시오!

 
Andrey Dik :

...

소식을 기다리십시오!

우리는 기다립니다


 
Andrey Dik :

안녕하세요!

콘테스트, 유용한 정보 및 훨씬 더 흥미롭고 유용한 최적화 알고리즘 전용 플랫폼(웹사이트)을 준비 중입니다.

누구나 알고리즘 작성 능력을 테스트하고 다른 참가자와 비교하여 테스트할 수 있습니다. 참가자는 알고리즘을 서버에 보낼 필요가 없습니다. 서버에 있는 FF와의 모든 상호 작용은 REST를 통해 이루어지며 참가자는 일련의 인수를 서버에 보내고 FF 결과를 다시 받습니다. 중재자는 필요하지 않습니다. 참가자의 알고리즘은 비밀로 유지되는 동안 모든 것이 매우 투명합니다.

소식을 기다리십시오!

흥미로운!

포럼 고문과 비평가의 말을 듣지 말고 생각한 대로 하십시오. 그렇지 않으면 아무 일도 일어나지 않을 것입니다))

 
Andrey F. Zelinsky :

우리는 기다립니다

세르게이 찰리셰프 :

흥미로운!

포럼 고문과 비평가의 말을 듣지 말고 생각한 대로 하십시오. 그렇지 않으면 아무 일도 일어나지 않을 것입니다))

감사해요!)