English Русский 中文 Español Deutsch Português 한국어 Français Italiano Türkçe
preview
母集団最適化アルゴリズム:灰色オオカミオプティマイザー(GWO)

母集団最適化アルゴリズム:灰色オオカミオプティマイザー(GWO)

MetaTrader 5 | 25 1月 2023, 09:37
667 0
Andrey Dik
Andrey Dik

内容

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
ここで、r1とr2は[0.0;1.0]の範囲の乱数です。
Xn += wolves [abd].c [c] - Ai * (Ci * wolves [abd].c [c] - wolves [w].c [c]);
では、オオカミの座標は、リーダーオオカミの平均値に従って調整されます。アルゴリズムでは任意の数のリーダーを指定できるため、座標の合計はループで実行されます。その後、得られた金額をリーダーの数で割ります。新しいr1値と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つあります。これは、テストの客観性を高めるために実装する必要があります。要件は次のとおりです。

  1. 最小値と最大値は範囲の境界にあってはならない:範囲外チェックがない場合、アルゴリズムが優れた結果を示す状況が発生する可能性があります。これは、内部の欠陥により値が境界線上に配置されるためです。
  2. 最大/小値は範囲座標の中心にあってはならない:この場合、ある範囲で平均化された値を生成するアルゴリズムが考慮されます。
  3. 最小値は座標の中心に配置する必要がある:これは、2で説明されている状況を意図的に除外するために必要です。
  4. 実際、これらの結果は偶然得られているが、テスト関数の結果の計算では、関数のドメイン全体でランダムに生成された数値(関数が多変数の場合)が最大値の約50%の平均結果を与える場合を考慮する必要がある。

これらの要件を考慮して、テスト関数の境界が修正され、範囲の中心が関数値の最小値にシフトされました。もう一度まとめておきます。これは、テスト最適化アルゴリズムの結果の妥当性と客観性を最大限に高めるために必要でした。したがって、新しいテスト関数では、乱数生成に基づく最適化アルゴリズムは、全体として当然低い結果を示しました。更新された評価表は、記事の最後にあります。

Skin関数:最適化アルゴリズムを混乱させる可能性のあるいくつかの極値を持つ滑らかな関数。唯一の最大/小値は、付近の値が弱く変化することによって特徴付けられます。この関数は、単一の領域に焦点を当てるのではなく、調査中の領域に分割するアルゴリズムの能力を明確に示しています。特に、蜂コロニー(ABC)アルゴリズムはこのように動作します。

Skin

図4:Skinテスト関数

Forest関数:いくつかの滑らかな極値といくつかの微分不可能な極値を持つ関数。これは、「干し草の山の中の針」を見つける能力についての最適化アルゴリズムの価値のあるテストです。特に関数に多くの変数が含まれている場合、単一の最高値を見つけることは非常に困難な作業です。蟻コロニーアルゴリズム(ACO)は、このタスクにおいて、驚異的な方法でゴールへの道を切り開く特徴的な動作によって際立っていました。



Forest

図5:Forestテスト関数

Megacity関数:この関数は、1つの最大/小値と複数の極値を持つ離散最適化問題です。調査する非常に複雑な表面は、勾配を必要とするアルゴリズムの優れたテストを提供します。さらに複雑さは、完全に均一な「フロア」によって追加されます。これは最小値でもあり、最大値に向けて可能な方向についての情報を提供しません。


megacity

図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

  Skinテスト関数のACO

Forest

Forestテスト関数のGWO

megacity

  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)

ACOm

蟻コロニー最適化

0.98229

0.79108

0.12602

1.00000

0.62077

0.11521

0.38333

0.44000

0.02377

0.49805222

ABCm

人工蜂コロニーM

1.00000

0.63922

0.08076

0.99908

0.20112

0.03785

1.00000

0.16333

0.02823

0.46106556

ABC

人工蜂コロニー

0.99339

0.73381

0.11118

0.99934

0.21437

0.04215

0.85000

0.16833

0.03130

0.46043000

GWO

灰色オオカミオプティマイザ

0.99900

0.48033

0.18924

0.83844

0.08755

0.02555

1.00000

0.10000

0.02187

0.41577556

PSO

粒子群最適化

0.99627

0.38080

0.05089

0.93772

0.14540

0.04856

1.00000

0.09333

0.02233

0.40836667

RND

ランダム

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

添付されたファイル |
DoEasy - コントロール(第28部):ProgressBarコントロールのバースタイル DoEasy - コントロール(第28部):ProgressBarコントロールのバースタイル
今回は、ProgressBarコントロールでのプログレスバーの表示スタイルと説明テキストを開発します。
母集団最適化アルゴリズム:人工蜂コロニー(ABC) 母集団最適化アルゴリズム:人工蜂コロニー(ABC)
今回は、人工蜂コロニーアルゴリズムを研究し、機能空間を研究する新しい原理で知識を補います。今回は、古典アルゴリズムについて、私の解釈を紹介します。
母集団最適化アルゴリズム:カッコウ最適化アルゴリズム(COA) 母集団最適化アルゴリズム:カッコウ最適化アルゴリズム(COA)
次に考察するのは、レヴィフライトを使ったカッコウ検索最適化アルゴリズムです。これは最新の最適化アルゴリズムの1つで、リーダーボードの新しいリーダーです。
非線形指標 非線形指標
今回は、非線形指標を構築する方法と取引での使用について、いくつか考えてみたいと思います。MetaTraderの取引プラットフォームには、非線形なアプローチを使用する指標がかなりあります。