English Русский Español Deutsch Português
preview
母集団最適化アルゴリズム:極値から抜け出す力(第II部)

母集団最適化アルゴリズム:極値から抜け出す力(第II部)

MetaTrader 5テスター | 12 8月 2024, 13:06
44 0
Andrey Dik
Andrey Dik

内容

1.アルゴリズム
2.BGAエージェントの改善
3.終わりに


研究の一環として、母集団最適化アルゴリズムのロバスト性と、さまざまなテスト関数において局所的な罠を克服して最大値を達成する能力の研究に取り組んでいます。前回の記事では、ランキングでそこそこの結果を示したアルゴリズムについて見てきたので、トップパフォーマーに注目する時です。

それぞれの利点やユニークな特徴を明らかにしながら、これらのアルゴリズムの詳細な分析をおこなうよう努めます。私たちの目標は、これらのアルゴリズムが複雑さを克服し、大域的な最適化目標を達成するために、どのような戦略やアプローチが有効であるかを理解することです。

この研究段階によって、集団アルゴリズムが局所的な罠にはまったときの回復力をよりよく理解できるだけでなく、多様で複雑なテスト関数に直面したときの成功に寄与する重要な要因を特定することができます。私の努力は、これらのアルゴリズムがどのように最適化され、改善され得るかについての理解を深め、将来的に様々な最適化問題を効果的に解決するために、これらのアルゴリズムの共同利用やハイブリダイゼーションの機会を特定することを目的としています。


1.アルゴリズム

比較表で上位を占めるアルゴリズムを引き続き研究してみましょう。それらは間違いなく、より詳細な検討と注意を払うに値します。複雑な最適化問題を解決する上で、その価値と効果を発揮するあらゆる側面を明らかにするために、その特徴を詳細に分析してみましょう。

以下は、アルゴリズムに関するレポートです。

  • C_AO_FSS:50;0.01;0.8:アルゴリズム名と外部パラメータ
  • 5 Hilly's:テスト関数の名前とテスト中の番号
  •  Func runs:10000:実行回数
  • result:0.32457068874346456:得られた結果。0.0はテスト関数の最小値、1.0は最大値。数値が高いほど良い
  • All score:1.33084:得点の合計値。数値が高いほど良い

進化戦略、(P+O)ES

C_AO_(P_O)ES:100:150:0.02:8.0:10
=============================
5 Hilly's; Func runs:10000; result:0.45574011563217454
25 Hilly's; Func runs:10000; result:0.5979154724556998
500 Hilly's; Func runs:10000; result:0.3415203622112476
=============================
5 Forest's; Func runs:10000; result:0.18929181937830403
25 Forest's; Func runs:10000; result:0.1837517532554242
500 Forest's; Func runs:10000; result:0.15411134176683486
=============================
5 Megacity's; Func runs:10000; result:0.10153846153846155
25 Megacity's; Func runs:10000; result:0.12030769230769231
500 Megacity's; Func runs:10000; result:0.08793846153846216
=============================
All score:2.23212

弟分の(PO)ESとは異なり、(P+O)ESは探索空間、特に滑らかなHilly関数上で非常にアクティブです。母集団はいくつかのグループに分けられ、それぞれが異なる領域を探索します。しかし、滑らかなForest関数では、なぜかその効率は低下し、離散関数ではパフォーマンスが悪くなっています(最も近い丘にしか到達しない)。一般に、このアルゴリズムは滑らかな微分可能関数に対しては非常に興味深いものですが、明らかに行き詰まる傾向があります。その上、結果を洗練させる能力に欠けています。

灰色オオカミオプティマイザ (GWO)

C_AO_GWO:50;10
=============================
5 Hilly's; Func runs:10000; result:0.5385541648909985
25 Hilly's; Func runs:10000; result:0.33060651191769963
500 Hilly's; Func runs:10000; result:0.25796885816873344
=============================
5 Forest's; Func runs:10000; result:0.33256641908450685
25 Forest's; Func runs:10000; result:0.2040563379483599
500 Forest's; Func runs:10000; result:0.15278428644972566
=============================
5 Megacity's; Func runs:10000; result:0.2784615384615384
25 Megacity's; Func runs:10000; result:0.1587692307692308
500 Megacity's; Func runs:10000; result:0.133153846153847
=============================
All score:2.38692

GWOアルゴリズムの狼の群れが、仮想世界の広大な土地を駆け巡り、さまざまなテスト関数で四方八方に急速に広がっていきます。この特性は、特にアルゴリズムが、発見された解を改善し補完することができる別の手法と対になっている場合、最初の反復で効果的に使用することができます。群れの優れたリサーチ能力はそのポテンシャルを物語っていますが、残念ながら、領域を特定する精度は依然として弱点です。興味深いことに、このアルゴリズムは、エージェントを一様に分布させた従来のテストよりもさらに優れた結果を示しました。

Shuffled Frog-Leapingアルゴリズム(SFL)

C_AO_SFL:50;25;15;5;0.7
=============================
5 Hilly's; Func runs:10000; result:0.5009251084703008
25 Hilly's; Func runs:10000; result:0.3175649450809088
500 Hilly's; Func runs:10000; result:0.25514153268631673
=============================
5 Forest's; Func runs:10000; result:0.4165336325557746
25 Forest's; Func runs:10000; result:0.21617658684174407
500 Forest's; Func runs:10000; result:0.15782134182434096
=============================
5 Megacity's; Func runs:10000; result:0.2892307692307692
25 Megacity's; Func runs:10000; result:0.14892307692307696
500 Megacity's; Func runs:10000; result:0.10636923076923148
=============================
All score:2.40869

SFLアルゴリズムは、リスト内の前のアルゴリズムと比較して、離散Megacity関数であっても、検索空間のさまざまな方向への伝播能力のさらに広い範囲を実証しました。SFLは、与えられた反復回数内で最大値領域にさえ到達することができます。ただし、発見された解を精緻化する精度は、SFLの得意とするところではありません。GWOと同様に、このアルゴリズムは従来のテストよりも優れた結果を示しました。

ランダム検索アルゴリズム(RND)

C_AO_RND:50
=============================
5 Hilly's; Func runs:10000; result:0.5024853724464499
25 Hilly's; Func runs:10000; result:0.3284469438564529
500 Hilly's; Func runs:10000; result:0.2600678718550755
=============================
5 Forest's; Func runs:10000; result:0.3989291459162246
25 Forest's; Func runs:10000; result:0.22913381881119183
500 Forest's; Func runs:10000; result:0.16727444696703453
=============================
5 Megacity's; Func runs:10000; result:0.2753846153846154
25 Megacity's; Func runs:10000; result:0.14861538461538465
500 Megacity's; Func runs:10000; result:0.09890769230769311
=============================
All score:2.40925

この最もシンプルな最適化手法は、このユニークなコンテストにおいて、多くの著名な参加者を打ち負かしました。覚えておいでかもしれませんが、RNDアルゴリズムの戦略は50%の確率です。母集団からランダムに選択された個体の座標を選択するか、一様分布でランダムな座標を生成するかのいずれかです。しかし、そのおかげで、このアルゴリズムは参加者リストの真ん中まで上がることができました。この場合、精度について語る必要はありませんが、これは空間を探索するための幅広い能力によって可能になりました。

社会集団の進化(ESG)

C_AO_ESG:200:100:0.1:2.0:10.0
=============================
5 Hilly's; Func runs:10000; result:0.3695915822772909
25 Hilly's; Func runs:10000; result:0.3396716009249312
500 Hilly's; Func runs:10000; result:0.2727013729189837
=============================
5 Forest's; Func runs:10000; result:0.2956316169252261
25 Forest's; Func runs:10000; result:0.2875217303660672
500 Forest's; Func runs:10000; result:0.16124201361354124
=============================
5 Megacity's; Func runs:10000; result:0.30769230769230765
25 Megacity's; Func runs:10000; result:0.306153846153846
500 Megacity's; Func runs:10000; result:0.13183076923077003
=============================
All score:2.47204

ESGアルゴリズムは、探索空間を特徴的なグループに分けて探索する能力に優れています。ただし、空間の遠い領域を省いてしまうため、問題の全容を探る際に問題が生じる可能性があります。また、有意な極値で立往生する傾向があり、大域的最適解を達成するのが難しくなる兆しもあります。にもかかわらず、このアルゴリズムは、離散Megacity関数を扱ったときに大きな成功を示し、特定の条件やタスクにおけるその可能性を強調しています。

Intelligent Water Dropsアルゴリズム(IWDm)

