記事「母集団最適化アルゴリズム:社会集団の進化(ESG)」についてのディスカッション

 

新しい記事「母集団最適化アルゴリズム:社会集団の進化(ESG)」はパブリッシュされました:

多母集団アルゴリズムの構成原理を考えます。この種のアルゴリズムの一例として、新しいカスタムアルゴリズムであるESG (Evolution of Social Groups)を見てみましょう。このアルゴリズムの基本概念、母集団相互作用メカニズム、利点を分析し、最適化問題におけるパフォーマンスを検証します。

最適化の分野では、さまざまな問題で最適解を見つけるために設計された幅広い集団アルゴリズムが存在します。しかし、その重要性にもかかわらず、多母集団アルゴリズムやマルチスウォームアルゴリズムは、これまで記事で十分に取り上げられてきませんでした。この点で、私はこの魅力的で有望なトピックについて、より詳細な考察の必要性を感じています。

多母集団アルゴリズムは、複数の独立した母集団を使用して最適化問題を解くという考えに基づいています。集団は論理的に並行して動作し、最適解に関する情報を交換することができるため、パラメータ空間の異なる領域を同時に探索し、異なる最適解を見つけることが可能になります。一方、マルチスウォームアルゴリズムは、最適解を得るために、互いに協力し情報を交換することもできる、相互作用する多数の粒子からなる社会集団(スウォーム)を使用します。

この記事では、この記事のために特別に作成した多母集団ESGアルゴリズムについて考察します。そのようなアルゴリズムの基本原理を見ていきます。さらに、これらのアルゴリズムの有効性を単個体最適化手法と比較して評価できるような比較研究の結果についても検討します。

作者: Andrey Dik

 
34: OPTIMIZATION_METHOD_AO_HS = 1 e-323
33: OPTIMIZATION_METHOD_AO_GSA = 0.11926002964619356
32: OPTIMIZATION_METHOD_AO_ABC = 0.4042085745674859
31: OPTIMIZATION_METHOD_AO_MA = 0.612338549995716
30: OPTIMIZATION_METHOD_AO_BFO = 0.6679763921514072
29: OPTIMIZATION_METHOD_AO_BFO_GA = 0.71308437578657
28: OPTIMIZATION_METHOD_AO_CSS = 0.7316626048819873
27: OPTIMIZATION_METHOD_AO_FSS = 0.7355579934372427
26: OPTIMIZATION_METHOD_AO_GWO = 0.7390576242470235
25: OPTIMIZATION_METHOD_AO_RND = 0.8155449913938271
24: OPTIMIZATION_METHOD_AO_PSO = 0.8222303819859975
23: OPTIMIZATION_METHOD_AO_SC = 0.8340939685401099
22: OPTIMIZATION_METHOD_AO_BA = 0.845763320077643
21: OPTIMIZATION_METHOD_AO_Micro_AIS = 0.8528065344750899
20: OPTIMIZATION_METHOD_AO_SA = 0.8589854552563216
19: OPTIMIZATION_METHOD_AO_SFL = 0.8597046576708655
18: OPTIMIZATION_METHOD_AO_IWDm = 0.862259472275573
17: OPTIMIZATION_METHOD_AO_EM = 0.8779833807818905
16: OPTIMIZATION_METHOD_AO_SDS = 0.9027267066161594
15: OPTIMIZATION_METHOD_AO_NMm = 0.9076903894257041
14: OPTIMIZATION_METHOD_AO_FAm = 0.9111364322206529
13: OPTIMIZATION_METHOD_AO_ESG = 0.9128694208149278
12: OPTIMIZATION_METHOD_AO_SDOm = 0.9182612507465655
11: OPTIMIZATION_METHOD_AO_COAm = 0.9198698363722636
10: OPTIMIZATION_METHOD_AO_IWO = 0.923914294524697
09: OPTIMIZATION_METHOD_AO_SSG = 0.9304990658351672
08: OPTIMIZATION_METHOD_AO_BGA = 0.9389284935189659
07: OPTIMIZATION_METHOD_AO_ACOm = 0.944545536542497
06: OPTIMIZATION_METHOD_AO_DE = 0.9482478998933197
05: OPTIMIZATION_METHOD_AO_POES = 0.9528516011673952
04: OPTIMIZATION_METHOD_AO_SIA = 0.9540996483364099
03: OPTIMIZATION_METHOD_AO_MEC = 0.9574730447145243
02: OPTIMIZATION_METHOD_AO_SDSm = 0.9648638811101882
01: OPTIMIZATION_METHOD_PSO = 0.9653160312454183
00: OPTIMIZATION_METHOD_AO_P_O_ES = 0.9654152361899765
 
