粒子群最適化

粒子群最適化(りゅうしぐんさいてきか、Particle Swarm OptimizationPSO)とは、群知能の一種。 昆虫の大群や魚群において、一匹がよさそうな経路を発見すると(すなわち、食料を発見したとか安全であるという場合)、群れの残りはどこにいても素早くそれに倣うことができる。

これは多次元空間において位置と速度を持つ粒子群でモデル化される。これらの粒子はハイパー空間を飛びまわり、最善な位置を探す。位置の評価は適応度関数で行う。群れのメンバーは良い位置について情報交換し、それに基づいて自身の位置と速度を調整する。このコミュニケーションは主に次の二種類の方法でなされる。

  • 最も良い位置にいる粒子が全体に通知される。
  • ローカルなベストの位置にいる粒子が近傍の粒子群に通知される。

位置と速度の更新は以下の式で行われ、これが繰り返される。

  • x x + v {\displaystyle x\leftarrow x+v}
  • v w v + c 1 r 1 ( x ^ x ) + c 2 r 2 ( x ^ g x ) {\displaystyle v\leftarrow wv+c_{1}r_{1}({\hat {x}}-x)+c_{2}r_{2}({\hat {x}}_{g}-x)}
    • w {\displaystyle w} は、慣性定数。多くの場合 1 より若干小さい値が最適である。
    • c 1 {\displaystyle c_{1}} c 2 {\displaystyle c_{2}} は群のうちで良い位置に向かう粒子の割合。1 に近い値が多くの場合最適である。
    • r 1 {\displaystyle r_{1}} r 2 {\displaystyle r_{2}} [ 0 , 1 ] {\displaystyle [0,1]} の範囲の値をとる乱数。
    • x ^ {\displaystyle {\hat {x}}} は、その粒子がこれまでに発見したベストな位置
    • x ^ g {\displaystyle {\hat {x}}_{g}} は群全体としてこれまでに発見したベストな位置。これをローカルなベスト x ^ l {\displaystyle {\hat {x}}_{l}} にすれば、上記の後者の方法(近傍への通知)になる。

アルゴリズム

  • 各粒子について x {\displaystyle x} v {\displaystyle v} をランダムに初期化。値の範囲は問題の設定に依存する。
  • x ^ {\displaystyle {\hat {x}}} を現在位置に初期化。
  • x ^ g {\displaystyle {\hat {x}}_{g}} を群全体で最も良い適応度を持つ粒子の位置に初期化。
  • x ^ g {\displaystyle {\hat {x}}_{g}} での適応度がしきい値より小さく、かつループ回数が事前に設定した回数に達していないうちは、以下を繰り返し実行する。
    • 各粒子について、以下を実行する。
      • 上述の式に従って x {\displaystyle x} を更新する。
      • 新たな位置での適応度を計算する。
      • x ^ {\displaystyle {\hat {x}}} での適応度よりも良い値が得られたら、 x ^ {\displaystyle {\hat {x}}} を置き換える。
      • x ^ g {\displaystyle {\hat {x}}_{g}} での適応度よりも良い値が得られたら、 x ^ g {\displaystyle {\hat {x}}_{g}} を置き換える。
      • 上述の式に従って v {\displaystyle v} を更新する。

関連項目

外部リンク

いずれも英文

  • Particle Swarm Central
  • JSwarm-PSO 粒子群最適化パッケージ
  • Simple introduction to PSO with link to Java source code
  • PSOのソースコードへのリンク集
  • CILib - GPL化された計算知能シミュレーションおよび研究環境。Javaで書かれていて、PSOの実装例も多く含む。
  • Particle swarm optimization (英語) - スカラーペディア百科事典「粒子群最適化」の項目。