C_AO_IWDm:50;10;3.0
=============================
5 Hilly's; Func runs:10000; result:0.4883273901756646
25 Hilly's; Func runs:10000; result:0.34290016593207995
500 Hilly's; Func runs:10000; result:0.2581256124908963
=============================
5 Forest's; Func runs:10000; result:0.5119191969436073
25 Forest's; Func runs:10000; result:0.2564038040639046
500 Forest's; Func runs:10000; result:0.1675925588605327
=============================
5 Megacity's; Func runs:10000; result:0.34153846153846157
25 Megacity's; Func runs:10000; result:0.15784615384615389
500 Megacity's; Func runs:10000; result:0.09889230769230851
=============================
All score:2.62355

荒れ狂う川の流れのように、IWDmアルゴリズムは探索空間を急速に滑空し、最大領域に素早く到達し、優れた探索能力を発揮します。ただし、このアルゴリズムには十分な明確性がないため、最適解を正確に決定することが難しくなる可能性があることは注目に値します。

従来のランキングでは、このアルゴリズムはベストに入ることはありませんでしたが、この特別なテストでは、他のアルゴリズムに比べて印象的な結果を残しました。IWDmは最適化の初期段階で使用することをお勧めします。その後、より正確なアルゴリズムに移行し、最適化プロセス全体を充実させ、改善することができます。

粒子群 (PSO)

C_AO_PSO:50;0.8;0.4;0.4
=============================
5 Hilly's; Func runs:10000; result:0.5548169875802522
25 Hilly's; Func runs:10000; result:0.3407594364160912
500 Hilly's; Func runs:10000; result:0.2525297014321252
=============================
5 Forest's; Func runs:10000; result:0.4573903259815636
25 Forest's; Func runs:10000; result:0.27561812346057046
500 Forest's; Func runs:10000; result:0.19079124396445962
=============================
5 Megacity's; Func runs:10000; result:0.3092307692307693
25 Megacity's; Func runs:10000; result:0.14923076923076928
500 Megacity's; Func runs:10000; result:0.09553846153846236
=============================
All score:2.62591

この実験では、PSOアルゴリズムが予想外の好成績を収め、従来のIWDmアルゴリズムに比べて未知の領域への移動速度がさらに速くなったことを示し、驚きを与えました。この突然の成功は、PSOの粒子が最初の反復でランダムに選ばれた初速を持ち、それによって元の位置からすぐに離れることができるという事実によって説明することができます。アルゴリズムの初期段階は、粒子が特別な調和を見つけるまで、空間全体で踊るダンスに似ています。残念ながら、この調和は必ずしも大域的最適解にはつながりません。明確な資質の欠如は、理想的な解の達成を遅らせます。

IWDmと同様、PSOは最適化の初期段階で使用するよう推奨できます。そこでは、探索空間を素早く探索する能力が有望な解を発見する鍵となります。

コウモリアルゴリズム(BA)

C_AO_BA:50;0.0;1.0;0.0;1.5;0.0;1.0;0.3;0.3
=============================
5 Hilly's; Func runs:10000; result:0.5127608047854995
25 Hilly's; Func runs:10000; result:0.4239882910506281
500 Hilly's; Func runs:10000; result:0.3127353914885268
=============================
5 Forest's; Func runs:10000; result:0.4355521825589907
25 Forest's; Func runs:10000; result:0.29303187383086005
500 Forest's; Func runs:10000; result:0.19433130092541523
=============================
5 Megacity's; Func runs:10000; result:0.28769230769230764
25 Megacity's; Func runs:10000; result:0.16030769230769232
500 Megacity's; Func runs:10000; result:0.10907692307692407
=============================
All score:2.72948

BAアルゴリズムのコウモリは、全域的極値の領域を素早く見つけ、最初の反復で瞬時に移動するという驚くべき性質を持っています。しかし、この捜索方法における音波パルスの方程式により、捜索を続ける必要があることは明らかであるにもかかわらず、コウモリの動きはすぐに衰えてしまいます。BAは通常のランキングでは下位ですが、このチャレンジでは上位にランクされています。

 侵入雑草最適化(IWO)

C_AO_IWO:50;12;5;2;0.2;0.01
=============================
5 Hilly's; Func runs:10000; result:0.4570149872637351
25 Hilly's; Func runs:10000; result:0.4252105325836707
500 Hilly's; Func runs:10000; result:0.28299287471456525
=============================
5 Forest's; Func runs:10000; result:0.43322917175445896
25 Forest's; Func runs:10000; result:0.33438950288190694
500 Forest's; Func runs:10000; result:0.18632383795879612
=============================
5 Megacity's; Func runs:10000; result:0.3061538461538461
25 Megacity's; Func runs:10000; result:0.24369230769230765
500 Megacity's; Func runs:10000; result:0.12887692307692397
=============================
All score:2.79788

