(このコードはGemini 3.0 Pro (2025年12月01日)によって生成しました)
MATLABのGlobal Optimization Toolboxは、局所的な解(ローカルミニマム)に陥りやすい複雑な問題に対して、大域的な最適解(グローバルミニマム)を探索するために非常に強力です。
このツールボックスに含まれる主な関数は、探索のアプローチによっていくつかのカテゴリに分類できます。以下に主要な関数とその特徴を整理します。
1. 勾配ベースの探索(局所ソルバーの多点開始)
これらは、従来のfminconのような局所的最適化ソルバーを、複数の異なる初期値から実行させることで大域解を探すアプローチです。関数が比較的滑らか(微分可能)な場合に適しています。
-
GlobalSearch-
特徴: 効率的に「有望な」開始点を選別して、そこから
fminconを実行します。すべての開始点から実行するわけではないため、計算時間を節約できます。 - 用途: 滑らかで連続的な目的関数。局所解が複数ある場合。
-
特徴: 効率的に「有望な」開始点を選別して、そこから
-
MultiStart- 特徴: ユーザーが指定した数の初期点から並列に局所ソルバーを実行します。徹底的に探索したい場合に有効です。
- 用途: 並列計算を利用して広範囲を探索したい場合。
2. 進化的アルゴリズム・群知能(メタヒューリスティクス)
関数の勾配(微分情報)を使わず、確率的な手法で解を探索します。不連続な関数や、ノイズの多い関数に適しています。
-
ga(Genetic Algorithm / 遺伝的アルゴリズム)- 特徴: 生物の進化(選択、交叉、突然変異)を模倣します。整数制約(変数が整数でなければならない場合)を扱えるのが大きな強みです。
- 用途: 離散変数が含まれる問題、非常に複雑な形状の関数。
-
particleswarm(Particle Swarm Optimization / 粒子群最適化)- 特徴: 鳥の群れのような動きを模倣します。多数の粒子が情報を共有しながら最適解へ向かいます。
- 用途: 設定パラメータが比較的少なく、扱いやすい。変数の数が多い問題にも強い。
-
simulannealbnd(Simulated Annealing / 焼きなまし法)- 特徴: 金属の冷却過程を模倣。最初は広い範囲を探索し、徐々に探索範囲を狭めます。
- 用途: 局所解からの脱出が得意ですが、収束に時間がかかることがあります。1つの点を更新していくため、高次元には不向きな場合があります。
3. 直接探索法(Direct Search)
勾配を使わず、現在の点の周辺を規則的に探索します。
-
patternsearch- 特徴: 現在の点から一定のパターン(メッシュ)上の点を評価し、より良い点があれば移動します。
- 用途: 微分不可能、または不連続な関数。計算が比較的安定しています。
4. 計算コストが高い関数向け
シミュレーションなどで1回の関数評価に時間がかかる場合に特化しています。
-
surrogateopt(Surrogate Optimization / 代理モデル最適化)- 特徴: 目的関数の近似モデル(代理モデル)を作成し、そのモデル上で最適化を行うことで、真の関数の評価回数を最小限に抑えます。
- 用途: 1回の計算に数秒〜数分以上かかるような重いシミュレーションや実験データの最適化。
目的別・選び方の目安
どの関数を使うべきか迷う場合は、以下の基準を参考にしてください。
| 特徴・条件 | 推奨関数 |
|---|---|
| 関数が滑らか(微分可能) |
GlobalSearch, MultiStart
|
| 計算コストが非常に高い(重い) | surrogateopt |
| 変数が整数である必要がある |
ga, surrogateopt
|
| 勾配情報がない・不連続 |
particleswarm, patternsearch, ga
|
| 並列計算を活用したい |
particleswarm, ga, MultiStart
|
おすすめのステップ
研究や実験データへのフィッティング(モデル合わせ)などで使用される場合、まずは設定がシンプルで収束性能が良い particleswarm か、もし関数が滑らかなら GlobalSearch から試してみるのが一般的です。