34: OPTIMIZATION_METHOD_AO_ABC = 0.42453133581346014
33: OPTIMIZATION_METHOD_AO_IWDm = 0.48360991828383987
32: OPTIMIZATION_METHOD_AO_SIA = 0.49114081735004017
31: OPTIMIZATION_METHOD_AO_EM = 0.49479704987697276
30: OPTIMIZATION_METHOD_AO_RND = 0.5085913649249508
29: OPTIMIZATION_METHOD_AO_MA = 0.5129110822292692
28: OPTIMIZATION_METHOD_AO_HS = 0.5129110822292692
27: OPTIMIZATION_METHOD_AO_CSS = 0.5138134842496185
26: OPTIMIZATION_METHOD_AO_SSG = 0.518468314742929
25: OPTIMIZATION_METHOD_AO_SC = 0.5243709181146918
24: OPTIMIZATION_METHOD_AO_SA = 0.532630712905892
23: OPTIMIZATION_METHOD_AO_FSS = 0.5405996550405998
22: OPTIMIZATION_METHOD_AO_PSO = 0.5430691869913079
21: OPTIMIZATION_METHOD_AO_FAm = 0.5629971666466362
20: OPTIMIZATION_METHOD_AO_BA = 0.5653828707497576
19: OPTIMIZATION_METHOD_AO_BFO = 0.5708620661833331
18: OPTIMIZATION_METHOD_AO_IWO = 0.5736967768562664
17: OPTIMIZATION_METHOD_AO_NMm = 0.5818790406200212
16: OPTIMIZATION_METHOD_AO_ESG = 0.5945790493029925
15: OPTIMIZATION_METHOD_AO_GWO = 0.6234871646160723
14: OPTIMIZATION_METHOD_PSO = 0.6256882439878475
13: OPTIMIZATION_METHOD_AO_GSA = 0.6735183680285166
12: OPTIMIZATION_METHOD_AO_SFL = 0.6885524892005978
11: OPTIMIZATION_METHOD_AO_DE = 0.7092034045816206
10: OPTIMIZATION_METHOD_AO_COAm = 0.7263185318109061
09: OPTIMIZATION_METHOD_AO_SDS = 0.7686064552778226
08: OPTIMIZATION_METHOD_AO_Micro_AIS = 0.7722431882203732
07: OPTIMIZATION_METHOD_AO_SDOm = 0.7808430850753312
06: OPTIMIZATION_METHOD_AO_MEC = 0.7816647439743983
05: OPTIMIZATION_METHOD_AO_ACOm = 0.7830252357918316
04: OPTIMIZATION_METHOD_AO_POES = 0.8453008986622238
03: OPTIMIZATION_METHOD_AO_P_O_ES = 0.8523920887258357
02: OPTIMIZATION_METHOD_AO_SDSm = 0.9046058644799349
01: OPTIMIZATION_METHOD_AO_BGA = 0.9856063511804057
00: OPTIMIZATION_METHOD_AO_BFO_GA = 0.9880292622094636
 
fxsaber #:

ffは何回、テストは何回実施されたのか、これは平均値か?
 
Andrey Dik #:

ffは何回、テストは何回実施されたのか、これは平均値か?