侵入雑草アルゴリズムもまた、コウモリアルゴリズム(BA)のように、現在の反復の関数として伝播速度に従います。ただし、この場合、エージェントはBAに比べて、より効率的かつ完全に空間を探索することができるため、関数の主要な特徴や最大値の領域を考慮した最適解を迅速かつ正確に見つけることができます。しかし、スタート地点からゴールまでの距離が大きいと、雑草は最大値の領域に達しません。これは特にMegacity関数で顕著で、エージェントは最も近い有意な極値から抜け出せなくなります。

人工蜂コロニー (ABC)

C_AO_ABC:50;45;10;0.1;0.4
=============================
5 Hilly's; Func runs:10000; result:0.5969246550857782
25 Hilly's; Func runs:10000; result:0.3899058056869557
500 Hilly's; Func runs:10000; result:0.26574506946962373
=============================
5 Forest's; Func runs:10000; result:0.536535405336652
25 Forest's; Func runs:10000; result:0.29048311417293887
500 Forest's; Func runs:10000; result:0.17322987568991322
=============================
5 Megacity's; Func runs:10000; result:0.3307692307692308
25 Megacity's; Func runs:10000; result:0.18492307692307694
500 Megacity's; Func runs:10000; result:0.11512307692307773
=============================
All score:2.88364

ABCアルゴリズムの興味深い動作は、集団を、極値を積極的に探索する別々の群に分割する能力です。ただし、このアルゴリズムには十分な明確化資質がない可能性があり、それは標準格付け表における位置づけに反映されています。ただし、ハイブリッドアルゴリズムでは、その検索能力を向上させ、利用できる可能性があります。他の最適化手法と統合することで、大域的最適解を求めるアルゴリズムの能力、および様々な最適化問題における全体的な効率を大幅に向上させることができます。

Mind Evolutionary Computation (MEC)

C_AO_MEC:50;10;0.4
=============================
5 Hilly's; Func runs:10000; result:0.5566946043237988
25 Hilly's; Func runs:10000; result:0.430203412538813
500 Hilly's; Func runs:10000; result:0.2724348221662864
=============================
5 Forest's; Func runs:10000; result:0.4548936450507163
25 Forest's; Func runs:10000; result:0.3156014530351309
500 Forest's; Func runs:10000; result:0.17625852850331755
=============================
5 Megacity's; Func runs:10000; result:0.3415384615384615
25 Megacity's; Func runs:10000; result:0.23107692307692304
500 Megacity's; Func runs:10000; result:0.1186615384615393
=============================
All score:2.89736

MECアルゴリズムはそのスピードにおいて驚くべきもので、ほとんどすべての有意な極値を瞬時に検出し、最大値の値域の特定に成功しました。従来のテストに比べると若干の遅れはあるものの、MECは最適解を見つける上で高い安定性と効率性を示し続けています。

カッコウ最適化アルゴリズム(COAm)

C_AO_COAm:100;40;0.6;0.6;0.63
=============================
5 Hilly's; Func runs:10000; result:0.600998666320958
25 Hilly's; Func runs:10000; result:0.42709404776275245
500 Hilly's; Func runs:10000; result:0.26571090745735276
=============================
5 Forest's; Func runs:10000; result:0.5533129896276743
25 Forest's; Func runs:10000; result:0.30413063297063025
500 Forest's; Func runs:10000; result:0.1703031415266755
=============================
5 Megacity's; Func runs:10000; result:0.3261538461538461
25 Megacity's; Func runs:10000; result:0.2046153846153847
500 Megacity's; Func runs:10000; result:0.1112615384615393
=============================
All score:2.96358

この、従来のCOAm評価表における平均的なパフォーマーは、探索空間における驚異的な移動速度を示し、最小値から簡単に抜け出すことができました。しかし、有意な極値で立往生し、最大値に達せないという難点があります。

微小人工免疫系 (Micro-AIS)

