Swarm Intelligence · Particle Swarm Optimization (Kennedy & Eberhart 1995)

群れが答えを見つけるParticle Swarm Optimization

鳥や魚の群れの動きから発想された、シンプルで強力な最適化の手法があります。 たくさんの「解の候補」を空間にばらまき、それぞれが 自分の記憶仲間の情報を頼りに動くと、 群れ全体が自然と関数の谷底(最適解)へ集まっていく——それが Particle Swarm Optimization(粒子群最適化)です。 まず下のビューアで、群れが谷へ降りていく様子を眺めてから、 その裏にあるたった3つの力と、探索と活用のバランスを紐解きます。

まず、さわってみる ↓
Section 1

まず、さわってみる

群れが谷底(最適解)へ降りていく様子を眺めてみよう

カラフルな地形は、ある関数の「風景(ランドスケープ)」です。 低い(青い)ところほど値が小さく=良い、高い(赤い)ところほど値が大きく=悪い。 光る粒たちが群れ(解の候補)です。 開始を押すと、群れがころころと谷底=最適解へ集まっていきます。 左のパネルで目的関数や各スライダーを変え、動きがどう変わるか試してみてください (理屈は次のセクションから説明します)。

「開始」を押すと群れが動き出します。

反復: 0 全体ベスト値:

収束:反復ごとの「全体ベスト値」(対数スケール)

画面に出てくる色や記号の意味は、次のとおりです。

Section 2

「粒子」とは何か — 鳥ではなく「解の候補」

ここがいちばん誤解されるポイント

PSO でいう粒子(パーティクル)は、鳥や魚のような「まわりを見て動くエージェント」ではありません。 1個の粒子は、問題の「解の候補」そのもの — たとえば探索空間の中の1点 (x, y) です。 群れは、ある目的関数 f(x, y) の値がいちばん小さくなる点(最適解)を、皆で手分けして探しています。

ビューアの地形は、その目的関数 f を風景として立体化したものです。 高さ=関数の値で、低い谷ほど値が小さく=良い解。 各粒子は「いまの当てずっぽうの答え」であり、地形の上をさまよいながら、 より低い場所(より良い答え)を探します。1匹1匹はバカでも、 群れとして情報を共有することで、賢く谷を見つけていく——これが群知能(swarm intelligence)です。

Section 3

3つの力 — 群れを動かす更新式

慣性・自分の記憶・仲間の知恵、その足し算だけ

各粒子は毎ステップ、自分の速度 v を3つの力の足し算で更新し、その速度ぶんだけ位置 x を動かします。 たったこれだけです。

v ← w·v + c1·r1·(pBest − x) + c2·r2·(gBest − x) ; x ← x + v
  • 慣性 w·vいまの向きを保つ力。大きいほど勢いよく進み、遠くまで探索する。
  • 個人的引力 c1·(pBest − x)自分がこれまで見つけた最良地点へ引き戻す力(pBest=オレンジの菱形)。
  • 社会的引力 c2·(gBest − x)群れ全体の最良地点へ引き寄せる力(gBest=金色のマーカー)。ここで情報が共有される。

r1, r2 は毎回ふり直すサイコロ(0〜1の乱数)です。これが入ることで、 同じ状況でも粒子ごとに引っぱられ方が少しずつ揺らぎ、群れが単調に一点へ潰れず、 あちこちをばらけて探索できます。 ビューアで粒子をクリックして選択すると、その粒子にかかる3つの力が 速度自分の最良へ全体の最良への矢印で表示されます。 c1・c2 のスライダーを動かして、矢印の長さ(引力の強さ)がどう変わるか見てください。

Section 4

探索と活用のバランス

広く探すか、良い所を深掘りするか

最適化のいちばんの難しさは、探索(exploration)活用(exploitation)の綱引きです。 広くさまよえば本物の谷(大域最適)を見つけやすいが遅い。 見つけた良い所へ急いで集まれば速いが、近くの浅い谷(局所最適)で満足して止まってしまう危険がある。 PSO では、このバランスを3つのパラメータで調整します。

  • 慣性 w が大きい → 勢いで遠くまで動く=探索的。小さいと早く落ち着く=活用的
  • 社会的引力 c2 が強い → gBest へ一気に収束=速いが、局所最適に群れごとハマりやすい
  • 粒子の数が多い → 探索の網が広がり、良い谷を見つけやすくなる。

目的関数を切り替えると、難しさの違いが体感できます。 Sphere は谷がひとつだけの素直なお椀(簡単)。 Rastrigin浅い谷が無数に並ぶ凸凹で、探索が足りないと群れが手前の浅い谷にハマります。 Rosenbrock細く曲がった谷(バナナ谷)で、谷に入っても底までたどるのが難しい。 右下の収束グラフは、反復ごとの全体ベスト値の下がり方です。 途中で横ばい(プラトー)になったら、群れが行き詰まったサインです。

Section 5

建築・デザインでの意味

「微分できない問題」を、群れで探る

PSO はメタヒューリスティクスと呼ばれる最適化手法の一種で、最大の強みは 目的関数の中身(数式や微分)を知らなくても使えること。 必要なのは「ある案 x を評価して、良し悪しの数値 f(x) を返す」ことだけ。 だから、構造解析・日射/採光シミュレーション・エネルギー計算・コスト評価など、 シミュレーションでしか良し悪しが測れない「ぐちゃぐちゃな設計目標」にそのまま使えます。

建築・デザインの文脈では、形態最適化(フォルムファインディング)、部材寸法の最適化、 平面・配置計画、環境性能の最適化、モデルのキャリブレーションなどに応用されています。 Grasshopper の Galapagos をはじめとする「進化的ソルバー」もこの仲間で、 PSO はその代表的なアルゴリズムのひとつです。

観点勾配法(微分を使う)PSO(群れで探す)
必要なもの関数の式・微分(勾配)評価値 f(x) だけ(ブラックボックス可)
探し方坂を下る方向へ一直線群れで広くばらけて探索
局所最適近くの谷にハマりやすい大域的に抜け出しやすい
速度・保証速いが最適の保証は局所的遅めで最適の保証はないが頑健
向く問題滑らかで微分できる問題凸凹・不連続・シミュレーション評価
Section 6

考えてみよう

仕組みの「なぜ」に、原理で答えられるか

Q1. PSO も鳥の群れみたいに見える。BOIDS と何が違う?

目的が正反対です。BOIDSは分離・整列・結合という近所ルールで 「群れらしい動き」そのものを再現するのがゴール。 PSOは粒子を「解の候補」とし、目的関数 f(x) の 最適解を探すのがゴールです。似た見た目でも、片方はアニメーション、片方は最適化の道具です。

Q2. 更新式の r1, r2(乱数)は何のためにある? なくてもいいのでは?

乱数がないと、同じ位置関係の粒子はまったく同じ動きをして、群れが単調に一点へ潰れてしまいます。 r1, r2 が引力を毎回ゆらがせることで、粒子ごとに探し方がばらけ、 探索の多様性が生まれます。これが局所最適から抜け出す余地を与えます。

Q3. 群れが浅い谷(局所最適)にハマって動かない。どのパラメータをどういじる?

探索を強める方向へ振ります。慣性 w を上げて勢いで谷から出やすくし、 社会的引力 c2 を下げてgBest への一極集中を緩め、粒子数を増やして網を広げます。 ビューアの Rastrigin で試すと効果がよく分かります(Section 4)。

Q4. 普通の勾配法(坂を下る)と、PSO はどう使い分ける?

関数が滑らかで微分できるなら、勾配法のほうが速く正確です。 一方、微分できない・不連続・シミュレーションでしか評価できない・谷が無数にあるような問題では、 勾配法は手前の谷でハマりがち。PSO は評価値だけで大域的に探索できるので、 こうした現実の設計問題で頼りになります(Section 5)。