なぜ最高値ではなく平均値を取るのですか?

    aveResult += AO.fB;
  }

  aveResult /=(double)NumberRepetTest_P;
 
fxsaber #:

なぜ最高ではなく平均を取るのか?

最大の結果が保証されていないからだ。確率的探索では結果は保証されません。

あるテスト数の平均結果を見積もることができるだけで、この記事では10回のテストを行っている。もちろん、テストの回数をもっと増やすことは可能で、たとえば100回以上にすることもできるが、測定精度が急速に低下するため、意味がなくなる。要するに、10回がベストで、以前は5回で十分だった。

そして、アルゴリズムによっては、収束のばらつきが非常に大きいものがあります。 これは、最適化アルゴリズムの非常に重要な特性である結果の再現性であり、アルゴリズムの確率モデルの安定性を特徴づけるもの です(もちろん、決定論的探索戦略について話しているのでなければ、結果は常に同じになりますが、原則として、そのようなアルゴリズムは収束性が低いです)。

一般に、確率的な探索戦略を基本とするアルゴリズムを十分に比較するためには、少なくとも10回のテストが必要である。

非常に大雑把に例えれば、干し草の山に槍を突き刺して、藁の山からリンゴを見つけるのと、干し草の山に槍を突き刺して、藁の山からリンゴを見つけるのとでは、どちらの戦略が効果的だろうか。この比較は、いくつかのテストにおいてのみ可能である。そうでなければ、積み重ねられた藁の真ん中の一番上から厳密に突けば、槍でリンゴを最初に打つ確率はゼロではないし、これがそのような戦略の当然の結果であると考えるのは間違いである。

その上、攻略法はまったく純粋な形で与えられており、限られた回数のFFの実行のために、重複のスクリーニングやその他の探索加速のテクニックを適用することによって曇らされていない、攻略法の霊薬とも言えるものである。新しい重複セットはそれぞれ1回の実行を無駄にするので、この純粋な形のアルゴリズムは比較が非常に簡単である。

探索空間が小さい場合、重複排除は非常に大きな違いをもたらし、非常に弱いアルゴリズムでも良い結果を示すことができる。しかし、探索空間が大きくなるにつれて、重複排除が無意味になる速度が速くなり、探索戦略の能力の差が明らかになる。

この投稿で私の言いたいことをうまく伝えられなかったかもしれない。説明するのが非常に難しいこともあるのだ、残念ながら。

 
Andrey Dik #:

いくつかのテストにおける平均的な結果を推定することは可能である。

大域的な最大値を探索するために、"繰り返し回数 "という入力パラメータを持つことは論理的だと思います。例えば、我々は標準のテスターでTSを最適化します。ローカルな極値で行き詰まる確率を減らすために、オプティマイザを何回か連続して実行することが論理的であることがあります。確かに、計算速度は対応する回数分低下しますが、大域的なピークにヒットする確率は高くなります。
 
fxsaber #:
私は、グローバルな最大値を検索するために、入力パラメータ「繰り返し回数」を持つことが論理的であると考えています。


