粒子群最適化(PSO)

粒子群最適化(PSO:Particle Swarm Optimisation)は、群の動きと知性に基づいた母集団ベースの確率論的進化を計算する技法です。グローバル検索アルゴリズムであるこの技法は、一定の状況下では、遺伝的アルゴリズム(GA)のような他の最適化方法よりも優れた性能を発揮してきました。

PSOは、PSOを導く類推を通じて理解することができます。草原のミツバチの群れを考えます。彼らの目標は、草原の中で最も花の密度が高い場所を見つけることです。草原に関する先験的な知識を持たないミツバチは、ランダムな場所をランダムな速度と方向で花を探して飛び始めます。それぞれのミツバチは自身が最も多くの花を見つけた場所を記憶できると共に、他のミツバチのそれぞれが多くの花を見つけた場所を把握します。

その結果、それぞれのミツバチは、自身の経験(ローカルベストであるpbest)とこれまでに見つかった既知の最良の場所(グローバルベストであるgbest)に基づいて、自身の記憶または他のミツバチから得た情報のどちらを優先して判断するかに応じて、これらの2地点の間で自身の飛行経路(場所、速度、方向)を調整します。それぞれのミツバチが飛行を終えると、新たに収集した情報を群の他のミツバチに伝達し、他のミツバチはその情報に基づいて自身が飛行する場所、速度、方向を調整します。

その過程で、これまでに見つけた場所よりも多くの花が密集している場所を見つけるミツバチが出てくる可能性があります。そのミツバチは、この新しい場所に引きつけられると共に、群全体のミツバチが見つけた場所の中で最も花が多い場所にも引きつけられます。場合によっては、1匹のミツバチが、これまでに群のどのミツバチが見つけた場所よりも多くの花が咲いている場所の上を飛行する可能性があります。その場合は、ミツバチそれぞれが自身で最も多くの花を見つけた場所のほか、この1匹のミツバチが見つけた場所にも群全体のミツバチが引き寄せられます。このようにして、ミツバチは野原を探索しながら、花の密集度が高い場所の上を飛行し、それらの場所に引きつけられて戻っていきます。最終的に、ミツバチは飛行を繰り返して、野原全体で最も花が密集している1つの場所に到達します。

母集団の規模と反復計算の回数

デフォルトの群(母集団)の規模は20、反復計算の回数は50にそれぞれ設定されているので、Fekoソルバーのデフォルトの最大許容実行回数は1000となります。群の規模が小さすぎると、検索アルゴリズムはパラメータ空間を適切に調査できませんが、群の規模が大きいと、計算に長時間を要することになります。GAと比べると、PSO技法では、母集団の規模が小さい方が短時間で解が収束する傾向にあります。

ソルバーの最大実行回数(C)をユーザー側で指定した場合、その値は母集団の規模(A)と反復計算の回数(B)に変換されますが、条件A*B Cが成立している必要があります。A はパラメータ数(Np)の関数として、内部的な上限値以下の範囲で選択されます。また、Bには5である値を選択する必要があります。

エラー処理と終了

次のいずれかの場合は、PSOが自然に終了します:
  • Fekoソルバーの最大実行回数に達したとき
  • 群の最良の位置どうしの標準偏差が十分に小さくなったとき
  • 最適化目標に達したとき

CADFEKOバッチメッシングツールまたはPREFEKOでの再評価とメッシングで、パラメータの特定の組み合わせを処理していて発生した障害は、適切なエラーメッセージが.logファイルに書き込まれることによって処理されます。つづいて、障害の原因となったパラメータを置き換える新しいパラメータの組み合わせが計算されます。連続して失敗したパラメータの組み合わせが多すぎると、そのことを通知するメッセージが発行されて、最適化が終了します。その場合は、最適化の.logファイルを参照して、詳細情報を確認します。

この技法の特性上、これらのパラメータはパラメータ空間に定義された境界の範囲に自然に収まる値となります。

PSO法のテキストログ

最適化では、OPTFEKOによって最適化プロセスのテキストログがプロジェクトの.logファイルに保持されます。このファイルの構造は主に最適化手法によって決まります。

セクション1:最適化設定に関する一般情報。
=========================  L O G - FILE - OPTFEKO  =========================

Version: 13.22 of 2007-05-08
Date: 2007-06-06 16:32:51
File: test

OPTIMISATION WITH Feko

=============== Optimisation variables ===============

No.  Name                                  Beg.value          Minimum          Maximum
  1 zf0                              2.000000000e+00  1.000000000e+00  1.000000000e+01



=============== Optimisation goals ===============

No.  Name                            Expression
  1 search1.goals.farfieldgoal1     farfieldgoal1
セクション2
=============== Optimisation method: PSO ===============

Maximum number of iterations:                       3
Population size:                                    1
Acceleration constant 1:              2.800000000e+00
Acceleration constant 2:              1.300000000e+00
Termination at standard deviation:    1.000000000e-04
Pseudorandom number generator seed:                 1
セクション3
=============== PSO: Intermediate results ===============

 No.  zf0              search1.goals.f  global goal      local best aim   global best aim
   1  2.000000000e+00  2.267123373e-01  7.732876627e-01  7.732876627e-01  7.732876627e-01
   2  2.000000000e+00  2.267123373e-01  7.732876627e-01
   3  2.000000000e+00  2.267123373e-01  7.732876627e-01
セクション4
=============== PSO: Finished ===============

Optimisation finished (Maximum number of analyses reached: 3)

Optimum found for these parameters:
  zf0                            =   2.000000000e+00

Optimum aim function value (at no. 1):   7.732876627e-01
No. of the last analysis: 3

Sensitivity of optimum value with respect to each optimisation parameter,
i.e. the gradient of the aim function at 1% variation from the optimum:
Parameter                          Sensitivity
  zf0                              8.344260771e-01