C_AO_Micro_AIS:50:1:2:0.3
=============================
5 Hilly's; Func runs:10000; result:0.6193671060348247
25 Hilly's; Func runs:10000; result:0.4656896752001433
500 Hilly's; Func runs:10000; result:0.24995620778886124
=============================
5 Forest's; Func runs:10000; result:0.7121901446084455
25 Forest's; Func runs:10000; result:0.4254191301238518
500 Forest's; Func runs:10000; result:0.211517515004865
=============================
5 Megacity's; Func runs:10000; result:0.2676923076923077
25 Megacity's; Func runs:10000; result:0.16461538461538466
500 Megacity's; Func runs:10000; result:0.10927692307692398
=============================
All score:3.22572

Micro-AISアルゴリズムは、抗原によって形成される非常に均一な雲を識別することができます。これはカオスというよりむしろ調和を思わせる、ある種の秩序をプロセスに与えます。にもかかわらず、アルゴリズムには優れた検索能力があるが、その明確化特性には若干の改善が必要です。しかし、局地的な罠にはまりやすいのも事実です。

ハーモニー検索(HS)

C_AO_HS:50;0.9;0.1;0.2
=============================
5 Hilly's; Func runs:10000; result:0.602082991833691
25 Hilly's; Func runs:10000; result:0.5533985889779909
500 Hilly's; Func runs:10000; result:0.2820448101527182
=============================
5 Forest's; Func runs:10000; result:0.6503798132320532
25 Forest's; Func runs:10000; result:0.5104503170911219
500 Forest's; Func runs:10000; result:0.19337757947865844
=============================
5 Megacity's; Func runs:10000; result:0.30769230769230765
25 Megacity's; Func runs:10000; result:0.29538461538461525
500 Megacity's; Func runs:10000; result:0.12826153846153937
=============================
All score:3.52307

この特別な問題において、HSは大域的な最大値を求めて空間を高速で移動する素晴らしい探索能力を示しました。しかし、最初の有意な極値に遭遇すると、現在のエポック数に依存するため、速度が低下します。だたし、この欠点は離散的なMegacity関数のみに現れ、滑らかなHillyとForest関数ではその検索能力は印象的なままです。評価表では、ハーモニック検索が上位を占め、今回のテストでもその効率の高さを示しています。

螺旋ダイナミクス最適化(SDOm)

C_AO_SDOm:100;0.5;4.0;10000.0
=============================
5 Hilly's; Func runs:10000; result:0.7132463872323508
25 Hilly's; Func runs:10000; result:0.43264564401427485
500 Hilly's; Func runs:10000; result:0.25506574720969816
=============================
5 Forest's; Func runs:10000; result:0.804287574819851
25 Forest's; Func runs:10000; result:0.4249161540200845
500 Forest's; Func runs:10000; result:0.2193817986301354
=============================
5 Megacity's; Func runs:10000; result:0.4938461538461539
25 Megacity's; Func runs:10000; result:0.22030769230769232
500 Megacity's; Func runs:10000; result:0.11410769230769328
=============================
All score:3.67780

SDOmアルゴリズムは突然ランキングのトップに現れました。調和振動子に基づくこのアルゴリズムは、この実験の枠内で非常に珍しくユニークな形で現れ、解明が難しい謎を残しています。ロープに吊るされた振り子玉は、突然離れて自由飛行に入ることができます。アルゴリズムの動作には、それを特別なものにしている多くの側面があり、そのような予期せぬ動作につながる条件を予測することはほとんど不可能です。そのため、現状のままでは幅広い作業にお勧めするのは難しいです。ただし、他のアルゴリズム(たとえば、一部のエージェントを一般集団からSDOmコントロールに移すなど)と組み合わせることで、タスクの周期的パターンを特定することができます。

細菌採餌最適化-遺伝的アルゴリズム(BFO-GA)

C_AO_BFO_GA:50;0.01;0.8;50;10.0
=============================
5 Hilly's; Func runs:10000; result:0.8233662999080027
25 Hilly's; Func runs:10000; result:0.5031148772790799
500 Hilly's; Func runs:10000; result:0.27434497581097494
=============================
5 Forest's; Func runs:10000; result:0.8611314745481611
25 Forest's; Func runs:10000; result:0.45038118646429437
500 Forest's; Func runs:10000; result:0.1806538222176609
=============================
5 Megacity's; Func runs:10000; result:0.3907692307692308
25 Megacity's; Func runs:10000; result:0.272
500 Megacity's; Func runs:10000; result:0.11061538461538559
=============================
All score:3.86638

