遺伝的アルゴリズム

遺伝的アルゴリズム(Genetic Algorithm, GA)は、NinjaScriptのストラテジーのパラメーターを最適化するために使用できる、もう一つの最適化技術である。Defaultの最適化アルゴリズムは、できるだけ最良の結果を見つけるために、最適化範囲内でパラメーターの全ての組み合わせをテストする。しかし、それは全ての可能な組み合わせをテストするので、大量の計算パワーと時間を必要とする。GAは、生物学から模倣した進化理論を通して、全ての組み合わせをテストすることなしに近似の最適解を得ることができるので、このような広範囲の最適化に、より適している。

+ 遺伝的アルゴリズムの理解

概要

GAがどのようにして最適化問題を解くか、その考え方は、自然淘汰を通して種を環境に適応していく進化の概念に似ている。生物学においては、最も強い個体のみが繁殖し、その優れた遺伝子を次の世代に引き継ぐことができる。それぞれの世代で最も強い遺伝子のみを伝えることができると仮定すると、数世代の反復の後で、我々は環境に対する最適な属性を残すだろう。これと同じメカニズムを使って、GAはパラメーターのランダムな組み合わせをテストする。複数の世代のテストを通して、パラメーターは最適解に収束していく。

注記:GAは、おおよその最適解(近似解)を見つけるということを理解しておくことが重要である。可能な組み合わせ全てをテストするわけではないので、その解が絶対的に最適値である保証は無い。

GAの計算方法

GAは次のステップで解を決定する:

  1. ランダムに選択された個体(パラメーター設定の組み合わせ)から構成される初期集団サイズで開始する。
  2. その集団のそれぞれの個体について適応度を計算し、その集団に適応度に基づいた確率を割り当てる。より適応している結果ほど、次の世代の交配で選択される確率が高い。
  3. 子孫を生み出すため、交叉と突然変異を通して前の世代から個体を選択することによって、新しく次の世代の集団を生成する。
  4. 世代数が目標に到達するまでステップ2から繰り返す

交叉と突然変異

交叉(Crossover)は、100%それらの親とは一致しない子孫を生み出すプロセスである。交叉は親Aからパラメーター設定の半分を取得し、他の親Bからの半分と混ぜ合わせることによって成される。交叉はGAに異なるパラメータの組み合わせをテストし、最適解に絞り込んでいくことを可能にする。交叉はいくつかの世代を経た集団において最終的に同質の子孫を生み出してしまうので、アルゴリズムの適応品質を考慮するために、突然変異(Mutation)を通して一部の子孫にいくつかランダムなパラメーター設定が挿入される。

+ 遺伝的アルゴリズムの実行方法

最適化の実施方法については"ストラテジーの最適化"を参照すること。

最適化器(Optimizer)としてGeneticを選択した場合、次の最適化向けプロパティが目に入るだろう:

GO: # of Generations
テストする世代数
GO: Crossover Rate (%)
それぞれの新しい世代はランダムに生成された子孫の組み合わせから作り出され、子孫は親のパラメーターの組み合わせ(交叉)から生成される。Crossover Rate(交叉率)は、交叉プロセスによって生成される新しい世代の割合を決定する。
GO: Generation Size
それぞれの世代でテストする組み合わせの個数。値を大きくすると、より様々な組み合わせでテストする。
GO: Minimum Performance
すべての世代が評価される前にこの成績に到達した場合、即時に最適化処理を打ち切り、結果を表示する。値を0にした場合はMinimum Performance無しを意味する。
GO: Mutation Rate (%)
交叉した子孫が突然変異したパラメータを含む確率 (突然変異率)
GO: Mutation Strength (%)
突然変異のために選び出された子孫が、その変更されたパラメーターを持つことができる交叉値(Mutation Value)からの最大オフセット量
(訳注:意訳すると「突然変異で生じさせる変化の許容幅」という意味だと思われる。具体的な作用は不明。このMutation Strengthという言葉はGAの分野での一般的な用語ではなく、似通ってはいるがGAとは独立して研究されてきた進化戦略(Evolution Strategy、ES)という分野で使われているものらしい。ESでは突然変異の実現手段として正規乱数(正規分布に基づく乱数)が使用され、そのバラつきの幅は標準偏差の大きさで制御される。この標準偏差のことをMutation Strength(突然変異強度とでも言えば良いか)と呼び、Mutation Strengthの大きさを調整することで局所解から抜け出しにくかったりあるいは解が収束しにくかったりする問題に対処するとのこと。なお、NinjaTraderのサポートフォーラムでGAによる最適化のプロパティに関する質問を見つけたが、NinjaTrader社のサポート担当者はヘルプを見よ、以上の回答をしていない。)
GO: Reset Size (%)
新しい世代が作り出される時、前の世代の全ての個体は新たな子孫の親になる可能性がある。新しく作り出された世代の成績上位x%(Stability Size %)の個体が親の成績上位x%と同じ場合、全ての親をリセットし、新しい世代をランダムに再配置する。その一方で、未来の世代のために親の成績上位y%(Reset Size %)のみを残す。
(訳注:言い換えると「世代の前後で成績上位x%(xはStability Sizeプロパティで指定)が全く入れ替わっていない場合、後の世代を生成し直す。その際、親の成績上位の個体は、x%ではなくてy%(yはReset Sizeプロパティで指定)を残すようにする。」。多様性を確保して、局所解にはまる問題に対処するためだと思われる。)
GO: Stability Size (%)
"GO: Reset Size (%)"プロパティの説明を参照
Keep best # results
表示する上位の結果の個数
Optimize data series
Trueに設定した場合、Data Series Valueプロパティが有効になる (Period TypeのKagi、PointAndFigureおよびLine Break periodはサポートしない)
Optimize on...
最適化基準。これはGAの分野での"適応度関数(Fitness Function)"のことである。
Optimizer
使用する最適化アルゴリズム。NinjaTraderには最適化アルゴリズムとして"Default"と"Genetic"が付属している。
最終更新:2014年06月09日 20:20
添付ファイル