![母集団最適化アルゴリズム:灰色オオカミオプティマイザー(GWO)](https://c.mql5.com/2/50/grey_wolf_optimizer_600x314.jpg)
母集団最適化アルゴリズム:灰色オオカミオプティマイザー(GWO)
内容
1.はじめに2.アルゴリズムの説明
3.テスト関数
4.テスト結果
1.はじめに
灰色オオカミアルゴリズムは、2014年に開発されたメタヒューリスティクス確率的群知能アルゴリズムです。そのアイデアは灰色オオカミの群れの狩猟モデルに基づいています。オオカミには、アルファ(α)、ベータ(β)、デルタ(δ)、オメガ(ω)の4種類があります。アルファには、意思決定と群れの管理において最も「重み」があります。次に来るベータとデルタは、アルファに従い、残りのオオカミに対して力を持っています。オメガオオカミは常に他の支配的なオオカミに従います。
オオカミ階層数学モデルでは、アルファオオカミは群れの支配的なオオカミと見なされ、その命令は群れのメンバーによって実行されます。ベータ従属オオカミは、意思決定においてアルファを支援し、アルファの役割の最良の候補と見なされます。デルタオオカミはアルファとベータに従いますが、オメガを支配します。オメガオオカミは群れのスケープゴートであり、最も重要性の低い個体と見なされています。食べ物にありつけるのは最後です。アルファは、最も有利な解決策と見なされます。
2番目と3番目に最適な解決策は、それぞれベータとデルタです。残りの解決策はオメガと見なされます。最も適したオオカミ(アルファ、ベータ、デルタ)、つまり獲物に最も近いオオカミは、残りのオオカミによって接近されると想定されています。各アプローチの後、この段階で誰がアルファ、ベータ、デルタであるかが決定され、次にオオカミが再配置されます。オオカミが群れに集まるまでフォーメーションがおこなわれます。これは、最小距離での攻撃に最適な方向です。
アルゴリズムでは、オオカミが獲物を探し、取り囲み、攻撃するという3つの主要な段階が実行されます。検索により、獲物に最も近いオオカミであるアルファ、ベータ、デルタが明らかになります。残りは、支配的なものに従って獲物を取り囲み始める場合と、最良の選択肢を求めてランダムに動き続ける場合があります。
2.アルゴリズムの説明
群れ内の階層を図1に模式的に示します。 アルファは支配的な役割を果たします。
図1:オオカミの群れの社会階層
数理モデルとアルゴリズム
社会階層
- アルファオオカミ:最善策
- ベータオオカミ:次善策
- デルタオオカミ:3番目に優れた解決策
- オメガオオカミ:他の可能な解決策
獲物を取り囲む:最適なアルファ、ベータ、デルタの解決策が既に存在する場合、以降のアクションはオメガに依存します。
図2:狩猟段階:探索、包囲、攻撃
アルゴリズムのすべての反復は、検索、包囲、狩猟の3つの段階で表されます。アルゴリズムの標準バージョンは、アルゴリズムの収束を改善するために導入された計算された比率aを備えています。比率は反復ごとにゼロに減少します。比率が1を超える限り、オオカミの初期化が進行中です。この段階では獲物の位置がまったくわからないので、オオカミはランダムに配置する必要があります。
「検索」段階の後、適合度関数の値が決定され、その後で初めて「包囲」段階に進むことができます。この段階では比率aは1を超えています。これは、アルファ、ベータ、デルタが以前の位置から離れていることを意味し、推定された獲物の位置をより正確にすることができます。比率aが1に等しくなると、「攻撃」段階が開始されますが、反復の終了前に比率が0になる傾向があります。これにより、オオカミが獲物に近づき、最適な位置がすでに見つかっていることが示唆されます。ただし、この段階でオオカミの1つがより良い解決策を見つけた場合、獲物の位置とオオカミの階層は更新されますが、比率は依然として0になる傾向があります。aを変化させる過程は、非線形関数で表されます。段階を図2に模式的に示します。
オメガオオカミの行動は、すべての時代を通じて不変であり、現在支配的な個体の位置の間の幾何学的中心に従うことにあります.図3では、アルファ、ベータ、デルタは、係数で指定された半径でランダムな方向に以前の位置から逸脱し、オメガはそれらの間の中心に移動しますが、ある程度の確率で半径内でそこから逸脱します。半径はа比率を決定します。記憶にあるように、比率が変化すると半径が比例して減少します。
図3:アルファ、ベータ、デルタに対するオメガの動きの図
GWOアルゴリズムの疑似コードは次のとおりです。
1)灰色オオカミの個体群をランダムに初期化します。
2)母集団の各メンバーの適合度を計算します。
3)群れのリーダー:
-α = 最高の適合度値を持つメンバー
-β = 2番目に優れたメンバー(適合度に関して)
-δ = 3番目に優れたメンバー(適合度に関して)
α、β、δに依存する式に従って、すべてのオメガオオカミの位置を更新します
4)母集団の各メンバーの適合度を計算します。
5)手順3を繰り返します。
アルゴリズムのコードに移りましょう。元のバージョンに加えた唯一の追加は、群れ内の主要なオオカミの数を設定する機能です。群れ全体まで、任意の数のリーダーを設定できるようになりました。これは、特定のタスクに役立つ場合があります。
いつものように、アルゴリズムの基本単位であるオオカミから始めます。これは問題の解決策です。次は、座標の配列と餌の値(適合度関数)を含む構造体です。群れのリーダーとマイナーメンバーの構造体は同じです。これにより、アルゴリズムが簡素化され、ループ操作で同じ構造を使用できるようになります。さらに、すべての反復中に、オオカミの役割が何度も変わります。役割は、並べ替え後の配列内の位置によって一意に決定されます。リーダーは配列の先頭にあります。
//—————————————————————————————————————————————————————————————————————————————— struct S_Wolf { double c []; //coordinates double p; //prey }; //——————————————————————————————————————————————————————————————————————————————
オオカミの群れは、コンパクトでわかりやすいクラスで表されます。ここでは、最適化するパラメータの範囲とステップ、最適な生産位置、最適な解決策の値、および補助機能を宣言します。
//—————————————————————————————————————————————————————————————————————————————— class C_AO_GWO //wolfpack { //============================================================================ public: double rangeMax []; //maximum search range public: double rangeMin []; //manimum search range public: double rangeStep []; //step search public: S_Wolf wolves []; //wolves of the pack public: double cB []; //best prey coordinates public: double pB; //best prey public: void InitPack (const int coordinatesP, //number of opt. parameters const int wolvesNumberP, //wolves number const int alphaNumberP, //alpha beta delta number const int epochCountP); //epochs number public: void TasksForWolves (int epochNow); public: void RevisionAlphaStatus (); //============================================================================ private: void ReturnToRange (S_Wolf &wolf); private: void SortingWolves (); private: double SeInDiSp (double In, double InMin, double InMax, double Step); private: double RNDfromCI (double Min, double Max); private: int coordinates; //coordinates number private: int wolvesNumber; //the number of all wolves private: int alphaNumber; //Alpha beta delta number of all wolves private: int epochCount; private: S_Wolf wolvesT []; //temporary, for sorting private: int ind []; //array for indexes when sorting private: double val []; //array for sorting private: bool searching; //searching flag }; //——————————————————————————————————————————————————————————————————————————————
伝統的に、クラス宣言の後に初期化が続きます。ここでは、オオカミの適合度を最小double値にリセットし、配列のサイズを分散します。
//—————————————————————————————————————————————————————————————————————————————— void C_AO_GWO::InitPack (const int coordinatesP, //number of opt. parameters const int wolvesNumberP, //wolves number const int alphaNumberP, //alpha beta delta number const int epochCountP) //epochs number { MathSrand (GetTickCount ()); searching = false; pB = -DBL_MAX; coordinates = coordinatesP; wolvesNumber = wolvesNumberP; alphaNumber = alphaNumberP; epochCount = epochCountP; ArrayResize (rangeMax, coordinates); ArrayResize (rangeMin, coordinates); ArrayResize (rangeStep, coordinates); ArrayResize (cB, coordinates); ArrayResize (ind, wolvesNumber); ArrayResize (val, wolvesNumber); ArrayResize (wolves, wolvesNumber); ArrayResize (wolvesT, wolvesNumber); for (int i = 0; i < wolvesNumber; i++) { ArrayResize (wolves [i].c, coordinates); ArrayResize (wolvesT [i].c, coordinates); wolves [i].p = -DBL_MAX; wolvesT [i].p = -DBL_MAX; } } //——————————————————————————————————————————————————————————————————————————————
各反復で呼び出される最初のpublicメソッドは、最も理解しにくく、最も膨大な量になります。これがアルゴリズムの主なロジックです。実際、アルゴリズムのパフォーマンスは、方程式によって厳密に記述された確率メカニズムによって提供されます。このメソッドを段階的に考えてみましょう。最初の反復で、意図した獲物の位置が不明な場合、フラグを確認した後、最適化されたパラメータの最大値と最小値から値を生成するだけで、オオカミをランダムな方向に送ります。
//---------------------------------------------------------------------------- //space has not been explored yet, then send the wolf in a random direction if (!searching) { for (int w = 0; w < wolvesNumber; w++) { for (int c = 0; c < coordinates; c++) { wolves [w].c [c] = RNDfromCI (rangeMin [c], rangeMax [c]); wolves [w].c [c] = SeInDiSp (wolves [w].c [c], rangeMin [c], rangeMax [c], rangeStep [c]); } } searching = true; return; }
アルゴリズム記述の標準バージョンには、ベクトルを操作する方程式があります。ただし、コードの形式の方がはるかに明確です。以前のリーダー値を使用する必要があるため、アルファ、ベータ、デルタのオオカミの計算の前に、オメガオオカミの計算が実行されます。
狩猟の3つの段階(検索、包囲、攻撃)を提供する主なコンポーネントは比率aです。これは、現在の反復と反復の総数に対する非線形の依存関係を表し、0になる傾向があります。式の次の要素はAiとСiです。
- Ai = 2.0 * a * r1 - a
- Ci = 2.0 * r2
式
//---------------------------------------------------------------------------- double a = sqrt (2.0 * (1.0 - (epochNow / epochCount))); double r1 = 0.0; double r2 = 0.0; double Ai = 0.0; double Ci = 0.0; double Xn = 0.0; double min = 0.0; double max = 1.0; //omega----------------------------------------------------------------------- for (int w = alphaNumber; w < wolvesNumber; w++) { Xn = 0.0; for (int c = 0; c < coordinates; c++) { for (int abd = 0; abd < alphaNumber; abd++) { r1 = RNDfromCI (min, max); r2 = RNDfromCI (min, max); Ai = 2.0 * a * r1 - a; Ci = 2.0 * r2; Xn += wolves [abd].c [c] - Ai * (Ci * wolves [abd].c [c] - wolves [w].c [c]); } wolves [w].c [c] = Xn /= (double)alphaNumber; } ReturnToRange (wolves [w]); }
これがリーダーの計算です。各座標ごとのa、Ai、Ciの比率が計算されます。唯一の違いは、リーダーの位置が、現時点での最適な獲物の座標と自分の位置に関連して変化することです。リーダーは獲物の周りを回って出入りし、攻撃でマイナーなオオカミを制御します。
//alpha, beta, delta---------------------------------------------------------- for (int w = 0; w < alphaNumber; w++) { for (int c = 0; c < coordinates; c++) { r1 = RNDfromCI (min, max); r2 = RNDfromCI (min, max); Ai = 2.0 * a * r1 - a; Ci = 2.0 * r2; wolves [w].c [c] = cB [c] - Ai * (Ci * cB [c] - wolves [w].c [c]); } ReturnToRange (wolves [w]); }
これは、反復ごとに呼び出される2番目のpublicメソッドです。群れ内のリーダーのステータスはここで更新されます。実際、オオカミは適合度値によって並べ替えられています。群れ全体に保存されているものよりも優れた獲物の座標が見つかった場合、値を更新します。
//—————————————————————————————————————————————————————————————————————————————— void C_AO_GWO::RevisionAlphaStatus () { SortingWolves (); if (wolves [0].p > pB) { pB = wolves [0].p; ArrayCopy (cB, wolves [0].c, 0, 0, WHOLE_ARRAY); } } //——————————————————————————————————————————————————————————————————————————————
3.テスト関数
Skin、Forest、Megacityの各関数については既にご存じでしょう。これらのテスト関数は、最適化アルゴリズムをテストするためのすべての複雑さの基準を満たしています。ただし、考慮されていない機能が1つあります。これは、テストの客観性を高めるために実装する必要があります。要件は次のとおりです。
- 最小値と最大値は範囲の境界にあってはならない:範囲外チェックがない場合、アルゴリズムが優れた結果を示す状況が発生する可能性があります。これは、内部の欠陥により値が境界線上に配置されるためです。
- 最大/小値は範囲座標の中心にあってはならない:この場合、ある範囲で平均化された値を生成するアルゴリズムが考慮されます。
- 最小値は座標の中心に配置する必要がある:これは、2で説明されている状況を意図的に除外するために必要です。
- 実際、これらの結果は偶然得られているが、テスト関数の結果の計算では、関数のドメイン全体でランダムに生成された数値(関数が多変数の場合)が最大値の約50%の平均結果を与える場合を考慮する必要がある。
これらの要件を考慮して、テスト関数の境界が修正され、範囲の中心が関数値の最小値にシフトされました。もう一度まとめておきます。これは、テスト最適化アルゴリズムの結果の妥当性と客観性を最大限に高めるために必要でした。したがって、新しいテスト関数では、乱数生成に基づく最適化アルゴリズムは、全体として当然低い結果を示しました。更新された評価表は、記事の最後にあります。
Skin関数:最適化アルゴリズムを混乱させる可能性のあるいくつかの極値を持つ滑らかな関数。唯一の最大/小値は、付近の値が弱く変化することによって特徴付けられます。この関数は、単一の領域に焦点を当てるのではなく、調査中の領域に分割するアルゴリズムの能力を明確に示しています。特に、蜂コロニー(ABC)アルゴリズムはこのように動作します。
図4:Skinテスト関数
Forest関数:いくつかの滑らかな極値といくつかの微分不可能な極値を持つ関数。これは、「干し草の山の中の針」を見つける能力についての最適化アルゴリズムの価値のあるテストです。特に関数に多くの変数が含まれている場合、単一の最高値を見つけることは非常に困難な作業です。蟻コロニーアルゴリズム(ACO)は、このタスクにおいて、驚異的な方法でゴールへの道を切り開く特徴的な動作によって際立っていました。
図5:Forestテスト関数
Megacity関数:この関数は、1つの最大/小値と複数の極値を持つ離散最適化問題です。調査する非常に複雑な表面は、勾配を必要とするアルゴリズムの優れたテストを提供します。さらに複雑さは、完全に均一な「フロア」によって追加されます。これは最小値でもあり、最大値に向けて可能な方向についての情報を提供しません。
図6:Megacityテスト機能
範囲外の値に対する入力引数の確認が、テスト関数のコードに追加されました。関数の以前のバージョンでは、最適化アルゴリズムは、関数が実際にその定義の範囲内に持つよりも大きな関数値を不当に取得する可能性がありました。
4.テスト結果
テスト関数の変更に伴い、テストスタンドも一新しました。スタンド画面の右側には、最適化アルゴリズムの収束グラフが引き続き表示されます。緑の線は、2つの変数を持つ関数の収束結果を表します。青い線は、40個の変数を持つ関数を表します。赤い線は、1000個の変数を持つ関数を意味します。大きな黒い円は、関数の最大値の位置を示します。小さい黒丸は、現在の最適化アルゴリズムの解の値の位置を示します。白い十字線は、テスト関数の幾何学的中心を示し、最小値に対応します。これは、テストされたアルゴリズムの動作を視覚的に認識しやすくするために導入されました。白い点は平均化された中間解を示します。色付きの小さな点は、対応する次元の座標のペアを示します。色は、テスト関数の次元の順序位置を示します。
新しいスタンドでの以前の記事で説明した最適化アルゴリズムのテストの更新された結果は、更新された表で確認できます。視覚的にわかりやすくするために、収束速度に関する線は表から削除されています。これは、スタンドのアニメーションで視覚的に判断できます。アルゴリズムの説明を含む列を追加しました。
以下は、ACOm(蟻コロニー最適化)テスト結果です。
2022.11.28 12:17:00.468 Test_AO_ACO (EURUSD,M1) =============================
2022.11.28 12:17:06.382 Test_AO_ACO (EURUSD,M1) 1 Skin's; Func runs 10000 result:4.844203223078298
2022.11.28 12:17:06.382 Test_AO_ACO (EURUSD,M1) Score:0.98229
2022.11.28 12:17:14.191 Test_AO_ACO (EURUSD,M1) 20 Skin's; Func runs 10000 result:4.043383610736287
2022.11.28 12:17:14.191 Test_AO_ACO (EURUSD,M1) Score:0.79108
2022.11.28 12:17:55.578 Test_AO_ACO (EURUSD,M1) 500 Skin's; Func runs 10000 result:1.2580170651681026
2022.11.28 12:17:55.578 Test_AO_ACO (EURUSD,M1) Score:0.12602
2022.11.28 12:17:55.578 Test_AO_ACO (EURUSD,M1) =============================
2022.11.28 12:18:01.491 Test_AO_ACO (EURUSD,M1) 1 Forest's; Func runs 10000 result:1.7678766100234538
2022.11.28 12:18:01.491 Test_AO_ACO (EURUSD,M1) Score:1.00000
2022.11.28 12:18:09.508 Test_AO_ACO (EURUSD,M1) 20 Forest's; Func runs 10000 result:1.0974381500585855
2022.11.28 12:18:09.508 Test_AO_ACO (EURUSD,M1) Score:0.62077
2022.11.28 12:18:53.348 Test_AO_ACO (EURUSD,M1) 500 Forest's; Func runs 10000 result:0.20367726028454042
2022.11.28 12:18:53.348 Test_AO_ACO (EURUSD,M1) Score:0.11521
2022.11.28 12:18:53.348 Test_AO_ACO (EURUSD,M1) =============================
2022.11.28 12:18:59.303 Test_AO_ACO (EURUSD,M1) 1 Megacity's; Func runs 10000 result:4.6
2022.11.28 12:18:59.303 Test_AO_ACO (EURUSD,M1) Score:0.38333
2022.11.28 12:19:07.598 Test_AO_ACO (EURUSD,M1) 20 Megacity's; Func runs 10000 result:5.28
2022.11.28 12:19:07.598 Test_AO_ACO (EURUSD,M1) Score:0.44000
2022.11.28 12:19:53.172 Test_AO_ACO (EURUSD,M1) 500 Megacity's; Func runs 10000 result:0.2852
2022.11.28 12:19:53.172 Test_AO_ACO (EURUSD,M1) Score:0.02377
2022.11.28 12:19:53.172 Test_AO_ACO (EURUSD,M1) =============================
2022.11.28 12:19:53.172 Test_AO_ACO (EURUSD,M1) All score for C_AO_ACOm:0.4980520084646583
以下は、(人工蜂コロニー)テスト結果です。
2022.11.28 12:35:47.181 Test_AO_ABCm (EURUSD,M1) =============================
2022.11.28 12:35:52.581 Test_AO_ABCm (EURUSD,M1) 1 Skin's; Func runs 10000 result:4.918379986612587
2022.11.28 12:35:52.581 Test_AO_ABCm (EURUSD,M1) Score:1.00000
2022.11.28 12:35:59.454 Test_AO_ABCm (EURUSD,M1) 20 Skin's; Func runs 10000 result:3.4073825805846374
2022.11.28 12:35:59.454 Test_AO_ABCm (EURUSD,M1) Score:0.63922
2022.11.28 12:36:32.428 Test_AO_ABCm (EURUSD,M1) 500 Skin's; Func runs 10000 result:1.0684464927353337
2022.11.28 12:36:32.428 Test_AO_ABCm (EURUSD,M1) Score:0.08076
2022.11.28 12:36:32.428 Test_AO_ABCm (EURUSD,M1) =============================
2022.11.28 12:36:38.086 Test_AO_ABCm (EURUSD,M1) 1 Forest's; Func runs 10000 result:1.766245456669898
2022.11.28 12:36:38.086 Test_AO_ABCm (EURUSD,M1) Score:0.99908
2022.11.28 12:36:45.326 Test_AO_ABCm (EURUSD,M1) 20 Forest's; Func runs 10000 result:0.35556125136004335
2022.11.28 12:36:45.326 Test_AO_ABCm (EURUSD,M1) Score:0.20112
2022.11.28 12:37:22.301 Test_AO_ABCm (EURUSD,M1) 500 Forest's; Func runs 10000 result:0.06691711149962026
2022.11.28 12:37:22.301 Test_AO_ABCm (EURUSD,M1) Score:0.03785
2022.11.28 12:37:22.301 Test_AO_ABCm (EURUSD,M1) =============================
2022.11.28 12:37:28.047 Test_AO_ABCm (EURUSD,M1) 1 Megacity's; Func runs 10000 result:12.0
2022.11.28 12:37:28.047 Test_AO_ABCm (EURUSD,M1) Score:1.00000
2022.11.28 12:37:35.689 Test_AO_ABCm (EURUSD,M1) 20 Megacity's; Func runs 10000 result:1.9600000000000002
2022.11.28 12:37:35.689 Test_AO_ABCm (EURUSD,M1) Score:0.16333
2022.11.28 12:38:11.609 Test_AO_ABCm (EURUSD,M1) 500 Megacity's; Func runs 10000 result:0.33880000000000005
2022.11.28 12:38:11.609 Test_AO_ABCm (EURUSD,M1) Score:0.02823
2022.11.28 12:38:11.609 Test_AO_ABCm (EURUSD,M1) =============================
2022.11.28 12:38:11.609 Test_AO_ABCm (EURUSD,M1) All score for C_AO_ABCm:0.4610669021761763
以下は、ABC(人工蜂コロニー)テスト結果です。
2022.11.28 12:29:51.177 Test_AO_ABC (EURUSD,M1) =============================
2022.11.28 12:29:56.785 Test_AO_ABC (EURUSD,M1) 1 Skin's; Func runs 10000 result:4.890679983950205
2022.11.28 12:29:56.785 Test_AO_ABC (EURUSD,M1) Score:0.99339
2022.11.28 12:30:03.880 Test_AO_ABC (EURUSD,M1) 20 Skin's; Func runs 10000 result:3.8035430744604133
2022.11.28 12:30:03.880 Test_AO_ABC (EURUSD,M1) Score:0.73381
2022.11.28 12:30:37.089 Test_AO_ABC (EURUSD,M1) 500 Skin's; Func runs 10000 result:1.195840100227333
2022.11.28 12:30:37.089 Test_AO_ABC (EURUSD,M1) Score:0.11118
2022.11.28 12:30:37.089 Test_AO_ABC (EURUSD,M1) =============================
2022.11.28 12:30:42.811 Test_AO_ABC (EURUSD,M1) 1 Forest's; Func runs 10000 result:1.7667070507449298
2022.11.28 12:30:42.811 Test_AO_ABC (EURUSD,M1) Score:0.99934
2022.11.28 12:30:50.108 Test_AO_ABC (EURUSD,M1) 20 Forest's; Func runs 10000 result:0.3789854806095275
2022.11.28 12:30:50.108 Test_AO_ABC (EURUSD,M1) Score:0.21437
2022.11.28 12:31:25.900 Test_AO_ABC (EURUSD,M1) 500 Forest's; Func runs 10000 result:0.07451308481273813
2022.11.28 12:31:25.900 Test_AO_ABC (EURUSD,M1) Score:0.04215
2022.11.28 12:31:25.900 Test_AO_ABC (EURUSD,M1) =============================
2022.11.28 12:31:31.510 Test_AO_ABC (EURUSD,M1) 1 Megacity's; Func runs 10000 result:10.2
2022.11.28 12:31:31.510 Test_AO_ABC (EURUSD,M1) Score:0.85000
2022.11.28 12:31:38.855 Test_AO_ABC (EURUSD,M1) 20 Megacity's; Func runs 10000 result:2.02
2022.11.28 12:31:38.855 Test_AO_ABC (EURUSD,M1) Score:0.16833
2022.11.28 12:32:14.623 Test_AO_ABC (EURUSD,M1) 500 Megacity's; Func runs 10000 result:0.37559999999999993
2022.11.28 12:32:14.623 Test_AO_ABC (EURUSD,M1) Score:0.03130
2022.11.28 12:32:14.623 Test_AO_ABC (EURUSD,M1) =============================
2022.11.28 12:32:14.623 Test_AO_ABC (EURUSD,M1) All score for C_AO_ABC:0.46043003186219245
以下は、PSO(粒子群最適化)テスト結果です。
2022.11.28 12:01:03.967 Test_AO_PSO (EURUSD,M1) =============================
2022.11.28 12:01:09.723 Test_AO_PSO (EURUSD,M1) 1 Skin's; Func runs 10000 result:4.90276049713715
2022.11.28 12:01:09.723 Test_AO_PSO (EURUSD,M1) Score:0.99627
2022.11.28 12:01:17.064 Test_AO_PSO (EURUSD,M1) 20 Skin's; Func runs 10000 result:2.3250668562024566
2022.11.28 12:01:17.064 Test_AO_PSO (EURUSD,M1) Score:0.38080
2022.11.28 12:01:52.880 Test_AO_PSO (EURUSD,M1) 500 Skin's; Func runs 10000 result:0.943331687769892
2022.11.28 12:01:52.881 Test_AO_PSO (EURUSD,M1) Score:0.05089
2022.11.28 12:01:52.881 Test_AO_PSO (EURUSD,M1) =============================
2022.11.28 12:01:58.492 Test_AO_PSO (EURUSD,M1) 1 Forest's; Func runs 10000 result:1.6577769478566602
2022.11.28 12:01:58.492 Test_AO_PSO (EURUSD,M1) Score:0.93772
2022.11.28 12:02:06.105 Test_AO_PSO (EURUSD,M1) 20 Forest's; Func runs 10000 result:0.25704414127018393
2022.11.28 12:02:06.105 Test_AO_PSO (EURUSD,M1) Score:0.14540
2022.11.28 12:02:44.566 Test_AO_PSO (EURUSD,M1) 500 Forest's; Func runs 10000 result:0.08584805450831333
2022.11.28 12:02:44.566 Test_AO_PSO (EURUSD,M1) Score:0.04856
2022.11.28 12:02:44.566 Test_AO_PSO (EURUSD,M1) =============================
2022.11.28 12:02:50.268 Test_AO_PSO (EURUSD,M1) 1 Megacity's; Func runs 10000 result:12.0
2022.11.28 12:02:50.268 Test_AO_PSO (EURUSD,M1) Score:1.00000
2022.11.28 12:02:57.649 Test_AO_PSO (EURUSD,M1) 20 Megacity's; Func runs 10000 result:1.1199999999999999
2022.11.28 12:02:57.649 Test_AO_PSO (EURUSD,M1) Score:0.09333
2022.11.28 12:03:34.895 Test_AO_PSO (EURUSD,M1) 500 Megacity's; Func runs 10000 result:0.268
2022.11.28 12:03:34.895 Test_AO_PSO (EURUSD,M1) Score:0.02233
2022.11.28 12:03:34.895 Test_AO_PSO (EURUSD,M1) =============================
2022.11.28 12:03:34.895 Test_AO_PSO (EURUSD,M1) All score for C_AO_PSO:0.40836715689743186
以下は、RND(ランダム)テスト結果です。
2022.11.28 16:45:15.976 Test_AO_RND (EURUSD,M1) =============================
2022.11.28 16:45:21.569 Test_AO_RND (EURUSD,M1) 1 Skin's; Func runs 10000 result:4.915522750114194
2022.11.28 16:45:21.569 Test_AO_RND (EURUSD,M1) Score:0.99932
2022.11.28 16:45:28.607 Test_AO_RND (EURUSD,M1) 20 Skin's; Func runs 10000 result:2.584546688199847
2022.11.28 16:45:28.607 Test_AO_RND (EURUSD,M1) Score:0.44276
2022.11.28 16:46:02.695 Test_AO_RND (EURUSD,M1) 500 Skin's; Func runs 10000 result:1.0161336237263792
2022.11.28 16:46:02.695 Test_AO_RND (EURUSD,M1) Score:0.06827
2022.11.28 16:46:02.695 Test_AO_RND (EURUSD,M1) =============================
2022.11.28 16:46:09.622 Test_AO_RND (EURUSD,M1) 1 Forest's; Func runs 10000 result:1.4695680943894533
2022.11.28 16:46:09.622 Test_AO_RND (EURUSD,M1) Score:0.83126
2022.11.28 16:46:17.675 Test_AO_RND (EURUSD,M1) 20 Forest's; Func runs 10000 result:0.20373533112604475
2022.11.28 16:46:17.675 Test_AO_RND (EURUSD,M1) Score:0.11524
2022.11.28 16:46:54.544 Test_AO_RND (EURUSD,M1) 500 Forest's; Func runs 10000 result:0.0538909816827325
2022.11.28 16:46:54.544 Test_AO_RND (EURUSD,M1) Score:0.03048
2022.11.28 16:46:54.544 Test_AO_RND (EURUSD,M1) =============================
2022.11.28 16:47:00.219 Test_AO_RND (EURUSD,M1) 1 Megacity's; Func runs 10000 result:10.0
2022.11.28 16:47:00.219 Test_AO_RND (EURUSD,M1) Score:0.83333
2022.11.28 16:47:08.145 Test_AO_RND (EURUSD,M1) 20 Megacity's; Func runs 10000 result:1.08
2022.11.28 16:47:08.145 Test_AO_RND (EURUSD,M1) Score:0.09000
2022.11.28 16:47:49.875 Test_AO_RND (EURUSD,M1) 500 Megacity's; Func runs 10000 result:0.28840000000000005
2022.11.28 16:47:49.875 Test_AO_RND (EURUSD,M1) Score:0.02403
2022.11.28 16:47:49.875 Test_AO_RND (EURUSD,M1) =============================
2022.11.28 16:47:49.875 Test_AO_RND (EURUSD,M1) All score for C_AO_RND:0.38163317904126015
Skinテスト関数のACO
Forestテスト関数のGWO
Megacityテスト関数のGWO
以下は、GWOテスト結果です。
2022.11.28 13:24:09.370 Test_AO_GWO (EURUSD,M1) =============================
2022.11.28 13:24:14.895 Test_AO_GWO (EURUSD,M1) 1 Skin's; Func runs 10000 result:4.914175888065222
2022.11.28 13:24:14.895 Test_AO_GWO (EURUSD,M1) Score:0.99900
2022.11.28 13:24:22.175 Test_AO_GWO (EURUSD,M1) 20 Skin's; Func runs 10000 result:2.7419092435309405
2022.11.28 13:24:22.175 Test_AO_GWO (EURUSD,M1) Score:0.48033
2022.11.28 13:25:01.381 Test_AO_GWO (EURUSD,M1) 500 Skin's; Func runs 10000 result:1.5227848592798188
2022.11.28 13:25:01.381 Test_AO_GWO (EURUSD,M1) Score:0.18924
2022.11.28 13:25:01.381 Test_AO_GWO (EURUSD,M1) =============================
2022.11.28 13:25:06.924 Test_AO_GWO (EURUSD,M1) 1 Forest's; Func runs 10000 result:1.4822580151819842
2022.11.28 13:25:06.924 Test_AO_GWO (EURUSD,M1) Score:0.83844
2022.11.28 13:25:14.551 Test_AO_GWO (EURUSD,M1) 20 Forest's; Func runs 10000 result:0.15477395149266915
2022.11.28 13:25:14.551 Test_AO_GWO (EURUSD,M1) Score:0.08755
2022.11.28 13:25:56.900 Test_AO_GWO (EURUSD,M1) 500 Forest's; Func runs 10000 result:0.04517298232457319
2022.11.28 13:25:56.900 Test_AO_GWO (EURUSD,M1) Score:0.02555
2022.11.28 13:25:56.900 Test_AO_GWO (EURUSD,M1) =============================
2022.11.28 13:26:02.305 Test_AO_GWO (EURUSD,M1) 1 Megacity's; Func runs 10000 result:12.0
2022.11.28 13:26:02.305 Test_AO_GWO (EURUSD,M1) Score:1.00000
2022.11.28 13:26:09.475 Test_AO_GWO (EURUSD,M1) 20 Megacity's; Func runs 10000 result:1.2
2022.11.28 13:26:09.475 Test_AO_GWO (EURUSD,M1) Score:0.10000
2022.11.28 13:26:48.980 Test_AO_GWO (EURUSD,M1) 500 Megacity's; Func runs 10000 result:0.2624
2022.11.28 13:26:48.980 Test_AO_GWO (EURUSD,M1) Score:0.02187
2022.11.28 13:26:48.980 Test_AO_GWO (EURUSD,M1) =============================
2022.11.28 13:26:48.980 Test_AO_GWO (EURUSD,M1) All score for C_AO_GWO:0.41577484361261224
灰色オオカミ最適化アルゴリズム(GWO)は、最近の生物にヒントを得た最適化アルゴリズムの1つで、灰色オオカミの群れのシミュレートされた狩猟に基づきます。平均して、このアルゴリズムは、極値を見つける精度と収束速度の両方の点で、さまざまなタイプの関数で非常に効率的であることが証明されています。いくつかのテストでは、それが最高であることが判明しました。「灰色オオカミ」最適化アルゴリズムの主なパフォーマンス指標は、生物にヒントを得た最適化アルゴリズムのクラスで「従来型」であると考えられている粒子群最適化アルゴリズムの指標よりも優れています。
同時に、灰色オオカミ最適化アルゴリズムの計算の複雑さは、粒子群最適化アルゴリズムに匹敵します。GWO最適化アルゴリズムには多くの利点があるため、アルゴリズムが最初に公開されてから短期間で、その修正に関する多くの研究が発表されています。このアルゴリズムの唯一の欠点は、検出されたForestシャープ最大関数の座標の精度が低いことです。
見つかった極値の精度が低いことは、Forest関数のすべての次元で明らかになり、結果は表内のすべての参加者の中で最悪です。アルゴリズムは、特により大きな次元のSkin関数の場合に、滑らかなSkin関数で効率的であることが証明されました。GWOはまた、Megacity関数の最大値で100%のヒットを達成するために、表で3番目です。
AO | 詳細 | Skin | Forest | Megacity(discrete) | 最終結果 | ||||||
2パラメータ(1F) | 40パラメータ(20F) | 1000パラメータ(500F) | 2パラメータ(1F) | 40パラメータ(20F) | 1000パラメータ(500F) | 2パラメータ(1F) | 40パラメータ(20F) | 1000パラメータ(500F) | |||
蟻コロニー最適化 | 0.98229 | 0.79108 | 0.12602 | 1.00000 | 0.62077 | 0.11521 | 0.38333 | 0.44000 | 0.02377 | 0.49805222 | |
人工蜂コロニーM | 1.00000 | 0.63922 | 0.08076 | 0.99908 | 0.20112 | 0.03785 | 1.00000 | 0.16333 | 0.02823 | 0.46106556 | |
人工蜂コロニー | 0.99339 | 0.73381 | 0.11118 | 0.99934 | 0.21437 | 0.04215 | 0.85000 | 0.16833 | 0.03130 | 0.46043000 | |
灰色オオカミオプティマイザ | 0.99900 | 0.48033 | 0.18924 | 0.83844 | 0.08755 | 0.02555 | 1.00000 | 0.10000 | 0.02187 | 0.41577556 | |
粒子群最適化 | 0.99627 | 0.38080 | 0.05089 | 0.93772 | 0.14540 | 0.04856 | 1.00000 | 0.09333 | 0.02233 | 0.40836667 | |
ランダム | 0.99932 | 0.44276 | 0.06827 | 0.83126 | 0.11524 | 0.03048 | 0.83333 | 0.09000 | 0.02403 | 0.38163222 |
結論
賛成:
1.高速。
2.多数の変数を持つ滑らかな関数の高い収束。
反対:
1.普遍的でない。
2.極限で行き詰まる。
3.離散関数および微分不可能な関数のスケーラビリティが低い。
MetaQuotes Ltdによってロシア語から翻訳されました。
元の記事: https://www.mql5.com/ru/articles/11785
![母集団最適化アルゴリズム:カッコウ最適化アルゴリズム(COA)](https://c.mql5.com/2/50/Cuckoo-Optimization-Algorithm-avatar.png)
![MQL5 - MetaTrader 5クライアントターミナルにビルトインされたトレードストラテジーの言語](https://c.mql5.com/i/registerlandings/logo-2.png)
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索