サーチ…


構文

  1. numpyをnpとしてインポートする
  2. scipy.optimizeからインポート_minimize
  3. scipy import specialから
  4. matplotlib.pyplotをpltとしてインポート

備考

scipy.optimizeからインポートするときには、 'minimize'の前にアンダースコアを付けてください。 '_minimize'また、このセクションを実行する前にこのリンクから関数をテストしたところ、「特別」を別々にインポートした場合、問題が少ないことがわかりました。リンクされたページのRosenbrock機能が正しくありませんでした。まず、カラーバーを設定する必要があります。私は代替コードを掲示しましたが、それが良いかもしれないと思います。

さらなる例が来る。

ヘッセ行列の説明はこちら

最適化の例(ゴールデン)

「ゴールデン」法は極限値の範囲を狭めることによって単峰性関数を最小化する

import numpy as np
from scipy.optimize import _minimize
from scipy import special
import matplotlib.pyplot as plt

x = np.linspace(0, 10, 500)
y = special.j0(x)
optimize.minimize_scalar(special.j0, method='golden')
plt.plot(x, y)
plt.show()

結果の画像

golgen_small

最適化の例(ブレント)

ブレントの方法は、他のルート探索アルゴリズムのより複雑なアルゴリズムの組み合わせです。しかし、得られたグラフは、黄金の方法から生成されたグラフとあまり変わらない。

import numpy as np
import scipy.optimize as opt
from scipy import special
import matplotlib.pyplot as plt
    
x = np.linspace(0, 10, 500)
y = special.j0(x)
# j0 is the Bessel function of 1st kind, 0th order
minimize_result = opt.minimize_scalar(special.j0, method='brent')
the_answer = minimize_result['x']
minimized_value = minimize_result['fun']
# Note: minimize_result is a dictionary with several fields describing the optimizer,
# whether it was successful, etc. The value of x that gives us our minimum is accessed
# with the key 'x'. The value of j0 at that x value is accessed with the key 'fun'.
plt.plot(x, y)
plt.axvline(the_answer, linestyle='--', color='k')
plt.show()
print("The function's minimum occurs at x = {0} and y = {1}".format(the_answer, minimized_value))

結果グラフ

ブレント_SML

出力:

The function's minimum occurs at x = 3.8317059554863437 and y = -0.4027593957025531

ローゼンブロック関数

これは良い例かもしれないが、あなたは要点を得ることができると思う

import numpy as np
from scipy.optimize import _minimize
from scipy import special
import matplotlib.pyplot as plt
from matplotlib import cm
from numpy.random import randn

x, y = np.mgrid[-2:2:100j, -2:2:100j]
plt.pcolor(x, y, optimize.rosen([x, y]))
plt.plot(1, 1, 'xw')

# Make plot with vertical (default) colorbar
data = np.clip(randn(100, 100), -1, 1)
cax = plt.imshow(data, cmap=cm.coolwarm)

# Add colorbar, make sure to specify tick locations to match desired  ticklabels 
cbar = plt.colorbar(cax, ticks=[-2, 0, 2])  # vertically oriented colorbar
plt.axis([-2, 2, -2, 2])
plt.title('Rosenbrock function') #add title if desired
plt.xlabel('x')
plt.ylabel('y')

plt.show()  #generate

ローゼンブラック



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow