この記事について
メタファー系の5つめ、 Golden Jackal Optimization(GJO:キンイロジャッカル最適化) です。2022年提案と比較的新しく、キンイロジャッカルの つがい(オス・メス)による協調狩り を模しています。
GWO(⑥)が3頭のボスに従ったのに対し、GJO は 2頭(オス・メス)で獲物を挟み込む のが特徴です。…もうお気づきかもしれませんが、「リーダーの頭数を変えただけ」感が漂ってきます笑。その辺も含めて見ていきます。
メタヒューリスティクス図鑑シリーズの記事一覧はこちら。
| 記事 | 内容 |
|---|---|
| ⓪〜⑤ | 入門・地図/PSO・ACO・CMA-ES・GA・Cuckoo |
| ⑥〜⑨ | GWO/HHO/MFO/GOA |
| ⑩(本記事) | Golden Jackal Optimization(GJO) |
| ⑪ | Manta Ray Foraging(MRFO) |
| ⑫ | まとめ:メタファー系の正体と使い分け |
GJOとは
2022年に Chopra と Ansari が提案しました。
N. Chopra and M. M. Ansari, "Golden jackal optimization: A novel nature-inspired optimizer for engineering applications,"
Expert Systems with Applications, vol. 198, 116924, 2022.
キンイロジャッカルは つがい で狩りをします。オスのジャッカルが先導し、メスが付き従って獲物を追い込む、というストーリーを最適化に持ち込んでいます。集団の最良個体を オス 、2番目を メス として、各エージェントはこの2頭の中間へ動きます。
核心:2頭のリーダーで挟む + エネルギー
先に登場する記号を整理しておきます。$t$ は現在の反復回数、$T$ は最大反復回数です。
| 記号 | 意味 | 実装(後述)での対応 |
|---|---|---|
| $X_i$ | 更新するエージェント $i$ の現在位置 | X[i] |
| $X_M$ | オス :これまでの最良個体 | male |
| $X_{FM}$ | メス :2番目に良い個体 | female |
| $E_1$ | エネルギーの 上限 。$E_1 = 1.5(1 - t/T)$ で $1.5 \to 0$ へ直線的に減る | E1 |
| $E_0$ | $[-1, 1]$ の一様乱数。エージェントごと・反復ごとに引き直す | 2 * rng.random() - 1 |
| $E = E_1 E_0$ | 獲物の 回避エネルギー 。$-E_1 \le E \le E_1$ の範囲でランダムに決まるスカラー | E |
| $R_L$ | ⑤の Lévyフライト で作った、次元ごとに値が違うランダムベクトル($0.05$ 倍に縮小) | RL |
| $Y_1, Y_2$ | オス・メスそれぞれを基準にした 行き先の候補 |
Y1, Y2
|
更新は次の3ステップです。
① エネルギー $E$ を決める
E = \underbrace{1.5\left(1 - \frac{t}{T}\right)}_{E_1\text{:上限(減衰)}} \cdot \underbrace{E_0}_{[-1,\,1]\text{ の乱数}}
② $\vert E\vert$ の大きさで式を切り替えて、行き先候補 $Y_1, Y_2$ を求める
\begin{aligned}
|E| > 1\ \text{(探索)}:&\quad
Y_1 = X_M - E\,|X_M - R_L\cdot X_i|,\quad
Y_2 = X_{FM} - E\,|X_{FM} - R_L\cdot X_i| \\
|E| \le 1\ \text{(活用)}:&\quad
Y_1 = X_M - E\,|R_L\cdot X_M - X_i|,\quad
Y_2 = X_{FM} - E\,|R_L\cdot X_{FM} - X_i|
\end{aligned}
$R_L\cdot X_i$ の積と $|\cdot|$ の絶対値は、どちらも 次元ごと(要素ごと) に計算します。$|X_M - R_L\cdot X_i|$ は「オスと自分のおおよその距離」で、それに $E$ を掛けた分だけ オスの位置からずらした点 が $Y_1$ です。$E$ は正にも負にもなるので、オスの手前にも向こう側にも候補ができます($Y_2$ はメスについて同じことをしたもの)。
③ 2つの候補の中点へ移動する
X_i^{\text{new}} = \frac{Y_1 + Y_2}{2}
オス基準の候補とメス基準の候補を 平均 するので、結果として2頭に挟まれた位置へ寄っていくわけです。
エネルギー $E$ が探索→活用のつまみで、HHO(⑦)の $E$ とほぼ同じ発想です。 「リーダーへ係数つきで詰める」骨格そのもの で、頭数が2頭になっただけ、と言えます。
図で見る
- ①(左)1ステップの幾何 :オス $X_M$(最良)とメス $X_{FM}$(次点)それぞれへの行き先 $Y_1, Y_2$ を求め、 そのちょうど中点 へ動きます。⑥のGWOの図と見比べると、 星が3つから2つに減っただけ なのがよくわかるかと思います
- ②(中)回避エネルギーの推移 :$\vert E\vert$ の上限が $1.5(1-t/T)$ で減衰し、$\vert E\vert>1$ なら探索、$\vert E\vert \le 1$ なら活用に切り替わります。⑦のHHOの図とほとんど同じ形です
- ③(右)$\vert E\vert$ と着地点の関係 :$\vert E\vert$ を $0$ から $1.5$ まで変えたときに $X^{new}$ がどこに来るかを色で示しました。 青($\vert E\vert$ 小)は2頭の中間(×印)付近、赤($\vert E\vert$ 大)は遠方 へ飛びます
③で着地点が 線状に並ぶ のは、$E$ がスカラー係数として距離全体に掛かるからです(ランダム係数 $R_L$ の揺らぎは $0.05$ 倍と小さい)。 「向きは2頭が決め、距離だけをエネルギーが決める」 という構造がそのまま見えている、と読むとわかりやすいかと思います。
Python実装
import numpy as np
# levy() は ⑤で定義したもの
def gjo(func, dim, lb, ub, n_agents=30, n_iter=500, seed=0):
rng = np.random.default_rng(seed)
X = rng.uniform(lb, ub, (n_agents, dim))
fit = np.array([func(x) for x in X])
order = np.argsort(fit)
male, female = X[order[0]].copy(), X[order[1]].copy() # オス・メス
fmale = fit[order[0]]
history = []
for t in range(n_iter):
E1 = 1.5 * (1 - t / n_iter)
for i in range(n_agents):
E = E1 * (2 * rng.random() - 1) # 回避エネルギー
RL = 0.05 * levy(dim, rng)
if abs(E) > 1: # 探索
Y1 = male - E * np.abs(male - RL * X[i])
Y2 = female - E * np.abs(female - RL * X[i])
else: # 活用
Y1 = male - E * np.abs(RL * male - X[i])
Y2 = female - E * np.abs(RL * female - X[i])
X[i] = np.clip((Y1 + Y2) / 2, lb, ub) # 2頭の中間へ
fit = np.array([func(x) for x in X])
order = np.argsort(fit)
if fit[order[0]] < fmale:
fmale, male = fit[order[0]], X[order[0]].copy()
female = X[order[1]].copy()
history.append(fmale)
return male, fmale, history
Rastrigin(2次元)で実行します。
_, best_f, history = gjo(rastrigin, dim=2, lb=-5.12, ub=5.12, seed=0)
print(f'GJO 最良値 f = {best_f:.6e} (初期 {history[0]:.3f} → 最終 {history[-1]:.3e})')
GJO 最良値 f = 0.000000e+00 (初期 1.897 → 最終 0.000e+00)
大域最適に到達しました。しかも収束がとても速いです。
10次元・10シード平均では Rastrigin で $1.5\times10^{-11}$、Ackley で $2.9\times10^{-2}$。⑫の収束比較図でも、 GJO は全手法で最速で底に到達 しています。数値だけ見れば文句なしの強さです。
しかし、最も激しい原点バイアス
ところが GJO は、 今回のメタファー系の中で最も原点バイアスが強い ことが分かりました。⑫で最適解を原点から $+2$ ずらすと、成績は次のように激変します。
| 最適解が原点 | 最適解を+2にずらす | |
|---|---|---|
| GJO | $1.5\times10^{-11}$ | $33.7$ |
$10^{-11}$ から $33.7$ へ、 12桁以上の悪化 です。Rastrigin の原点では「全手法最速・最強クラス」だったのに、最適解をたった2ずらしただけで 最下位クラスまで転落 します。
これは GJO の更新式が、Lévy係数 $R_L$ をかけて「$X - E\cdot|\dots|$」と縮める構造を持ち、 原点(ゼロベクトル)方向へ強く吸い寄せられる ためです。「原点に最適解があるベンチマークでだけ無双する」という、メタファー系の評価で最も警戒すべきパターンの典型例になっています。
まとめ
- GJO はキンイロジャッカルの つがい狩り を模し、オス(最良)・メス(次点)2頭の中間へエージェントを動かす
- エネルギー $E$ で探索→活用を切り替える ── HHO(⑦)とほぼ同じ発想で、頭数が2頭になっただけ
- 原点最適のベンチマークでは 全手法最速で大域最適に到達 するほど強い
- しかし 原点バイアスが最も激しく 、最適解をずらすと $10^{-11}\to33.7$ と壊滅する
- 「ベンチマーク次第で評価が真逆になる」生きた実例(⑫で詳述)
次回はシリーズ最後の手法、 Manta Ray Foraging Optimization(MRFO) です。
参考にした記事や本、論文等
- N. Chopra and M. M. Ansari, "Golden jackal optimization: A novel nature-inspired optimizer for engineering applications," Expert Systems with Applications, vol. 198, 116924, 2022.