34: OPTIMIZATION_METHOD_AO_HS = -1.7976931348623157 e+308
33: OPTIMIZATION_METHOD_AO_CSS = 0.49720358822818334
32: OPTIMIZATION_METHOD_AO_FSS = 0.5126268634117646
31: OPTIMIZATION_METHOD_AO_MA = 0.5456638212207142
30: OPTIMIZATION_METHOD_AO_SC = 0.5493573778417595
29: OPTIMIZATION_METHOD_AO_SFL = 0.5586288936731915
28: OPTIMIZATION_METHOD_AO_EM = 0.5622069376759021
27: OPTIMIZATION_METHOD_AO_BFO = 0.572272929264936
26: OPTIMIZATION_METHOD_AO_GWO = 0.576823172558009
25: OPTIMIZATION_METHOD_AO_BA = 0.5780620208551676
24: OPTIMIZATION_METHOD_AO_COAm = 0.6122501636921197
23: OPTIMIZATION_METHOD_AO_FAm = 0.6140389813209256
22: OPTIMIZATION_METHOD_AO_IWO = 0.668152749061326
21: OPTIMIZATION_METHOD_AO_RND = 0.6708834560036839
20: OPTIMIZATION_METHOD_AO_SDSm = 0.6949312990837662
19: OPTIMIZATION_METHOD_AO_ESG = 0.6998001260367949
18: OPTIMIZATION_METHOD_AO_DE = 0.7011196053256343
17: OPTIMIZATION_METHOD_AO_IWDm = 0.7021399692041209
16: OPTIMIZATION_METHOD_AO_GSA = 0.7220579685405103
15: OPTIMIZATION_METHOD_AO_PSO = 0.749441828773945
14: OPTIMIZATION_METHOD_AO_SA = 0.7682447940796119
13: OPTIMIZATION_METHOD_AO_MEC = 0.7861990306904714
12: OPTIMIZATION_METHOD_AO_ABC = 0.7907454297118246
11: OPTIMIZATION_METHOD_AO_SDS = 0.8196051951016118
10: OPTIMIZATION_METHOD_AO_SIA = 0.8221393904152611
09: OPTIMIZATION_METHOD_AO_SDOm = 0.8473736964247897
08: OPTIMIZATION_METHOD_PSO = 0.8554905139189528
07: OPTIMIZATION_METHOD_AO_BFO_GA = 0.9302287492114422
06: OPTIMIZATION_METHOD_AO_SSG = 0.9508929176886642
05: OPTIMIZATION_METHOD_AO_Micro_AIS = 0.9744230924005981
04: OPTIMIZATION_METHOD_AO_BGA = 0.9758026556865227
03: OPTIMIZATION_METHOD_AO_ACOm = 0.9842635986445009
02: OPTIMIZATION_METHOD_AO_P_O_ES = 0.9862393247408759
01: OPTIMIZATION_METHOD_AO_POES = 0.9939584765415376
00: OPTIMIZATION_METHOD_AO_NMm = 0.9992316949848764
inAmountCycles = 1000, inRepeats = 5

Repeats- アルゴリズムの独立した呼び出し回数。

AmountCycles- 各試行におけるFF呼び出し回数(Repeatsを 参照)。

各アルゴリズムについて、最良の結果が出力される(Repeats 参照)。

 
  MathSrand ((int)GetMicrosecondCount ()); // ジェネレーターのリセット

私ならこうする。

Sleep(1); // ランダムな GetMicrosecondCount ().
MathSrand ((int)TimeLocal() + (int)GetMicrosecondCount ()); // ジェネレーターのリセット

そうしないと、スクリプトを実行するたびに繰り返される。

 
fxsaber #:
グローバルな最大値を検索するために、「繰り返し回数」という入力パラメータを持つことは論理的だと思います。例えば、標準のテスターでTSを最適化します。時には、局所的極値で立ち往生する確率を減らすために、オプティマイザを何回か連続して実行することが論理的です。確かに計算速度は対応する回数分低下しますが、大域的なピークに達する確率は高くなります。
fxsaber#:


Repeats- アルゴリズムの独立した呼び出し回数。

AmountCycles- 各試行におけるFF呼び出し回数(Repeatsを 参照)。

各アルゴリズムの最良の結果が表示されます(Repeats 参照)。

そうです、グローバルが見つかる確率を上げるには、他のすべての条件が同じであれば、テストの回数を増やし、見つかった最適解を使用すればよいのです。RNDアルゴリズムでさえ、このアプローチで必要なものが見つかる可能性はゼロではありません。

しかし、上で説明したように、アルゴリズム同士を比較できるのは平均的な結果だけです。

 
fxsaber #:

私ならこうする。

そうしないと、スクリプトを実行するたびに繰り返される。

GetMicrosecondCountの値が繰り返し実行されたときに、頑張って値を繰り返せるかどうかは疑問だ。もちろん、個々のテストがマイクロ秒より長ければの話だが。