非線形の最適化問題
非線形の最適化問題を解くためには、SciPyライブラリのminimize()
関数を使用します。
ここでは、簡単な非線形の最適化問題を解いてみます。
例として、次の非線形関数を最小化する問題を考えます。
$$
f(x) = x^2 + 5 \sin(x)
$$
この関数を最小化する$ (x) $の値を見つけることを目指します。
1 | import numpy as np |
このコードは、minimize()
関数を使用して非線形関数を最小化しています。
関数の最小値を求めるためにBFGS(Broyden-Fletcher-Goldfarb-Shanno)最適化手法を使用しています。
最適解は result.x
に格納されます。
また、matplotlib
ライブラリを使用して、非線形関数をグラフ化しています。
最小値の位置を赤色の点で表示しています。
ソースコード解説
このコードは、PythonのSciPyライブラリを使用して非線形最適化問題を解くものです。
numpy
およびscipy.optimize
から必要なライブラリをインポートしています。
また、グラフを描画するためにmatplotlib.pyplot
もインポートしています。objective_function(x)
という関数を定義しています。
これは最小化する非線形関数です。
ここでは$ ( f(x) = x^2 + 5 \sin(x) ) $となっています。初期値
x0
を 0 としています。
最適化アルゴリズムはこの初期値から始まり、関数の最小値を見つけようとします。minimize()
関数を使用して、objective_function
を最小化します。
ここでは** BFGS(Broyden-Fletcher-Goldfarb-Shanno)法 **を使用しています。result.x
には、最適化アルゴリズムによって見つけられた最適解が格納されます。グラフ化のために、
np.linspace()
を使用して$ ( x ) $の値を範囲$ [-10, 10] $で生成し、それに対応する$ ( f(x) ) $の値を計算しています。plt.plot()
を使って非線形関数を青色の折れ線グラフでプロットし、plt.scatter()
を使って最適解の位置を赤い点で表示しています。最後に、グラフの軸ラベル、タイトル、凡例、グリッドを設定し、
plt.show()
でグラフを表示しています。
このコードは、非線形最適化問題を解く手法とその結果を可視化する方法を示しています。
関数の最小値を見つけ、最適解の位置を視覚的に示すためにグラフを使用しています。
結果解説
この非線形関数$ ( f(x) = x^2 + 5 \sin(x) ) $を最小化するために、Scipyのminimize()
関数を使用しました。
最適化手法としてはBFGS法を選択しました。
結果として得られた最適解は$ ( x \approx -1.11051052 ) $です。
この$ ( x ) $の値が関数$ ( f(x) ) $を最小化する点です。
グラフでは、横軸が$ ( x )$、縦軸が$ ( f(x) ) $となっており、非線形関数が青線で表示されています。
赤い点が求められた最適解の位置を示しています。
この点は、関数が最小値を取る位置を表しています。
関数$ ( f(x) ) は ( x \approx -1.11051052 ) $の位置で最小値を持ちます。
この値は、関数が最小となる$ ( x ) $の位置を示しており、BFGS最適化アルゴリズムがこの値を見つけることができたことを示しています。