🎓 レベル:標準 | 重要度:B(標準)
要点(BLUF)
- 粒子群最適化(PSO)は 粒子の群れが探索空間を飛び回り、互いの情報を共有して最適へ向かう。
- 各粒子の速度は 自己最良(pbest) と 群全体最良(gbest) への引力で更新される。
- 連続空間の多峰関数に強く、勾配不要・実装が簡単。GA(遺伝的アルゴリズム)と並ぶ群知能の代表。
概念 ── 群れの知恵
鳥の群れや魚の群れは、個々が単純なルール(隣に合わせる・餌へ向かう)で動くだけで、群全体として賢く餌場へ向かう。この 群知能(swarm intelligence) を最適化にしたのが PSO(Kennedy & Eberhart)。
各「粒子」は探索空間の1点(候補解)で、速度を持って飛ぶ。粒子は2つの記憶に引かれる:
- pbest:その粒子がこれまで見つけた最良位置(個人の経験)。
- gbest:群全体がこれまで見つけた最良位置(集団の知恵)。
更新式
粒子 の位置 と速度 を毎反復こう更新する:
- :慣性(前の速度をどれだけ保つか)。大きいと探索的、小さいと収束的。
- :認知項(自己最良への引力)、:社会項(群最良への引力)。
- : の乱数(ランダム性で多様な探索)。
慣性で飛び続けながら、自分の成功と群の成功の 両方に引かれて最適へ収束していく。
graph LR A["各粒子: 位置と速度"] --> B["速度更新 = 慣性 + 自己最良への引力 + 群最良への引力"] B --> C["位置更新 x <- x + v"] C --> D["pbest(自己最良)・gbest(群最良) を更新"] D --> B
Pythonで2次元Rastriganを解く
Rastrigin 関数 は局所最適だらけの多峰関数で、大域最適は原点 。山登りはまず捕まる地形を、PSO で攻める。
import numpy as np
def rastrigin(p):
return 10*len(p) + sum(pi**2 - 10*np.cos(2*np.pi*pi) for pi in p)
def pso(seed=0, n_particles=40, iters=200):
rng = np.random.default_rng(seed)
X = rng.uniform(-5.12, 5.12, (n_particles, 2)) # 粒子の初期位置
V = rng.uniform(-1, 1, (n_particles, 2)) # 初期速度
pbest = X.copy()
pbest_f = np.array([rastrigin(x) for x in X])
g = pbest[pbest_f.argmin()].copy() # 群全体の最良
gf = pbest_f.min()
w, c1, c2 = 0.7, 1.5, 1.5
for it in range(iters):
r1, r2 = rng.random((n_particles, 2)), rng.random((n_particles, 2))
V = w*V + c1*r1*(pbest - X) + c2*r2*(g - X) # 速度更新
X = np.clip(X + V, -5.12, 5.12) # 位置更新(範囲内に制限)
fx = np.array([rastrigin(x) for x in X])
improved = fx < pbest_f
pbest[improved] = X[improved]; pbest_f[improved] = fx[improved]
if pbest_f.min() < gf:
gf = pbest_f.min(); g = pbest[pbest_f.argmin()].copy()
return g, gf
g, gf = pso()
print(f"PSO最良 x=({g[0]:+.4f}, {g[1]:+.4f}), f={gf:.6f}")
print(f"理論最小: (0, 0), f=0")
実行結果:
PSO最良 x=(-0.0000, +0.0000), f=0.000000
理論最小: (0, 0), f=0
局所最適が無数にある Rastrigin で、PSO は 大域最適 ()にほぼ完全到達。粒子たちが互いの発見(gbest)を共有しながら飛ぶことで、罠を抜けて谷底に集まった。山登り(局所探索と近傍)なら最初の局所最適で止まる地形を、群知能が攻略する。
数式の直観的意味
PSO の更新式は「慣性で直進しつつ、2つの記憶へ向かう」物理的な運動。慣性項 が探索の継続(行きすぎ=広域探索)を、引力項が収束(pbest・gbest への集結)を担う ── この2つのバランスが、SA の温度(焼きなまし法)や GA の突然変異率(遺伝的アルゴリズム)と同じ「探索 vs 活用」のつまみ。GA との違いは、GA が 解を組み替える(交叉) のに対し、PSO は 解を連続的に動かす(速度) こと。だから PSO は連続最適化に自然で、勾配法(無制約最適化)に似た「方向を持った移動」をするが、勾配を使わず群の情報で方向を決める。社会項 が「みんなが見つけた良い場所」へ引き寄せる協調こそ群知能の本質で、アリコロニー最適化(フェロモンで経路を共有)も同じ「間接的な情報共有」の発想。
⚠️ よくある誤解・落とし穴
- PSO も最適性保証は無い:パラメータ(・粒子数)次第で局所最適に早期収束することも。
- 慣性 の調整が肝:大きすぎると発散、小さすぎると早期収束。反復とともに減らす(慣性減衰)のが定番。
- 境界処理が必要:粒子が探索範囲を飛び出さないようクリップ・反射などで抑える。
- 高次元・離散問題では工夫が要る(連続前提なので、離散版は別エンコーディング)。
関連ノート
- 前提:遺伝的アルゴリズム・局所探索と近傍
- 勾配を使う対照:無制約最適化
- 確率的脱出:焼きなまし法
- 非凸の背景:局所最適と大域最適・凸性の役割
- 章のハブ:メタヒューリスティクス 章目次