アルゴリズム最適化選手権。 - ページ 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です。

パラメータ1000のFFコールを含むスクリプトを5回実行した。

サンプルをコンパイルして確認する。チャンプのテスト用ao.ex 5の代わりに、あなたのライブラリが入ります。

注意喚起

チャンピオンシップでは、スクリプトはそのままで、ff.ex5 の FF の内容が変わり、競合ライブラリが ao.ex5 になるはずですが、それは宣言されたインポート関数で わかります。

エクスポートした機能を参加者のライブラリに追加する必要がある場合は、事前にお知らせします。現在、すべてのスクリプトコードと必要なインターフェイスが表示されています(もう一度言います)。

 
Andrey Dik:

上記の例のFFのHSSの平均結果は、-3.9699791274683918です。

パラメータ1000のFFコールを含むスクリプトを5回実行した。

サンプルをコンパイルして確認する。チャンプのテスト用ao.ex 5の代わりに、あなたのライブラリが入ります。

注意喚起

チャンピオンシップでは、スクリプトはそのままで、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にアレルギーのある人(もしくはエムタピーが怖い人)にも選手権は開かれてると言ったのはそういうことです。

foursquareで動作させるには、実行スクリプトとメンバーアルゴリズム例で、#import "ff.ex5" と #import "ao.ex5" を #import "ff.ex4" と #import "ao.ex4" に置き換えてください。

また、4.に書き込むこともできます。例えば、MQL4のコードをMQL5でコンパイルした場合、エラーは1つだけでした。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:

待機中

セルゲイ・チャリシェフ

面白い!

ただ、フォーラムのカウンセラーや批評家の意見には耳を貸さず、自分のやりたいことをやらないと、またうまくいかなくなります ))

ありがとうございました!)