BFO_GAアルゴリズムは、最大値の領域を素早く検出する驚くべき能力を示しており、いくつかのエージェントは最初の反復の間にすでに目標座標に近づいています。しかし、その結果は離散関数ではあまり印象的ではありません。どうやら、テスト内の限られた反復回数では、大域的最適解を完全に見つけるには不十分なようです。しかし、私たちのテストは、アルゴリズムが意図した目標を達成する能力を評価する、厳格な枠組みの中で設定されていることに注意することが重要です。

確率的拡散探索(SDSm)

C_AO_SDSm:100;100;0.05
=============================
5 Hilly's; Func runs:10000; result:0.6838494804548411
25 Hilly's; Func runs:10000; result:0.6796828568841194
500 Hilly's; Func runs:10000; result:0.32584905164208583
=============================
5 Forest's; Func runs:10000; result:0.6703019775594297
25 Forest's; Func runs:10000; result:0.6398441335988195
500 Forest's; Func runs:10000; result:0.24899123954861618
=============================
5 Megacity's; Func runs:10000; result:0.5307692307692308
25 Megacity's; Func runs:10000; result:0.49446153846153845
500 Megacity's; Func runs:10000; result:0.14973846153846293
=============================
All score:4.42349

SDSmアルゴリズムについて議論するとき、エージェントの座標は環境のランダムに選択されたセクター内で指定されるため、エージェントが探索空間全体に伝播する速度に注目することはまったく適切ではありません。基本的に、これらのエージェントは最初の反復の後、検索フィールド全体に瞬時に分散されます。このユニークなアプローチは驚くべき結果をもたらし、アルゴリズム戦略の効率性を実証しています。

SDSmが他と一線を画しているのは、ランダム性の力を利用する能力であり、探索空間の隅々まで探索されない可能性を高めています。この確率的性質を考慮することで、アルゴリズムは広大な領域を効率的にカバーし、関数表面に関する貴重な情報を明らかにすることができ、問題解決のための真に強力なツールとなります。

2進数遺伝的アルゴリズム(BGA)

C_AO_BGA:50:50:1.0:3:0.001:0.7:3
=============================
5 Hilly's; Func runs:10000; result:1.0
25 Hilly's; Func runs:10000; result:1.0
500 Hilly's; Func runs:10000; result:0.8703352617259978
=============================
5 Forest's; Func runs:10000; result:0.8872607468925364
25 Forest's; Func runs:10000; result:0.8177419261242314
500 Forest's; Func runs:10000; result:0.2603521654104144
=============================
5 Megacity's; Func runs:10000; result:0.7492307692307694
25 Megacity's; Func runs:10000; result:0.5833846153846155
500 Megacity's; Func runs:10000; result:0.24415384615384667
=============================
All score:6.41246

2進数遺伝的アルゴリズム(BGA)には、遺伝子の突然変異によって、追加の反復をすることなく、探索空間のどの領域にも瞬時に到達できるという利点があります。しかし、この特別なテストシナリオでは、BGAが極値に陥ることがあるにもかかわらず、トップに立っています。この点で、SDSmはそのような状況を回避する能力が高いため、望ましいと思われます。

ただし、BGAの欠点を考慮したとしても、全体として最高の結果を残したことは評価されるべきでしょう。この成果は、アルゴリズムの可能性と、検索プロセスにおける研究と利用のバランスをとることの重要性を浮き彫りにしています。比較を深く掘り下げていくと、それぞれのアルゴリズムが独自の長所と短所を持っていることが明らかになります。

まとめると、BGAはこのテストで印象的な結果を示し、トップの座を確保したと言えます。


2.BGAエージェントの改善

この研究を実施するためには、BGAアルゴリズムのコードをこの特定のテストタスク用に変更する必要がありました。探索空間内の任意の位置にエージェントを配置する機能は、ユーザー定義のセットから最適化を開始する必要がある場合に非常に便利です。

BGAでは、問題の解はバイナリコードの形で示されます。したがって、与えられた座標に集団エージェントを配置するには、座標値を実数表現からバイナリ表現(この場合はバイナリグレイコード)に変換する必要があります。

