はじめに
粒子群最適化(PSO: Particle Swarm Optimization)の基本的な仕組みと、慣性重み・収束係数まわりの安定性解析は、 粒子群最適化(PSO)の数理とPython実装 で詳しく扱いました。そこで導かれた重要な結論は、「PSOは全粒子が全体最良位置 \(\mathbf{g}\) に引き寄せられる構造上、多様性を早期に失い局所解に停滞しやすい」という問題でした。
本稿では、この多様性喪失問題への対策として提案された 協調型二群PSO(TCPSO: Two-swarm Cooperative PSO) を扱います。TCPSOは Sun & Li (2013) が提案した手法で、役割の異なる2つの粒子群——収束を担うスレーブ群と多様性維持を担うマスター群——を協調させることで、探索区間が非常に広い問題(原論文では \(2 \times 10^{10}\) 規模)でも大域解を発見できると報告されています。
本稿の主眼は、既存記事にあった更新式の天下り的な提示を離れ、次の3点を数理的に詰めることです。
- スレーブ群・マスター群それぞれの速度更新式が、なぜ・どのような条件で収束するのかを線形安定性解析から導出する
- Pythonで実装し直し、固定シードで実際に走らせて得られた具体的な数値で、教科書的な「スレーブは速く収束しマスターは多様性を保つ」という説明がどの条件で成り立ち、どの条件で崩れるかを検証する
- 2023年以降の関連研究に位置づける
標準PSOの復習(簡潔に)
粒子 \(i\) の位置 \(x_i(t)\) ・速度 \(v_i(t)\) 、個人最良位置 \(P_i(t)\) 、全体最良位置 \(P_G(t)\) に対し、標準PSOの更新式は次の通りです。
\[ v_i(t+1) = w \cdot v_i(t) + C_1 r_1 (P_i(t) - x_i(t)) + C_2 r_2 (P_G(t) - x_i(t)) \] \[ x_i(t+1) = x_i(t) + v_i(t+1) \]- \(w\) : 慣性係数(現在の速度をどの程度維持するか)
- \(C_1, C_2\) : 認知係数・社会的係数
- \(r_1, r_2 \sim U[0,1]\) : 一様乱数

以下は、PSOで最適解 \((0,0)\) を探索した例です。収束は速いものの、粒子が一点に集中し、局所解に陥っている様子がわかります(慣性重み・係数と収束/発散の関係の厳密な導出は PSOの数理とPython実装 を参照してください)。
- \(t=0\)

- \(t=250\)

- \(t=500\)

