算法优化锦标赛。 - 页 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的HSS的平均结果是-3.9699791274683918。

对脚本进行了5次运行,参数为1000次FF调用。

编译实例并检查。在冠军上的测试ao.ex5 的地方将是你的库。

提醒大家注意。

在冠军赛中,脚本将保持不变,没有任何变化,ff.ex5中的FF内容将有所不同,竞争者库应该是ao.ex5,从声明的导入函数 中可以看出。

如果有必要将导出的功能添加到参与者库中,将会有一个提前通知。此刻所有的脚本代码和所需的接口都显示出来了(再一次),准备好了。

 
Andrey Dik:

上述例子中的FF的HSS的平均结果是-3.9699791274683918。

对脚本进行了5次运行,参数为1000次FF调用。

编译实例并检查。在冠军上的测试ao.ex5 的地方将是你的库。

提醒大家注意。

在冠军赛中,脚本将保持不变,没有任何变化,ff.ex5中的FF内容将有所不同,竞争者库应该是ao.ex5,这可以从声明的导入函数 中看出。

如果有必要将导出的功能添加到参与者库中,会有一个提前通知。这时,所有的脚本代码和所需的接口都显示出来了(再一次),准备好。

H 接口工作。将上述三个代码转为五。

1.将可执行脚本 称为Ch Script。

2.健身函数的库 被命名为ff。应该这样称呼它。否则脚本不会看到它。

3.示例算法的库 被命名为ao。库的名字应该是这样的。否则,脚本将看不到它。

我在图表上运行了这个脚本。在此之前,我把库中的健身函数改为双ffVolue = 2+exp(-MathAbs(x1+x2+x3));真正的最大值是3。明白了。


按照我的理解,我需要按照示例算法的格式重写我的算法,将代码中的函数重命名为示例中的名称,并检查它们是否正常。

没有必要研究连接界面和所给的例子FF。

附加的文件:
ff.mq5  2 kb
ao.mq5  5 kb
 
Yuri Evseenkov:

H 接口工作。将这三个代码转到了5号机。

1.将可执行脚本 命名为Ch Script。

2.健身函数的库 被命名为ff。应该这样称呼它。否则脚本不会看到它。

3.示例算法的库 被命名为ao。库的名字应该是这样的。否则,脚本将看不到它。

我在图表上运行了这个脚本。在此之前,我把库中的健身函数改为双ffVolue=2+exp(-MathAbs(x1+x2+x3));真正的最大值是3。明白了。


按照我的理解,我 需要按照示例算法的格式重写我的算法,将代码中的函数重命名为示例中的名称,并检查它们是否正常

没有必要研究连接界面和所给的例子FF。

很好!你所做的一切都很正确。

只是对强调的一点更正:在参与者的算法中,你需要确保声明(与例子中完全一样)强制性的可导出函数,这些可导出函数的内容和其他自定义函数的存在是由参与者决定的 评论中是这么说的。

这很简单,不是吗?))

 
哦,对了...这些例子在MT4中也可以使用。没有检查过,但里面没有什么东西是不能在MT4中使用的。这就是我说的,对于那些对MT5过敏(或emtapathobic)的人,冠军也向他们开放。
 
Andrey Dik:
哦,对了...这些例子在MT4中也可以使用。我没有检查,但没有什么可能在MT4中不工作。这就是我所说的,对于那些对MT5过敏(或害怕)的人,冠军也是为他们开放的。

为了让它在foursquare中工作,在可执行脚本和示例成员算法中把#import "ff.ex5 "和#import "ao.ex5 "替换为#import "ff.ex4 "和#import "ao.ex4"。

你也可以写在4 .例如,当我在MQL5中编译MQL4代码时,只出现了一个错误。我把TRUE改为true或one,就成功了。我应该按照例子中的写法来写。 我还没有修正自己的代码。我会试一试的。


附加的文件:
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:

等待

谢尔盖-查尔舍夫。

有趣的是!

只是不要听信论坛上的辅导员和批评家的话,做你想做的事,否则就不会再成功了 ))

谢谢你!)