double型の値をgenes配列の遺伝子表現に変換するDoubleToGeneメソッドをエージェントの記述に追加しましょう。このメソッドの主な手順は以下の通りです。

  • 入力された数値が有効な最小値より小さい場合、この関数はゼロの配列(グレイコード表記では実数「0.0」)を作成し、値が有効な範囲内に収まるようにします。
  • 入力された数値が許容される最大値を超えた場合、この関数は、許容される最大値を含む元の配列の値をグレイ符号化でコピーした配列を作成します(この数値は、範囲外の増加があった場合に範囲内に戻る必要がある場合のために保存されます)。
  • 数値が許容範囲内の場合、スケーリングされグレイコードに変換されます。この値は、遺伝子表現で使用するために配列に格納されます。

したがって、DoubleToGeneメソッドは、実数値を遺伝子表現に変換し、対応するgenes配列に書き込みます。この関数は、特定の配列を初期化またはコピーし、実行を早期に終了することによって、入力値が範囲外の場合を処理します。そうでなければ、この関数は値をスケーリングし、整数部分と小数部分をグレイコードに変換し、それらを最終的な遺伝的表現に結合します。

以下は調整されたBGAエージェントコードです。

//——————————————————————————————————————————————————————————————————————————————
struct S_Agent
{
  void Init (const int coords, const double &min [], const double &max [], int doubleDigitsInChromo)
  {
    ArrayResize(c, coords);
    f = -DBL_MAX;

    ArrayResize(genes, coords);
    ArrayResize(chromosome, 0, 1000);

    for(int i = 0; i < coords; i++)
    {
      genes [i].Init(min [i], max [i], doubleDigitsInChromo);
      ArrayCopy(chromosome, genes [i].gene, ArraySize(chromosome), 0, WHOLE_ARRAY);
    }
  }

  void ExtractGenes ()
  {
    uint pos = 0;

    for (int i = 0; i < ArraySize (genes); i++)
    {
      c [i] = genes [i].ToDouble (chromosome, pos);
      pos  += genes [i].length;

    }
  }

  void DoubleToGene (const double val, const int genePos)
  {
    double value = val;

    //--------------------------------------------------------------------------
    if (value < genes [genePos].rangeMin)
    {
      ArrayInitialize(genes [genePos].gene, 0);
      ArrayCopy (chromosome, genes [genePos].gene, genePos * genes [genePos].length, 0, WHOLE_ARRAY);
      return;
    }

    //--------------------------------------------------------------------------
    else
    {
      if (value > genes [genePos].rangeMax)
      {
        ArrayCopy (chromosome, genes [genePos].geneMax, genePos * genes [genePos].length, 0, WHOLE_ARRAY);
        return;
      }
    }

    //--------------------------------------------------------------------------
    value = Scale(value, genes [genePos].rangeMin, genes [genePos].rangeMax, 0.0, genes [genePos].maxCodedDistance);

    DecimalToGray ((ulong)value, genes [genePos].integPart);

    value = value - (int)value;

    value *= genes [genePos].digitsPowered;

    DecimalToGray ((ulong)value, genes [genePos].fractPart);

    ArrayInitialize(genes [genePos].gene, 0);

    uint   integGrayDigits = genes [genePos].integGrayDigits;
    uint   fractGrayDigits = genes [genePos].fractGrayDigits;
    uint   digits = ArraySize (genes [genePos].integPart);

    if (digits > 0) ArrayCopy (genes [genePos].gene, genes [genePos].integPart, integGrayDigits - digits, 0, WHOLE_ARRAY);

    digits = ArraySize (genes [genePos].fractPart);

    if (digits > 0) ArrayCopy (genes [genePos].gene, genes [genePos].fractPart, genes [genePos].length - digits, 0, WHOLE_ARRAY);

    ArrayCopy (chromosome, genes [genePos].gene, genePos * genes [genePos].length, 0, WHOLE_ARRAY);
  }

  void InjectGeneToChromosome ()
  {

  }

  //----------------------------------------------------------------------------
  double Scale (double In, double InMIN, double InMAX, double OutMIN, double OutMAX)
  {
    if (OutMIN == OutMAX) return (OutMIN);
    if (InMIN == InMAX) return (double((OutMIN + OutMAX) / 2.0));
    else
    {
      if (In < InMIN) return OutMIN;
      if (In > InMAX) return OutMAX;

      return (((In - InMIN) * (OutMAX - OutMIN) / (InMAX - InMIN)) + OutMIN);
    }
  }

  double c [];           //coordinates
  double f;              //fitness

  S_BinaryGene genes []; //there are as many genes as there are coordinates
  char chromosome    [];
};
//——————————————————————————————————————————————————————————————————————————————


