まず、さわってみる
群れが谷底(最適解)へ降りていく様子を眺めてみよう
カラフルな地形は、ある関数の「風景(ランドスケープ)」です。 低い(青い)ところほど値が小さく=良い、高い(赤い)ところほど値が大きく=悪い。 光る粒たちが群れ(解の候補)です。 開始を押すと、群れがころころと谷底=最適解へ集まっていきます。 左のパネルで目的関数や各スライダーを変え、動きがどう変わるか試してみてください (理屈は次のセクションから説明します)。
「開始」を押すと群れが動き出します。
収束:反復ごとの「全体ベスト値」(対数スケール)
画面に出てくる色や記号の意味は、次のとおりです。
- 地形の色 — 関数の値。低い(青)ほど良く、谷底が最適解。高い(赤)ほど悪い。
- 光る粒 — 各粒子(解の候補)。クリックで選択できる。
- オレンジの菱形 — その粒子がこれまでで最良だった位置(personal best)。
- 金色のマーカー — 群れ全体でいちばん良かった位置(global best)。
- 白い輪 — 本当の最適解(参考表示。群れは使っていない)。
- 矢印(選択中の粒子)— 速度・自分の最良へ・全体の最良への「3つの力」。
「粒子」とは何か — 鳥ではなく「解の候補」
ここがいちばん誤解されるポイント
PSO でいう粒子(パーティクル)は、鳥や魚のような「まわりを見て動くエージェント」ではありません。 1個の粒子は、問題の「解の候補」そのもの — たとえば探索空間の中の1点 (x, y) です。 群れは、ある目的関数 f(x, y) の値がいちばん小さくなる点(最適解)を、皆で手分けして探しています。
ビューアの地形は、その目的関数 f を風景として立体化したものです。 高さ=関数の値で、低い谷ほど値が小さく=良い解。 各粒子は「いまの当てずっぽうの答え」であり、地形の上をさまよいながら、 より低い場所(より良い答え)を探します。1匹1匹はバカでも、 群れとして情報を共有することで、賢く谷を見つけていく——これが群知能(swarm intelligence)です。
3つの力 — 群れを動かす更新式
慣性・自分の記憶・仲間の知恵、その足し算だけ
各粒子は毎ステップ、自分の速度 v を3つの力の足し算で更新し、その速度ぶんだけ位置 x を動かします。 たったこれだけです。
- 慣性 w·v — いまの向きを保つ力。大きいほど勢いよく進み、遠くまで探索する。
- 個人的引力 c1·(pBest − x) — 自分がこれまで見つけた最良地点へ引き戻す力(pBest=オレンジの菱形)。
- 社会的引力 c2·(gBest − x) — 群れ全体の最良地点へ引き寄せる力(gBest=金色のマーカー)。ここで情報が共有される。
r1, r2 は毎回ふり直すサイコロ(0〜1の乱数)です。これが入ることで、 同じ状況でも粒子ごとに引っぱられ方が少しずつ揺らぎ、群れが単調に一点へ潰れず、 あちこちをばらけて探索できます。 ビューアで粒子をクリックして選択すると、その粒子にかかる3つの力が 速度・自分の最良へ・全体の最良への矢印で表示されます。 c1・c2 のスライダーを動かして、矢印の長さ(引力の強さ)がどう変わるか見てください。
探索と活用のバランス
広く探すか、良い所を深掘りするか
最適化のいちばんの難しさは、探索(exploration)と活用(exploitation)の綱引きです。 広くさまよえば本物の谷(大域最適)を見つけやすいが遅い。 見つけた良い所へ急いで集まれば速いが、近くの浅い谷(局所最適)で満足して止まってしまう危険がある。 PSO では、このバランスを3つのパラメータで調整します。
- 慣性 w が大きい → 勢いで遠くまで動く=探索的。小さいと早く落ち着く=活用的。
- 社会的引力 c2 が強い → gBest へ一気に収束=速いが、局所最適に群れごとハマりやすい。
- 粒子の数が多い → 探索の網が広がり、良い谷を見つけやすくなる。
目的関数を切り替えると、難しさの違いが体感できます。 Sphere は谷がひとつだけの素直なお椀(簡単)。 Rastrigin は浅い谷が無数に並ぶ凸凹で、探索が足りないと群れが手前の浅い谷にハマります。 Rosenbrock は細く曲がった谷(バナナ谷)で、谷に入っても底までたどるのが難しい。 右下の収束グラフは、反復ごとの全体ベスト値の下がり方です。 途中で横ばい(プラトー)になったら、群れが行き詰まったサインです。
建築・デザインでの意味
「微分できない問題」を、群れで探る
PSO はメタヒューリスティクスと呼ばれる最適化手法の一種で、最大の強みは 目的関数の中身(数式や微分)を知らなくても使えること。 必要なのは「ある案 x を評価して、良し悪しの数値 f(x) を返す」ことだけ。 だから、構造解析・日射/採光シミュレーション・エネルギー計算・コスト評価など、 シミュレーションでしか良し悪しが測れない「ぐちゃぐちゃな設計目標」にそのまま使えます。
建築・デザインの文脈では、形態最適化(フォルムファインディング)、部材寸法の最適化、 平面・配置計画、環境性能の最適化、モデルのキャリブレーションなどに応用されています。 Grasshopper の Galapagos をはじめとする「進化的ソルバー」もこの仲間で、 PSO はその代表的なアルゴリズムのひとつです。
| 観点 | 勾配法(微分を使う) | PSO(群れで探す) |
|---|---|---|
| 必要なもの | 関数の式・微分(勾配) | 評価値 f(x) だけ(ブラックボックス可) |
| 探し方 | 坂を下る方向へ一直線 | 群れで広くばらけて探索 |
| 局所最適 | 近くの谷にハマりやすい | 大域的に抜け出しやすい |
| 速度・保証 | 速いが最適の保証は局所的 | 遅めで最適の保証はないが頑健 |
| 向く問題 | 滑らかで微分できる問題 | 凸凹・不連続・シミュレーション評価 |
考えてみよう
仕組みの「なぜ」に、原理で答えられるか
Q1. PSO も鳥の群れみたいに見える。BOIDS と何が違う?
目的が正反対です。BOIDSは分離・整列・結合という近所ルールで 「群れらしい動き」そのものを再現するのがゴール。 PSOは粒子を「解の候補」とし、目的関数 f(x) の 最適解を探すのがゴールです。似た見た目でも、片方はアニメーション、片方は最適化の道具です。
Q2. 更新式の r1, r2(乱数)は何のためにある? なくてもいいのでは?
乱数がないと、同じ位置関係の粒子はまったく同じ動きをして、群れが単調に一点へ潰れてしまいます。 r1, r2 が引力を毎回ゆらがせることで、粒子ごとに探し方がばらけ、 探索の多様性が生まれます。これが局所最適から抜け出す余地を与えます。
Q3. 群れが浅い谷(局所最適)にハマって動かない。どのパラメータをどういじる?
探索を強める方向へ振ります。慣性 w を上げて勢いで谷から出やすくし、 社会的引力 c2 を下げてgBest への一極集中を緩め、粒子数を増やして網を広げます。 ビューアの Rastrigin で試すと効果がよく分かります(Section 4)。
Q4. 普通の勾配法(坂を下る)と、PSO はどう使い分ける?
関数が滑らかで微分できるなら、勾配法のほうが速く正確です。 一方、微分できない・不連続・シミュレーションでしか評価できない・谷が無数にあるような問題では、 勾配法は手前の谷でハマりがち。PSO は評価値だけで大域的に探索できるので、 こうした現実の設計問題で頼りになります(Section 5)。