算法优化锦标赛。 - 页 3

 
Andrey Dik:

*.ex库本质上必须是一种访问算法的统一方式。该算法可以嵌入这个标准库中,或者他可以用自己的函数从这个库中调用他的算法。

那么赋予参与者的是哪种功能呢?参与者会给它或传递一些东西给他吗?玩文字游戏,我不知道你是什么意思。

应向参与者提供他们所调查的功能(ff)。他将为之寻找最大或最小的那个。当然,他的搜索算法会在他的图书馆里。

我的意思是,不要给函数本身(发送代码),但在锦标赛期间以某种方式将其传递给参赛者的代码。

 

而FF的算法不需要给出。

脚本通过导入 从库中请求一个可优化的参数阵列

脚本将这个数组发送给FF库,FF库返回结果

脚本将结果发送至成员库

脚本调用成员库的服务函数,如果有必要的话,算法会做一些事情,或者它里面只是一个空函数。

我是用手机写的,抱歉

 
Andrey Dik:

而FF的算法不需要给出。

脚本通过导入从库中请求一个可优化的参数阵列

脚本将这个数组发送给FF库,FF库返回结果

脚本将结果发送至成员库

脚本调用成员库的服务函数,如果有必要的话,算法会做一些事情,或者它里面只是一个空函数。

我是用手机写的,抱歉

这一点并不清楚。我们将等待代码中的一个例子。
 

虽然它是部分明确的,但具体明确的是通过JO))。

事实证明,当一个成员函数被调用 时,该函数必须做一步的工作。有必要把一切都颠倒过来。我不觉得有什么好想的。因此,这项任务已经很复杂了,而我们还得给它增加更多人为的复杂因素。

有两种可能的方法。

1.正如我在上面描述的那样,与FFS的一个班级。

2.一个参与者在他的图书馆中用ff导入一个图书馆。检查员将用他自己的东西来代替。

没有其他选择。除非可以传递一个指向该函数的指针,如果可以的话(但到目前为止,没有人建议在帮助中寻找)。参与者必须有充分的能力来调用f函数。

 

在一般情况下,像这样,当然也会有一个记时的计数器。 纲要。

#import "oa.ex5" // алгоритм оптимизации участника
void   ServiceFunc1 (); 
int    GetReplaysCount (); // запрос количества запусков ФФ (у участника может быть свой размер колонии или нечто подобное если это не ГА 
void   GetOptParam (double &param []); 
void   ServiceFunc2 (); 
bool   StopAlgo ();        // этой функцией участник по желанию может остановить оптимизацию
int    GetEpochCount ();   // если участник желает использовать своё фиксированное значение "эпох"
void   SendFFvolue (double &volue); 
double GetMaxFF (); 
#import

#import "ff.ex5" // тестовая фитнес функция чемпионата, не известна участникам 
double GetFFvolue (double &param []); // передаём в ФФ оптимизируемые параметры, получаем результат ФФ 
#import

void OnStart () 
{ 
  bool   stopAlgo = false; 
  int    epoch = GetEpochCount (); 
  int    maxEpochPossible = 1000; 
  double param []; 
  double volue; 
  int    epochCNT = 0; 
  int    ffCNT = 0; 
  
  double FFvolue = -DBL_MAX; 
  
  ServiceFunc1 (); 
  while(!stopAlgo) 
  {
    for(int i = 0; i < GetReplaysCount (); i++) 
    {
      GetOptParam (param); 
      volue = GetFFvolue (param); 
      ffCNT++; 
      SendFFvolue (volue);
    }
    ServiceFunc2 (); 
    
    epochCNT++; 
    
    if(epochCNT >= epoch) 
      stopAlgo = true; 
    
    if(epochCNT >= maxEpochPossible) 
      stopAlgo = true;
  }
  
  Print ("Epoch: " + (string)epochCNT + " ; FF starts: " + (string)ffCNT + " ; MaxFF: " + (string)GetMaxFF ());
} 
 
Dmitry Fedoseev:

参与者必须有充分的能力来调用f函数。

不,它不应该。而且它不应该,因为如果它不应该,你可能会在内置测试器中使用EA的内部优化,如果它应该,那么对交易者来说就没有什么实际用途了。

我的文章展示了一个例子,其中FF被从算法中调用。这就缩小了应用的范围。如果你从文章中提取算法(这并不是规则所禁止的),你将不得不运用你的智慧来摆脱FF的这种内部调用。

 
Andrey Dik:

在一般情况下,像这样,当然也会有一个记时的计数器。 纲要。

不,不好))这样的做法。一个参与者应该能够循环,也就是说,他的一个行动意味着对FFS的多次调用。
 
Andrey Dik:
不,它不应该。而且不应该,因为如果不是,那么你就可以在内置的测试器中使用EA中的内部优化,如果应该,那么对交易者来说就没有什么实际用途了。
看看上面列出的通用方法。而如果通过中介机构进行一次性呼叫,就需要对搜索功能进行非常认真的调整,这正是没有人会做的事情,因为我们要通过EA拔出脑筋,把它放到位。
 
Dmitry Fedoseev:
不,它不起作用))这样的方法。一个参与者应该能够旋转循环,也就是说,他的一个动作意味着对FFS的多次调用。
对不起,周期将由外部控制。一切都是公平的。:)
 
Andrey Dik:
对不起,周期将由外部控制。这都是公平公正的。:)
不,ff函数应该计算调用次数。