ストラテジーテスターにおける最適化 - ページ 7

 

簡単に説明すると

  • 2の64乗の検索フィールドに収まることが合理的充足であること
  • 検索するすべての変数を最大にするのではなく、検索フィールドを事前に推定するのが合理的な動作です。

ラシードあえて正攻法で検索する人はいないと思われます。2^64の遺伝的オプティマイザなら簡単にチェックできるが、だからといって無制限に探索領域を公開する必要はないだろう。結局、これらの領域の遺伝子を生成し、それを操作しなければならないのです。

 
Rosh:

よし、計算してみよう。テスターの1パスが1秒とすると、パスの数2^64-1を60で割って最適化時間を分単位で求めてみましょう。18 446 744 073 709 551 615/60.

次に、この時間を8(コンピュータの8コア)で割ると、8コアのコンピュータでこのパス数での最適化時間が得られます。時間や日数でどのくらいかかるのか?

数えちゃダメだよ、素直に列挙する話じゃないんだから。遺伝的アルゴリズム 自身に必要な数を決めさせます。

人間の脳に例えると、科学者によれば、脳には約10^10の神経細胞があり、それぞれが約10^4のシナプス結合を持っているそうです。

これが、私たちが目指す、より高度なプログラムづくりなのです。

クラウドコンピューティングは何のために作られたのか?このおかげで、ユーザーは1台のパソコンに縛られることなく利用できるようになり、大変感謝しています。

Генетические алгоритмы - это просто!
Генетические алгоритмы - это просто!
  • 2010.05.25
  • Andrey Dik
  • www.mql5.com
В статье автор расскажет об эволюционных вычислениях с использованием генетического алгоритма собственной реализации. Будет показано на примерах функционирование алгоритма, даны практические рекомендации по его использованию.
 
Renat:

長い話を短くすると

  • 2の64乗の検索フィールドに収まることが合理的充足であること
  • 検索するすべての変数を最大にするのではなく、検索フィールドを事前に推定するのが合理的な動作です。

ラシード あえてストレートにオーバーシュートをする人はまずいませんね。2^64遺伝子のオプティマイザなら簡単にチェックできますが、だからといって無制限に検索ドメインを公開する必要はないでしょう。結局、これらの領域の遺伝子を生成し、それを操作しなければならないのです。

64分の2とは、遠大な問題である。

遺伝的アルゴリズムでは、最悪の結果を残す必要はないのですか?

すべての変数を最大限に捻じ曲げることを妨げるものは何ですか?

遺伝子と2^64の関連性がわからないのですが?

Генетические алгоритмы - это просто!
Генетические алгоритмы - это просто!
  • 2010.05.25
  • Andrey Dik
  • www.mql5.com
В статье автор расскажет об эволюционных вычислениях с использованием генетического алгоритма собственной реализации. Будет показано на примерах функционирование алгоритма, даны практические рекомендации по его использованию.
 

それでも、多くの変数を検索するのに便利な場合があり(例:Neural Network)、この制限はよくありません。

だから、制約から解放されることを期待する))

 

このストラテジーテスターは、2本の染色体をコード化するGAを使用しているようです。

以下はその引用 です。

「しかし、染色体の2値表現では、次元の大きな連続空間での探索に困難が伴うため、高い精度が 求められる場合には、特徴量の許容値の区間全体[ai,bi]を必要な精度で分割することに基づく特殊な手法が 用いられます。必要な精度pは式で定義さ れる。


ここで、Nはビット列を符号化するためのビット数である。

この式は、pがNに強く依存すること、すなわち、表現精度は1本の染色体を符号化するのに使われるビット数によって決まることを示しています。そのため、Nが大きくなると探索空間が拡大し、巨大化する。よく知られている本の例:区間[-500; 500]で変化する100個の変数があり、小数点以下6桁以内の極値を求める必要があるとする。この場合、バイナリコーディングによるGAを用いると、文字列長は3000要素、探索空間は約101000 本の染色体になります。"

そのため、最適化するパラメータを64個に限定した場合、標準オプティマイザでは比較的小さなサイズのニューラルネットワークでも学習することができないのです。もう一つ欠点があり、最適化可能な変数のパラメータが多い場合、手動で記入するのは非常に時間がかかる。そのため、最適化可能なパラメータを持つ配列をプログラムで指定することを既に提案しました。

しかし、良いニュースもある。テスターやターミナルに足りないものは、すべてMQL5ネイティブの手段で実装することが可能です。後日、テスターとプログラムコードを使った最適化テストの結果を掲載する予定です。

 

しかし、テストタスクでテスターからの結果を待つことはありませんでした(つまり、待つことは怠慢なのです)。

でも、テストは誰でも自分でできるんですよ。これについては、記事 中の最初の例を参考にしてください。最適化モード - 最大値検索を設定することを忘れないでください(最大値のみが利用可能な標準オプティマイザと比較できるようにするためです)。

緑のカブよりさらに単純で、ユーザーのテスト関数を計算する以外何もしないExpert Advisorを書いてみましょう。

