SWARM STUDIESINTERACTIVE ALGORITHM SERIES
外部通信なし · SINGLE HTML
EXPERIMENT 24 / PARTICLE SWARM OPTIMIZATION

粒子群最適化

PSO

自分の記憶と、群れの発見。そのふたつを手掛かりに、よりよい解を探す。

反復回数 ITERATION
000/ 250
評価回数 64
群れの最良評価値 BEST f(x,y)
x — / y —
群れの広がり SPREAD
%
重心からのRMS距離 / 領域の対角長
粒子数 PARTICLES
64
2次元 · 全粒子で最良点を共有

探索空間

2D / MINIMIZE
探索中
粒子の状態は下の数値欄でも確認できます。
SPHEREf(x,y) = x² + y²
粒子をクリックして観察
粒子群れの最良点個体の最良点真の最小点明るい領域ほど評価値が小さい
Space再生 Nコマ送り

収束の記録

LOG SCALE
過去最良現在の平均

単純な3つのルールから、探索が生まれる。

v′ = w·v + c₁r₁(pBest − x) +

01 / 慣性今の動きを残す

直前の速度を引き継ぎます。強くすると広く動き続け、弱くすると速度が減衰します。

02 / 個体の記憶自分の発見に戻る

これまで自分が訪れた中で、最も評価のよかった位置を記憶し、探索の手掛かりにします。

よい発見を共有する

全粒子が発見した最良位置を参照します。集まりすぎると、局所解に停滞する場合もあります。

粒子群最適化の見方

ひとつの粒子が、ひとつの候補解 (x, y) です。各位置で関数を評価し、値が小さくなる場所を探します。粒子は正解の座標も関数の勾配も使わず、過去の評価結果を使います。

まず試すこと

  1. 「一時停止」→「1ステップ」で、粒子の位置と最良記録を観察します。
  2. 粒子をクリックするか、「観察する粒子」で選択します。橙の点線は個体の最良点、黄緑の点線は群れの最良点への参照です。
  3. 「群れの情報 c₂」を 0 にしてリセットすると、情報を共有しない探索を比較できます。
  4. Rastrigin に切り替えると、複数の局所解を持つ関数での振る舞いを観察できます。

計算モデル

vᵢ,d(t+1) = w vᵢ,d(t)
 + c₁ r₁ (pBestᵢ,d − xᵢ,d(t))
 + c₂ r₂ (gBest_d − xᵢ,d(t))
xᵢ,d(t+1) = xᵢ,d(t) + vᵢ,d(t+1)

r₁ と r₂ は、粒子・次元・反復ごとに独立して生成する [0, 1) の擬似乱数です。1反復の開始時点の gBest を全粒子が参照する同期更新です。各軸の速度を探索幅の12%で制限し、境界で反射して速度を半減させます。

表示と記録

アニメーションは反復間の位置を滑らかに補間します。関数の評価は離散的な反復位置でのみ行います。背景は対数圧縮した評価値と等高線です。収束グラフの縦軸は対数目盛で、0 および 10⁻¹² 未満は表示上 10⁻¹² に揃えます。カードとCSVは実際の計算値を保持します。

「群れの広がり」は、粒子の重心からの二乗平均平方根距離を、探索領域の対角長で割った値です。小さいことは、最適解の発見を意味しません。「最適値付近」の判定は、既知の最小値0に対して最良評価値が10⁻⁶以下かどうかで行い、表示にだけ使用します。

関数と探索範囲

すべて最小値は0。描画範囲と計算の境界は同じです。背景の輝度は関数ごとに正規化されるので、異なる関数間で同じ明るさが同じ評価値を意味するわけではありません。

再現性と操作

リセットは同じシードで初期化します。同じ関数・粒子数・係数・操作履歴なら同じ計算結果になります。再生速度と表示設定は計算結果を変えません。プリセットと係数の変更は途中から反映され、関数と粒子数の変更は再初期化します。CSVには各反復の係数、粒子数、シード、最良値、平均値、広がりを記録します。

Space 再生/停止 N 1ステップ R リセット Esc 説明を閉じる

参考資料

更新式:PySwarms 公式ドキュメント(global-best PSO)
テスト関数:Simon Fraser University — Optimization Test Functions
このHTMLは独自のJavaScript実装です。参考リンクを開かない限り外部通信は行いません。