アルゴリズム最適化選手権。 - ページ 5

 
Andrey Dik:

簡単な例です。最適化アルゴリズムは、どこかのチャートにぶら下がっている。Expert Advisorは、内蔵のテスターでフルサーチにより最適化 されています。そのため、通常の最適化アルゴリズムではなく、独自の最適化アルゴリズムを使用することができます。

もう一つの例。Expert Advisorは、チャートの中で動作し、取引を行います。取引結果をアルゴリズム(Expert Advisor の内部でも外部でもよい)にパラメータと一緒に保存し、新しいパラメータを受信して取引を継続します(あなたの場合は履歴を実行する必要がありますが、私の場合は「ライブ」最適化を使用することができます)。

といった具合に。つまり、これらの例では、アルゴリズムはタスクから完全に独立しているのである。

これらの例を、あえてトレードに当てはめてみたのです。私たちはトレーダーです。

何か普通じゃない。

Expert Advisorはテスターで既に最適化されていますが、独自の最適化アルゴリズムとどのような関係があるのでしょうか?

2つ目のケースは、もう少しわかりやすい。はい、単体で提供すれば、1つ1つ呼び出すことができます。そして、それを別工程で一気に行うことができます。なるほど、しかし、それではアルゴリズムが複雑になり、選手権の目的に集中できません。チャンピオンシップの目的は最適化アルゴリズムであり、その応用ではありません。理解できない人がたくさんいて、今、さらに複雑になっている。

 
Andrey Dik:

という感じで、もちろん計時カウンターもあります。

このコードでは、一発勝負ではなく、アルゴリズムの一部を参加者に少し押し付ける形で、主要な部分を出しているのです。初期条件により、参加者はアルゴリズム全体を隠蔽する権利を有する。
 
Dmitry Fedoseev:

1.何か普通じゃない。Expert Advisorの最適化はすでにテスターで実行されていますが、独自の最適化アルゴリズムとどのような関係があるのでしょうか。

2.2つ目のケースは、もう少しわかりやすい。はい、単体で提供すれば、1つ1つ呼び出すことができます。そして、それを別工程で一気に行うことができます。なるほど、でもこれではアルゴリズムが複雑化し、選手権の趣旨から外れてしまいますね。チャンピオンシップの目的は最適化アルゴリズムであり、その応用ではありません。それを理解していない人がたくさんいて、今、複雑になっているのです。

1.何の変哲もない、実生活に即したもの。社内のテスターが次々とテストを行い(1つのパラメータ-カウンターを引き継ぐ)、すべてのパラメータを無制限に最適化するようコントロールしています。

2.FFとの連携は、2つのバリエーションで行うことにしました。ですから、問題なく、誰でも最適化を行うことができます。

参加者は、1つ目と2つ目のどちらのテストスクリプトを扱うか、自由に選択することができます。

 
Dmitry Fedoseev:
このコードでは、一度だけ呼び出すのではなく、アルゴリズムの主要な部分を外部に移し、その一部を参加者に課しているのです。初期条件により、参加者はアルゴリズム全体を隠蔽する権利を有する。

そこでの押しつけはどこにあるのでしょうか。何回、何を数えるかは、参加者のアルゴリズムが決めることです。アルゴリズムは、同じGAでもアーキテクチャが大きく異なることがあり、この例では、どのような動作原理のアルゴリズムでも使用することができます。

そこでサービス機能を示したのですが、参加者が必要としない場合は空っぽにすることができます。

 
Andrey Dik:

そこでの押しつけはどこにあるのでしょうか。何回、何を数えるかは、参加者のアルゴリズムが決めることです。アルゴリズムは、同じGAでもアーキテクチャが大きく異なることがあり、この例では、どのような動作原理のアルゴリズムでも使用することができます。

そこでサービス機能を示したのですが、参加者が必要としない場合は空になっていることがあります。

参加者に関数やメソッドを持つオブジェクトへのポインタを渡すだけでいいのです。これは第3のミレニアムである。
 
また、エポック数と個体数を割り当てることができるように、参加者関数に許容される ff コールの数を渡します。
 
Dmitry Fedoseev:
また、エポック数と個体数を分散させるために、参加者関数にFFコールの許容数を渡す。

例えば、「FFの呼び出しは最大100回まで」とアルゴリズムに指示を出すと...。嗚呼、彼(アルゴリズム)は考えた、みんなを騙して50音だけ譜面を 呼び出そう、FFを50回だけ呼び出そう、とね。:)

いや、必要な数だけ数えさせればいい。そして、いつ止めるかは私たちが決める。やはり、FFコールの数は仕事の質を表す指標として評価されるでしょう。

 
Andrey Dik:

例えば、「FFの呼び出しは最大100回まで」とアルゴリズムに指示を出すと...。嗚呼、彼(アルゴリズム)は考えた、みんなを騙して50音だけ譜面を 呼び出そう、FFを50回だけ呼び出そう、とね。:)

いや、必要な数だけ数えさせればいい。そして、いつ止めるかは私たちが決める。結局、FFの呼び出し回数が性能の指標として判断されることになる。

回数が少ないと狡いことを言うのはどうなんだろう。少なくてもいい、多くてもいい。何が問題なのか?

FF機能は、呼び出しをカウントする。許容量を超える場合は失格とする。

 

これは、おおよそ会員制ライブラリの雛形と言えるでしょう。

#property library
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

class CFF{
   public:
   virtual double fun(double & x[]){return(0);}
   virtual string type(){return("");}
   virtual double value(){return(0);}
   virtual string note(){return("");}
};

здесь участник пишет свои классы, если надо 

void function(CFF * aff,int n,double & params[],double & value) export{

    Здесь участник пишет свой код и вызывает функцию так - aff.value(x); // x - это массив double

//по окончанию поиска вернуть params (параметры соответствующие лучшему результату), value (лучший результат)

}

здесь участник создает свои вспомогательные функции
 
Dmitry Fedoseev:

狡猾に電話回数を減らしてどうするんだ?少なくてもいい、多くてもいい。何が問題なのか?

ff関数は呼び出しをカウントする。それ以上が認められた場合、失格とする。

FFランは少ない方がいい、それがポイントです。これは少し厄介なことです。

アルゴリズムを限定する必要はなく、カウントさせる。自分で止めることを決めるか、強制的に止めるかのどちらかです。アルゴリズムは、何本が上限なのかを知る必要はない--誰も上限を知らないだろう。失格になることはありません。アルゴリズムができたように問題を解いていく。

唯一の失格は、結果を保存して、その後のチェックスクリプトの実行に使用しようとした場合です。