//+------------------------------------------------------------------+
//|                                                  Test expert.mq5 |
//|                                      Copyright 2010, JQS aka Joo |
//|                              https://www.mql5.com/ru/users/joo |
//+------------------------------------------------------------------+
#property copyright "Copyright 2010, JQS aka Joo"
#property link      "https://www.mql5.com/ru/users/joo"
#property version   "1.00"
//--- input parameters
input double   x1=0.0;
input double   x2=0.0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {

  }
//+------------------------------------------------------------------+

double OnTester()
  {
   return
   (
    pow(cos((double)(2*x1*x1))-0.11 e1,0.2 e1)+
    pow(sin(0.5 e0 *(double) x1)-0.12 e1,0.2 e1) -
    pow(cos((double)(2*x2*x2))-0.11 e1,0.2 e1)+
    pow(sin(0.5 e0 *(double) x2)-0.12 e1,0.2 e1)
    );
  }
//+------------------------------------------------------------------+

テスターウィンドウの設定項目は以下の通りです。


入力パラメーター」タブで、以下の操作を行います。


そして、行く。

おおよその結論は以下の通りです。

1) テスターのオプティマイザーは10-100倍遅い(テスターでの最適化は2つのプロセッサコアで行われ、ソフトウェアの最適化は1つのコアで行われたにもかかわらず、私には効果がありました)。おそらく、このような圧倒的な差は、テスターがFFを直接計算するだけでなく、ログの書き込みや画面への情報表示など、ソフトウェアによる最適化とは異なる「強制ブレーキ」を持っていることに起因しているのだろう。

2) テスターでは64以上の最適化可能なパラメータを使用できない(エキスパートアドバイザー作成用ウィザードでは60パラメータに制限)ため、かなりの大きさのニューラルネットワークを学習させることができない。

自分でテスト代行を 書くか(MQL5では可能、優れた「釣り竿」だが「魚」ではない)、テスターのバイナリ遺伝アルゴリズムが連続アルゴリズムに置き換えられ、最適化パラメータ数の制限がなくなるまで待つか である。2つ目は建設的でないので、1つ目が残ります。:)

グローバルな結論:MQL5を学ぶ。


PS 最適化情報(ログ、最適化グラフ)の出力を有効・無効にでき、さらにテスターのパフォーマンスを向上させるために出力の詳細をカスタマイズできれば、良い解決策になると思います。

 
テスターやオプティマイザを書くだけでなく、すべてのプロセッサコアを使った計算や、リモートエージェントを使った計算(集団計算をする場合)も必要です。第一に、標準的なテスターとは比較にならないほどスピードが速く、第二に、これをすべて書くためには、多くの時間と何百キロバイトものコードを費やす必要があります。
 
Mr.FreeMan:
テスターやオプティマイザを書くだけでなく、すべてのプロセッサコアを使った計算や、リモートエージェントを使った計算(集団計算をする場合)も必要です。第一に、標準的なテスターとは比較になりません。すべてがずっと遅くなりますし、第二に、これをすべて書くには多くの時間と何百キロバイトものコードが必要です。
jooのGAはすでに標準のものより高速で、studio 10(マルチコアプロセッサ対応)でCPPにコードを移植することで、さらに6倍高速化されます。
 
Mr.FreeMan:
joo さん、ポイントはもっとあります。このような小さな計算のためのテスターやオプティマイザーを書くだけでなく、すべてのプロセッサコアを巻き込むような計算のためのディストリビューターを作る必要がありますし、(集団計算を保持したい場合は)リモートエージェントを接続することも必要です。第一に、標準的なテスターとは比較にならないほどスピードが速く 、第二に、これをすべて書くためには、多くの時間と何百キロバイトものコードを 費やす必要があります。

赤のウラインについて 、こう答えた。

グリーンに関しては、もちろんお金の話です。時は金なり。普段はスロースターターですが、ライダーは早いです(GAの開発とデバッグに1年以上かかりました)。今では、記事が公開 された後も、私の受信トレイにお礼のメッセージが届き続けています。:)

社内テスターを批判しているわけではありません。あくまでも、開発者が特に注意しなければならない点を絞っているのです。結局、どんなに優れたオプティマイザー(テスターではなくオプティマイザー)でも、恐ろしく遅ければ、その長所はすべて消えてしまうのです。

 

今、思い切ったことを思いつきました。でも、なぜそうしないのでしょう?

MetaQuotes Software Corp.のMetaTrader 5 optimizerに私のUGAを使用できることを光栄に思います。もちろんボーナスは断らないが、完全無料にする予定だ。

UGAはシンプルで効率的です。非常に柔軟な設定が可能です。テスターでは、「ラフ」「ミディアム」「ファイン」の3つの設定テンプレートを入力できるほか、「何のために必要かはっきりしない場合は、これらの設定を何も変更しないでください」というメッセージとともに、設定内容を個別に表示することができます。これにより、非常に素早い近似から、最終的に最適なTCの設定を厳密に探索することまで、思い通りの詳細な最適化を行うことができるようになります。現時点では、ビルトイン・オプティマイザは、それ自体、どのような設定もできません。

Торговая платформа MetaTrader 5 для организации брокерского обслуживания / MetaQuotes Software Corp.
  • www.metaquotes.net
Торговая платформа MetaTrader 5 предназначена для проведения торговых операций на различных финансовый рынках. Терминал обладает большой базой аналитических возможностей и поддерживает более 70 различных инструментов для выполнения технического анализа