協調型二群粒子群最適化 (TCPSO)
TCPSOは、役割の異なる2つの粒子群、大域的な探索を行うマスター粒子群と、集中的な探索を行うスレーブ粒子群を用いる点に特徴があります。
粒子の更新則
スレーブ粒子群 (Slave Swarm) スレーブ粒子群は、慣性項 \(w\) を持たず、群れ全体の最良位置 \(P_G(t)\) に強く引き寄せられます。これにより、有望な領域を集中的に探索する役割を担います。
\[ v_i^S(t+1) = C_1^S r_1 (P_i^S(t) - x_i^S(t)) + C_2^S r_2 (P_G(t) - x_i^S(t)) \] \[ x_i^S(t+1) = x_i^S(t) + v_i^S(t+1) \]
マスター粒子群 (Master Swarm) マスター粒子群は、スレーブ粒子群の最良位置 \(P_G^S(t)\) の情報も利用します。これにより、スレーブ群が見つけた有望な領域を参考にしつつも、慣性項によって探索の多様性を維持し、大域的な探索を行います。
\[ v_i^M(t+1) = w^M v_i^M(t) + C_1^M r_1 (P_i^M(t) - x_i^M(t)) + C_2^M r_2 (P_G^S(t) - x_i^M(t)) + C_3^M r_3 (P_G(t) - x_i^M(t)) \] \[ x_i^M(t+1) = x_i^M(t) + v_i^M(t+1) \]
スレーブ群の高速な収束性と、マスター群の多様性維持能力を組み合わせることで、効率的な探索を実現するというのがTCPSOの狙いです。以下ではこの狙いがなぜ数式のレベルで成立するのかを導出します。
収束性の導出
標準PSOの安定性解析( PSOの数理とPython実装 §収束・発散の安定性解析 )と同じ手法——1次元・1粒子への単純化、pbest/gbestを固定点 \(p\) とみなす局所安定性解析、乱数をその期待値 \(0.5\) で置き換える決定論的近似——を、スレーブ群・マスター群それぞれに適用します。
スレーブ群:1次の再帰式と “deadbeat” 収束
スレーブ群には慣性項がありません。偏差 \(e_t = x_t - p\) を定義し、\(P_i^S(t) = P_G(t) = p\) (局所的に停滞している局面)、\(r_1, r_2 \to 0.5\) と近似すると、
\[ v_{t+1} = C_1^S r_1 (p - x_t) + C_2^S r_2 (p - x_t) \to -\phi^S e_t, \qquad \phi^S = \frac{C_1^S + C_2^S}{2} \] \[ e_{t+1} = e_t + v_{t+1} = (1 - \phi^S)\, e_t \tag{S1} \]これは1次の線形漸化式です(標準PSOやマスター群が速度と偏差の2状態を持つ2次系であるのに対し、慣性項を持たないスレーブ群は状態が偏差 \(e_t\) だけの1次系に退化します)。この漸化式が収束する条件は単純で、
\[ |1 - \phi^S| < 1 \iff 0 < \phi^S < 2 \iff 0 < C_1^S + C_2^S < 4 \tag{S2} \]さらに興味深いのは、\(\phi^S = 1\) (例えば \(C_1^S = C_2^S = 1.0\) )のとき、決定論的近似の下では \(e_{t+1} = 0\) となり、1ステップで偏差がゼロになる(制御工学でいう deadbeat 応答)という点です。本記事の既存実装が採用している \(C_1^S = C_2^S = 1.0\) は、まさにこの理論上最速の収束点に一致しています。
マスター群:2次の再帰式と一般化された安定領域
マスター群は慣性項を持ち、3つの引力項(自己pbest・スレーブ群gbest・全体gbest)を持ちます。同様に \(P_i^M(t) = P_G^S(t) = P_G(t) = p\) 、\(r_1, r_2, r_3 \to 0.5\) と近似すると、
\[ v_{t+1} = w^M v_t - \phi^M e_t, \qquad \phi^M = \frac{C_1^M + C_2^M + C_3^M}{2} \] \[ e_{t+1} = e_t + v_{t+1} = w^M v_t + (1 - \phi^M)\, e_t \]行列形式にすると、標準PSOと全く同じ構造の2次系になります。
$$ \begin{pmatrix} v_{t+1} \ e_{t+1} \end{pmatrix}
\begin{pmatrix} w^M & -\phi^M \ w^M & 1-\phi^M \end{pmatrix} \begin{pmatrix} v_t \ e_t \end{pmatrix} \tag{M1} $$
特性方程式 \(\lambda^2 - (1+w^M-\phi^M)\lambda + w^M = 0\) にJuryの安定性判別を適用すると(導出は標準PSOと同一なので省略)、
\[ w^M < 1, \qquad 0 < C_1^M + C_2^M + C_3^M < 4(1 + w^M) \tag{M2} \]標準PSOの安定条件 \(0 < C_1+C_2 < 4(1+w)\) の「係数の和」が、マスター群では3項の和 \(C_1^M+C_2^M+C_3^M\) に置き換わっただけの、自然な拡張になっていることが分かります。式(S2)と式(M2)を比べると、スレーブ群の安定領域の上限(\(\phi^S<2\) 、すなわち \(C_1^S+C_2^S<4\) )は、マスター群の安定領域の上限(\(w^M=0\) の極限で \(C_1^M+C_2^M+C_3^M<4\) )に一致します。つまりスレーブ群は「慣性項をゼロに固定したマスター群」の特殊ケースとして統一的に理解できます。
数値実験による検証
上記の簡略化モデル(式S1, M1)をそのまま実装し、乱数を実際に毎ステップ引き直した場合の偏差 \(|e_t|\) の推移を確認します。
import numpy as np
def simulate_slave_deviation(c1s, c2s, T=60, seed=0, e0=1.0):
"""スレーブ群の1次停滞モデル(式S1)。
v_{t+1} = c1s*r1*(p-x_t) + c2s*r2*(p-x_t) = -(c1s r1 + c2s r2) e_t
e_{t+1} = (1 - c1s r1 - c2s r2) e_t
"""
rng = np.random.default_rng(seed)
e = e0
traj = [abs(e)]
for _ in range(T):
r1, r2 = rng.random(), rng.random()
e = (1 - c1s * r1 - c2s * r2) * e
traj.append(abs(e) + 1e-300)
return np.array(traj)
def simulate_master_deviation(w, c1m, c2m, c3m, T=150, seed=0, e0=1.0):
"""マスター群の2次停滞モデル(式M1)。標準PSOと同型だが phi は3項の和。"""
rng = np.random.default_rng(seed)
v, e = 0.0, e0
traj = [abs(e)]
for _ in range(T):
r1, r2, r3 = rng.random(), rng.random(), rng.random()
v = w * v - (c1m * r1 + c2m * r2 + c3m * r3) * e
e = e + v
traj.append(abs(e) + 1e-300)
return np.array(traj)
# スレーブ群: deadbeat点 (c1s=c2s=1.0) での収束速度
n_to_thresh = []
for seed in range(200):
traj = simulate_slave_deviation(1.0, 1.0, T=60, seed=seed)
idx = next((i for i, v in enumerate(traj) if v < 1e-6), None)
if idx is not None:
n_to_thresh.append(idx)
print(f"|e_t|<1e-6 に到達する反復数(200シード): "
f"mean={np.mean(n_to_thresh):.2f} median={np.median(n_to_thresh):.1f} max={np.max(n_to_thresh)}")
# マスター群: 名目上の境界内でも確率的に発散しうるケース
configs = [
("w=0.9, C1m=C2m=C3m=1.0", 0.9, 1.0, 1.0, 1.0),
("w=0.9, C1m=C2m=C3m=1.5(境界内)", 0.9, 1.5, 1.5, 1.5),
("w=0.9, C1m=C2m=C3m=2.0(境界超過)", 0.9, 2.0, 2.0, 2.0),
]
for label, w, c1m, c2m, c3m in configs:
bound = 4 * (1 + w)
s = c1m + c2m + c3m
finals = [simulate_master_deviation(w, c1m, c2m, c3m, T=150, seed=s_)[-1] for s_ in range(50)]
print(f"{label:32} sum={s:.2f} bound={bound:.2f} median|e_150|={np.median(finals):.3e}")
実行結果は次の通りです。
|e_t|<1e-6 に到達する反復数(200シード): mean=10.06 median=10.0 max=17
w=0.9, C1m=C2m=C3m=1.0 sum=3.00 bound=7.60 median|e_150|=4.238e-02
w=0.9, C1m=C2m=C3m=1.5(境界内) sum=4.50 bound=7.60 median|e_150|=1.964e+01
w=0.9, C1m=C2m=C3m=2.0(境界超過)sum=6.00 bound=7.60 median|e_150|=8.780e+07
deadbeat点 \(C_1^S=C_2^S=1.0\) のスレーブ群は、200シードの中央値でわずか10反復で \(|e_t|<10^{-6}\) に到達します。一方マスター群は、\(C_1^M+C_2^M+C_3^M=4.5\) が名目上の安定境界 \(4(1+w^M)=7.6\) の内側にあるにもかかわらず、50シード中央値で \(19.6\) まで発散しました。これは PSOの数理とPython実装 で確認したのと同じ現象——期待値近似による境界式(M2)は必要条件の目安に過ぎず、確率的な分散の発散(Jiang, Luo & Yang 2007; Poli 2009; Cleghorn & Engelbrecht 2014)を防ぐには不十分——がマスター群にもそのまま当てはまることを示しています。実務上は、名目境界より係数の和を十分小さく取るのが安全です。
Python実装
原論文の更新式に基づき、最小化問題向けにPythonで実装し直します(原著Matlab実装は評価値最大化 1/(|x|+|y|) でしたが、ここでは最小化問題として一般的なベンチマーク関数にそのまま適用できる形に書き換えています)。
import numpy as np
def run_tcpso(objective, dim, ns=20, nm=20, max_iter=200, bounds=(-5.12, 5.12),
w_max=0.9, w_min=0.4, c1s=1.0, c2s=1.0,
c1m=1.0, c2m=1.0, c3m=1.0, v_max_ratio=0.2, seed=0):
"""TCPSO(協調型二群PSO)。スレーブ群は慣性項なしで gbest に強く収束し、
マスター群は慣性項+スレーブgbest+全体gbestの3項で多様性を保ちながら探索する。"""
rng = np.random.default_rng(seed)
low, high = bounds
v_max = v_max_ratio * (high - low)
# スレーブ群の初期化
sp = rng.uniform(low, high, (ns, dim))
sp_v = np.zeros((ns, dim))
sp_f = objective(sp)
sp_best, sp_best_f = sp.copy(), sp_f.copy()
s_idx = int(np.argmin(sp_best_f))
s_gbest, s_gbest_f = sp_best[s_idx].copy(), float(sp_best_f[s_idx])
# マスター群の初期化
mp = rng.uniform(low, high, (nm, dim))
mp_v = np.zeros((nm, dim))
mp_f = objective(mp)
mp_best, mp_best_f = mp.copy(), mp_f.copy()
m_idx = int(np.argmin(mp_best_f))
g_best = mp_best[m_idx].copy() if mp_best_f[m_idx] < s_gbest_f else s_gbest.copy()
g_best_f = min(float(mp_best_f[m_idx]), s_gbest_f)
history = [g_best_f]
for t in range(max_iter):
w = w_max - (w_max - w_min) * (t / max_iter) # マスター群にのみLDIWを適用
sp_f = objective(sp)
mp_f = objective(mp)
# STEP: pbest更新
imp_s = sp_f < sp_best_f
sp_best[imp_s], sp_best_f[imp_s] = sp[imp_s], sp_f[imp_s]
imp_m = mp_f < mp_best_f
mp_best[imp_m], mp_best_f[imp_m] = mp[imp_m], mp_f[imp_m]
# STEP: スレーブgbest / 全体gbest更新
s_idx = int(np.argmin(sp_best_f))
if sp_best_f[s_idx] < s_gbest_f:
s_gbest_f, s_gbest = float(sp_best_f[s_idx]), sp_best[s_idx].copy()
m_idx = int(np.argmin(mp_best_f))
if mp_best_f[m_idx] < g_best_f:
g_best_f, g_best = float(mp_best_f[m_idx]), mp_best[m_idx].copy()
if s_gbest_f < g_best_f:
g_best_f, g_best = s_gbest_f, s_gbest.copy()
# STEP: スレーブ群更新(慣性項なし、式1)
r1s, r2s = rng.random((ns, dim)), rng.random((ns, dim))
sp_v = c1s * r1s * (sp_best - sp) + c2s * r2s * (g_best - sp)
sp_v = np.clip(sp_v, -v_max, v_max)
sp = np.clip(sp + sp_v, low, high)
# STEP: マスター群更新(慣性項あり、式2)
r1m, r2m, r3m = rng.random((nm, dim)), rng.random((nm, dim)), rng.random((nm, dim))
mp_v = (w * mp_v + c1m * r1m * (mp_best - mp)
+ c2m * r2m * (s_gbest - mp) + c3m * r3m * (g_best - mp))
mp_v = np.clip(mp_v, -v_max, v_max)
mp = np.clip(mp + mp_v, low, high)
history.append(g_best_f)
return g_best, g_best_f, history
def rastrigin(x):
return 10 * x.shape[-1] + np.sum(x**2 - 10 * np.cos(2 * np.pi * x), axis=-1)
_, best, hist = run_tcpso(rastrigin, dim=10, ns=20, nm=20, max_iter=200, seed=42)
print(f"TCPSO best (Rastrigin 10D, seed=42): {best:.6e}")
実行結果は次の通りです。
TCPSO best (Rastrigin 10D, seed=42): 1.193950e+01
実行検証
同じベンチマーク・同じ乱数シードで、標準PSO( 前回記事の実装 と同一コード)とTCPSOを比較します。
検証1:評価回数を揃えた比較(小規模集団)
評価回数(粒子数×イテレーション数)をおよそ揃え、標準PSO(\(N=40\)
)とTCPSO(スレーブ20 + マスター20 = 40)を Rastrigin関数(10次元、max_iter=200)で30シード実行しました。
| 手法 | 最終最良適応度(平均) | 最終最良適応度(中央値) | 標準偏差 |
|---|---|---|---|
| 標準PSO (\(N=40\) ) | \(7.2303\) | \(6.9647\) | \(3.7575\) |
| TCPSO (20+20) | \(11.2456\) | \(10.9466\) | \(4.5656\) |
seed=42 単発の実行では、標準PSO=\(1.989918\) 、TCPSO=\(11.939500\) でした。総粒子数が小さい場合、TCPSOは標準PSOに劣ります。 これは意外に思えるかもしれませんが、理由は式(S2)・(M2)の導出からも読み取れます。スレーブ群20粒子は前述の通り数十反復で「局所解の周辺に凝集」してしまい、それ以降は探索に貢献しなくなります。実質的な探索を担うのはマスター群20粒子だけになり、標準PSOの40粒子より探索力が落ちるのです。TCPSOが真価を発揮するのは、次の検証2・3で見るように、集団サイズが大きいか探索区間が非常に広い場合です。
検証2:高次元問題での比較
同じ設定を30次元Rastrigin関数(max_iter=400)に拡張し、集団サイズも標準PSO \(N=60\)
、TCPSO(スレーブ30+マスター30=60)に増やして15シード実行しました。
| 手法 | 最終最良適応度(平均) | 最終最良適応度(中央値) |
|---|---|---|
| 標準PSO (\(N=60\) ) | \(59.5163\) | \(53.7279\) |
| TCPSO (30+30) | \(43.5813\) | \(46.8262\) |
30次元・集団サイズ60では、TCPSOが標準PSOを平均で約16ポイント上回りました。高次元・多峰性の問題では、スレーブ群が局所解を高速に「固定」しつつ、マスター群がその他の領域を探索し続けるという役割分担が機能し始めることが分かります。
検証3:広い探索区間での検証(原論文の主張の再現)
原論文は「\(2\times10^{10}\)
のような広い探索区間でも大域解を捕捉できる」と主張しています。これを2次元Sphere関数、探索区間 \([-10^{10}, 10^{10}]\)
(幅 \(2\times10^{10}\)
)、粒子数300(標準PSO)/スレーブ150+マスター150(TCPSO)、max_iter=500 で10シード検証しました。
| 手法 | 最終最良適応度(平均) | 最終最良適応度(中央値) |
|---|---|---|
| 標準PSO (\(N=300\) ) | \(7.626 \times 10^{-57}\) | \(6.028 \times 10^{-57}\) |
| TCPSO (150+150) | \(4.275 \times 10^{-78}\) | \(1.570 \times 10^{-174}\) |
両手法とも探索区間の広さに関わらず大域解 \((0,0)\) 近傍まで収束できていますが、TCPSOの中央値はさらに117桁小さい値まで到達しています(Sphere関数は単峰性のため、この設定では両手法とも十分な粒子数があれば収束自体は難しくありません。TCPSOの優位性がより顕著に表れるのは検証2のような高次元・多峰性の設定です)。
検証4:多様性崩壊——原論文の設定と、クリップ付き小集団設定の比較
「スレーブ群は素早く収束し、マスター群は多様性を保つ」という教科書的な説明を、2つの異なる設定で定量的に確認します。
(a) 原論文に忠実な設定(速度クリッピングなし、\(w^M=0.9\) 固定、スレーブ・マスターとも150粒子、原点までの距離を評価値とする2次元問題、seed=42):
t= 0 slave mean|x|=5.071282e-01 master mean|x|=4.893374e-01
t= 1 slave mean|x|=2.562536e-01 master mean|x|=1.636114e-01
t= 50 slave mean|x|=4.776047e-17 master mean|x|=2.929781e-01
t= 100 slave mean|x|=7.454337e-26 master mean|x|=3.413688e-01
t= 250 slave mean|x|=6.844027e-26 master mean|x|=9.770398e-02
t= 500 slave mean|x|=7.000122e-26 master mean|x|=1.878114e-02
20シードで平均すると、スレーブ群が「初期値の1%未満」まで収束するのに要する反復数は平均 7.2回、対してマスター群は500反復経過しても収束条件(初期値の1%未満)に到達しませんでした。これはまさに教科書的な説明——スレーブ群がdeadbeatに近い速さで局所最適に凝集し、マスター群がその後も広く探索を続ける——を数値的に裏付けています。
(b) 速度クリッピング+小集団構成(\(v_{\max}\) クリップあり、スレーブ・マスターとも20粒子、10次元Rastrigin、seed=42)では様相が異なります。
slave collapse_iter=201(1%閾値に未到達) final_diversity=4.606724e-02
master collapse_iter=82 final_diversity=3.779736e-11
30シード平均では、スレーブ群の多様性崩壊は平均100.5反復、マスター群は平均95.8反復と、ほぼ差がありません。これは重要な注意点です。原論文の設定(速度クリッピングなし・大集団・単峰性の原点探索)では「スレーブ高速収束・マスター多様性維持」という役割分担が明確に成立しますが、速度クリッピングを加えた多峰性・小集団の設定では、この役割分担の効果が薄れ、むしろスレーブ群の方が収束しきれずに多様性を保持し続けるケースすらあります。これは、クリッピングがスレーブ群の「1ステップで収束する」という理論上の性質(deadbeat)を阻害し、離散的なステップでしか近づけなくなるためです。TCPSOを実務で使う際は、原論文の理想化された前提(無制限の速度・十分な集団サイズ)が崩れると、教科書的な説明どおりの挙動にならない場合がある点に注意が必要です。
下図は、(a) 評価回数を揃えた場合の標準PSO対TCPSOの収束曲線と、(b) 原論文設定でのスレーブ/マスター群の収束速度差を可視化したものです。

