SciPyのオプティマイザー

SciPyのoptimizeモジュールは、一般的に使用される最適化アルゴリズム関数の実装を提供します。これらの関数を直接呼び出して、関数の最小値や方程式の根を見つけるなどの最適化問題を完了することができます。

NumPyは、多項式と線形方程式の根を見つけることはできますが、非線形方程式の根を見つけることはできません。

x + cos(x)

そのため、SciPyのoptimze.root関数を使用できます。この関数には2つのパラメータが必要です。

  • fun – 方程式の関数。
  • x0 – 根の最初の推測。

この関数は、ソリューションに関する情報を含むオブジェクトを返します。

実際のソリューションは、オブジェクトの属性xを返すことです。次には実例を挙げます。

実例

x + cos(x)方程式の根を見つけます。

from scipy.optimize import root
from math import cos

def eqn(x):
  return x + cos(x)

myroot = root(eqn, 0)

print(myroot.x)

# 詳しい情報を表示します
#print(myroot)

上記のコードを実行した後、出力結果は次のようになります。

-0.73908513]

詳しい情報を表示します:

実例

from scipy.optimize import root
from math import cos

def eqn(x):
  return x + cos(x)

myroot = root(eqn, 0)

print(myroot)

上記のコードを実行した後、出力結果は次のようになります。

    fjac: array([[-1.]])
     fun: array([0.])
 message: 'The solution converged.'
    nfev: 9
     qtf: array([-2.66786593e-13])
       r: array([-1.67361202])
  status: 1
 success: True
       x: array([-0.73908513])

最小化関数

この関数は、高点と低点のある曲線を表します。

高点は最大値と呼ばれます。

低点は最小値と呼ばれます。

曲線全体の最高点はグローバル最大値と呼ばれ、残りはローカル最大値と呼ばれます。

曲線全体の最低点はグローバル最小値と呼ばれ、残りはローカル最小値と呼ばれます。

scipy.optimize.minimize()関数を使用して、関数を最小化できます。

minimize()関数は、次のパラメータを受け入れます。

  • fun – 最適化する関数
  • x0 – 最初の推測
  • method – 使用するメソッドの名前。例えば:’CG’,’BFGS’,’Newton-CG’,’L-BFGS-B’,’TNC’,’COBYLA’,,’SLSQP’。
  • callback – ループを最適化した後、呼び出される関数。
  • options – 他のパラメータを定義する辞書
{
     "disp": boolean - print detailed description
     "gtol": number - the tolerance of the error
}

実例

x^2 + x + 2は、BFGSの最小化関数を使用します。

from scipy.optimize import minimize

def eqn(x):
  return x**2 + x + 2

mymin = minimize(eqn, 0, method='BFGS')

print(mymin)

上記のコードを実行した後、出力結果は次のようになります。

      fun: 1.75
 hess_inv: array([[0.50000001]])
      jac: array([0.])
  message: 'Optimization terminated successfully.'
     nfev: 8
      nit: 2
     njev: 4
   status: 0
  success: True
        x: array([-0.50000001])
Share

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です