Rastrigin関数

Rastrigin関数

Rastrigin関数の最小化を考えます。

Rastrigin関数は、多次元の最適化問題でよく使われる非線形かつ非凸な関数で、複数の局所最小値を持つため、グローバル最適化の良い例題です。

Rastrigin関数の定義は以下の通りです:

$$
f(\mathbf{x}) = An + \sum_{i=1}^{n} \left[ x_i^2 - A \cos(2 \pi x_i) \right]
$$

ここで、通常$ ( A = 10 ) $で、$ ( n ) $は次元数です。

この関数のグローバル最小値は$ (\mathbf{x} = \mathbf{0}) $であり、そのときの関数値は$0$です。

プログラム例

以下は、PythonRastrigin関数を最適化するためのコードです。

scipy.optimizeモジュールのdual_annealing関数を使用してグローバル最適化を行います。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import numpy as np
from scipy.optimize import dual_annealing

# Rastrigin関数の定義
def rastrigin(x):
A = 10
return A * len(x) + sum([(xi**2 - A * np.cos(2 * np.pi * xi)) for xi in x])

# 最適化の設定
bounds = [(-5.12, 5.12) for _ in range(2)] # 2次元のRastrigin関数

# dual_annealingによる最適化
result = dual_annealing(rastrigin, bounds)

# 結果の表示
print("最適化結果:")
print("最小値:", result.fun)
print("最適解:", result.x)
print("反復回数:", result.nit)

ソースコード解説

  1. 関数の定義

    • Rastrigin関数を定義します。
      この関数は入力ベクトル x に対して評価されます。
  2. 最適化の設定

    • 最適化する範囲(ここでは、各次元が ([-5.12, 5.12]) の範囲にあります)を設定します。
  3. dual_annealingによる最適化

    • SciPyのdual_annealing関数を使用して、Rastrigin関数の最小値を求めます。
  4. 結果の表示

    • 最適化結果として、最小値最適解、および反復回数を表示します。

このコードを実行することで、Rastrigin関数のグローバル最小値を求めることができます。

Rastrigin関数の性質上、最適化アルゴリズムが局所最小値に陥らないようにするための良いテストケースとなります。

結果解説

[実行結果]

最適化結果:
最小値: 1.8474111129762605e-13
最適解: [-3.00458545e-08 -5.08182682e-09]
反復回数: 1000
  1. 最小値: 1.8474111129762605e-13

    • これはRastrigin関数の最小値で、最適化アルゴリズムが見つけた関数の評価値です。
      この値は非常に小さいことから、ほぼゼロに近いことを示しています。
      Rastrigin関数の理論的なグローバル最小値は$0$なので、この結果は非常に良い最適化が行われたことを示しています。
  2. 最適解: [-3.00458545e-08 -5.08182682e-09]

    • これは関数が最小値を取るときの入力ベクトル(解)です。
      ここで示されている値は、非常に小さい数値(ほぼゼロ)です。
      理論的な最適解はすべての変数がゼロのベクトル$ (\mathbf{0}) $なので、この結果は理論的な最適解に非常に近いことを示しています。
    • 具体的には、$ (-3.00458545 \times 10^{-8}) $と$ (-5.08182682 \times 10^{-9}) $はどちらもゼロに非常に近い値です。
  3. 反復回数: 1000

    • これは最適化アルゴリズムが終了するまでに行われた反復(イテレーション)の回数です。
      dual_annealingアルゴリズムが設定された最大の反復回数に達したことを示しています。
      最適化が成功し、非常に小さい最小値を見つけた一方で、アルゴリズムは最大反復回数まで探索を続けました。

最適化アルゴリズムと結果の評価

  • dual_annealing アルゴリズム:

    • これは焼きなまし法(Simulated Annealing)に基づくグローバル最適化アルゴリズムです。
      多くの局所最小値を持つ関数(非凸関数)の最適化に適しています。
    • このアルゴリズムは、温度を徐々に下げながら探索範囲を狭めていくことで、局所最小値に陥ることを防ぎつつ、グローバル最小値を探索します。
  • 結果の評価:

    • 最小値がほぼゼロであり、最適解が理論的な最適解(ゼロベクトル)に非常に近いことから、アルゴリズムは非常に効果的に動作したと評価できます。
    • 最大反復回数に達したものの、最適化の目的は十分に達成されたと考えられます。
      探索プロセスをさらに続ける必要はないでしょう。

まとめ

この結果は、Rastrigin関数の最小化においてdual_annealingアルゴリズムが有効に機能したことを示しています。

最適化アルゴリズムは、非常に小さな関数値と理論的な最適解に近い解を見つけることができました。