エッジケース・注意点
- 小集団ではTCPSOが標準PSOに劣ることがある(検証1)。スレーブ群が実質的に探索に寄与しなくなるため、総粒子数を増やすか、スレーブ群の割合を減らす(例: スレーブ:マスター = 1:3 など)調整が必要です。
- 速度クリッピングの有無で挙動が大きく変わる(検証4)。原論文はクリッピングを想定していませんが、実務上は発散防止のためクリッピングを入れることが多く、その場合スレーブ群のdeadbeat的収束が鈍ります。
- 高次元・多峰性問題でこそ真価を発揮する(検証2)。単峰性で低次元の問題では標準PSOで十分なことが多く、TCPSOの複雑さに見合うメリットが得られにくい場合があります。
- サブ群間の情報交換頻度がボトルネックになりうる。動的マルチスワームPSOに関する研究(後述)では、サブ群間で情報を交換しすぎると全サブ群が同時に早期収束してしまう「頻度のジレンマ」が指摘されています。TCPSOでもスレーブ→マスターへの情報伝達(\(P_G^S\) )が毎ステップ行われる設計になっており、より緩やかな交換スケジュールを試す余地があります。
- 原論文が前提とする問題設定(原点探索・広域単峰性)から離れるほど、教科書的な役割分担の説明が崩れやすいことは、検証4で見た通りです。実務適用時は必ず自分の問題設定でスレーブ/マスターの多様性推移を可視化し、想定通りの役割分担になっているか確認することを推奨します。
近年の研究動向(2023年以降)
TCPSOが提案された2013年以降も、複数の部分群(サブスワーム)を協調させることで多様性喪失・早期収束を防ぐという方向性の研究は活発に続いています。
- Li, W., Jing, J., Chen, Y., & Chen, Y. (2023) は、“A cooperative particle swarm optimization with difference learning”(Applied Soft Computing, 147)で、協調的な差分学習(difference learning)を粒子群最適化に組み込んだCDLPSOを提案し、複数の部分群が互いの探索経験を差分情報として共有することで多様性を維持する手法を報告しています。TCPSOの「スレーブ→マスターへの一方向の情報伝達」に対し、双方向の差分学習を導入している点が異なります。
- Casas-Ordaz, A., Haro, E. H., Beltran, L. A., Alvarez, O., Mousavirad, S. J., Pérez-Cisneros, M., & Oliva, D. (2026) の “Particle swarm optimization: A survey of innovations over the last 10 years”(Computer Science Review, 60)は、この10年間のPSO派生手法を包括的にレビューしており、協調型・マルチスワーム型の改良が、パラメータ調整型・ハイブリッド型と並ぶ主要な改良方針の一つとして位置づけられ続けていることを確認できます。
いずれも、本記事で導出した「役割分担(収束担当・多様性担当)をどう設計するか」「サブ群間の情報伝達をどう制御するか」という設計変数が、TCPSO以降も最適化研究の中心的な論点であり続けていることを示しています。
まとめ
- スレーブ群の速度更新式は慣性項を持たないため1次の線形漸化式(式S1)に帰着し、安定条件は \(0 < C_1^S+C_2^S<4\) (式S2)。\(C_1^S=C_2^S=1.0\) は理論上最速のdeadbeat収束点に一致する
- マスター群は標準PSOと同型の2次の線形漸化式(式M1)に帰着し、安定条件は3項の和に拡張された \(0 < C_1^M+C_2^M+C_3^M<4(1+w^M)\) (式M2)
- 名目上の安定境界内でも確率的な発散は起こりうる点は標準PSOと共通(数値実験で確認)
- 評価回数を揃えた小集団比較ではTCPSOは標準PSOに劣り、高次元・大集団・広域探索区間ではTCPSOが優位に立つ——集団サイズと問題設定への依存が大きいことが実行検証から分かった
- 原論文の理想化された前提(速度クリッピングなし・原点探索)を離れると、「スレーブ高速収束・マスター多様性維持」という教科書的な役割分担が薄れることがある
関連記事
- 粒子群最適化(PSO)の数理とPython実装:慣性重み・認知/社会係数の役割 - 標準PSOの速度更新式の導出・安定性解析・LDIWの詳細。本記事の前提知識です。
- 遺伝的アルゴリズムによるニューラルネットワーク学習のPython実装 - 同じ群知能カテゴリの進化的最適化手法
- 焼きなまし法(Simulated Annealing)の仕組みとPython実装 - メタヒューリスティクスによる別の最適化手法
- クロスエントロピー法:モンテカルロ最適化の実践的手法 - 確率分布ベースの最適化アルゴリズム
- モンテカルロ最適化メソッド比較(CEM/SA/GA/MPPI/PSO) - PSOを含む5手法を共通の枠組みで比較するハブ記事
参考文献
- Sun, J., & Li, W. (2013). “A two-swarm cooperative particle swarms optimization”. Swarm and Evolutionary Computation. DOI: 10.1016/j.swevo.2013.10.003
- Kennedy, J., & Eberhart, R. (1995). “Particle Swarm Optimization”. Proceedings of IEEE International Conference on Neural Networks, 4, 1942-1948.
- van den Bergh, F. (2001). “An Analysis of Particle Swarm Optimizers”. PhD thesis, University of Pretoria.
- Clerc, M., & Kennedy, J. (2002). “The particle swarm – explosion, stability, and convergence in a multidimensional complex space”. IEEE Transactions on Evolutionary Computation, 6(1), 58-73.
- Jiang, M., Luo, Y. P., & Yang, S. Y. (2007). “Stochastic convergence analysis and parameter selection of the standard particle swarm optimization algorithm”. Information Processing Letters, 102(1), 8-16.
- Poli, R. (2009). “Mean and variance of the sampling distribution of particle swarm optimizers during stagnation”. IEEE Transactions on Evolutionary Computation, 13(4), 712-721.
- Cleghorn, C. W., & Engelbrecht, A. P. (2014). “A generalized theoretical deterministic particle swarm model”. Swarm Intelligence, 8(1), 35-59.
- Li, W., Jing, J., Chen, Y., & Chen, Y. (2023). “A cooperative particle swarm optimization with difference learning”. Applied Soft Computing, 147.
- Casas-Ordaz, A., Haro, E. H., Beltran, L. A., Alvarez, O., Mousavirad, S. J., Pérez-Cisneros, M., & Oliva, D. (2026). “Particle swarm optimization: A survey of innovations over the last 10 years”. Computer Science Review, 60.