3.まとめ

母集団アルゴリズムの大規模な比較研究の結果をまとめてみましょう。これは、最小値から抜け出し、あらゆる障害を乗り越えて最大値を達成することを意味します。
まずは、テスト中のアルゴリズムの最も興味深い挙動を視覚化することから始めます。

POES

Megacityの(PO)ES

SDOm

MegacityのSDOm

BFO_GA

MegacityのBFO_GA

SDSm

MegacityのSDSm

BGA

MegacityのBGA

以下は最終的な比較表で、テスト関数に対する各アルゴリズムの働きを詳細に示しています。

表

図1:関連テストに応じたアルゴリズムのカラーグラデーション0.99以上の結果は白で強調表示

チャート

図2:アルゴリズムのテスト結果のヒストグラム(0から100までのスケールで、多ければ多いほど良いです。

ここで、100は理論的に可能な最大の結果であり、アーカイブにはレーティングテーブルを計算するスクリプトが含まれている)

結論として、各アルゴリズムの結論と判断はすべて、実験の枠組みの中だけでなされたものであることを特に強調しておきたいと思います。

母集団最適化アルゴリズムの動作に関する議論と分析全体から、アルゴリズムの成功は、その適用の初期条件に強く依存することが示唆されます。DE、EM、GSA、ACOmのようないくつかの手法では、テスト関数の最小点からの終了を伴うテストは非常に複雑になり、最初の段階で困難になることがあります。同時に、(P+O)ESやESG(当初はランキング上位を占めていたが、アウトサイダーとなった)のような他のアルゴリズムでは、効率が急激に低下しています。逆に、PSO、GWO、SFL、BA、ABCなどのアルゴリズムでは、意図的に初期座標を選択することで、結果を大幅に改善することができます。いくつかのアルゴリズム(BFO-GAとSDOm)は、このアプローチで優れた性能を示し、ランダムな一様エージェント初期化を凌駕しています。

IWO、HS、SDSm、BGAのような他のアルゴリズムは、エージェントの開始位置に関係なく普遍的な安定性を示しています。この特別な実験では、テスト中に成績が悪かったアルゴリズムもありましたが、それでも実験のある時点では素晴らしい能力を発揮していたことが浮き彫りになりました。その中には、プロセスの初期段階でスペースの開拓に成功したものもあれば、後の段階で結果を大幅に改善できたものもあります。各アルゴリズムのこれらのユニークな特徴をうまく組み合わせ、ハイブリッド化することで、それぞれの良い面を強化し、欠点を減らすことができます。最終的には、これがより効率的な最適化手法につながります。

MetaQuotes Ltdによってロシア語から翻訳されました。
元の記事: https://www.mql5.com/ru/articles/14212

添付されたファイル |
多通貨エキスパートアドバイザーの開発(第4回):仮想注文の保留と状況の保存 多通貨エキスパートアドバイザーの開発(第4回):仮想注文の保留と状況の保存
多通貨EAの開発を始めてから、すでに一定の成果を上げ、コードの改良を何度か繰り返すことができました。ただし、EAは保留中注文を扱うことができず、端末の再起動後に動作を再開することができませんでした。これらの機能を追加しましょう。
DoEasy - コントロール(第33部):垂直スクロールバー DoEasy - コントロール(第33部):垂直スクロールバー
この記事では、DoEasyライブラリのグラフィカル要素の開発を続け、フォームオブジェクトコントロールの垂直スクロールを追加し、さらに将来必要となる便利な関数やメソッドを紹介します。
MetaTraderのMultibot(第2回):動的テンプレートの改良 MetaTraderのMultibot(第2回):動的テンプレートの改良
前回の記事のテーマを発展させ、より柔軟で機能的なテンプレートを作成することにしました。このテンプレートは、より大きな機能を持ち、フリーランスとして、また外部ソリューションとの統合機能を備えた多通貨多期間EAを開発するためのベースとして効果的に使用することができます。
ニューラルネットワークが簡単に(第77回):Cross-Covariance Transformer (XCiT) ニューラルネットワークが簡単に(第77回):Cross-Covariance Transformer (XCiT)
モデルでは、しばしば様々なAttentionアルゴリズムを使用します。そして、おそらく最もよく使用するのがTransformerです。Transformerの主な欠点はリソースを必要とすることです。この記事では、品質を損なうことなく計算コストを削減する新しいアルゴリズムについて考察します。