時にはそうであり、時にはそうではありません。これは、定義する関数と選択するメソッドによって異なります。主な違いは、定義されたfunc
がスカラーを返してminimize_scalar
を使用しなければならないことです。これは、結果がより迅速に返されるためです。
は、より具体的な説明については、以下を参照してください。あなたは、関数トレース、どこ最小の位置を確認したい場合は
from scipy import optimize
def func(x):
return (x - 2) * (x + 2)**2
def func2(x):
return (x - 2) * x * (x + 2)**2
min = 0
max = 1
res1 = optimize.fminbound(func, min, max)
res2 = optimize.minimize_scalar(func, bounds=(min,max))
res3 = optimize.fminbound(func2, min, max)
res4 = optimize.minimize_scalar(func2, bounds=(min,max))
print res1, res2.x
print res3, res4.x
import matplotlib.pyplot as plt
import numpy as np
xaxis = np.arange(-15,15)
plt.plot(xaxis, func(xaxis))
plt.plot(xaxis, func2(xaxis))
plt.scatter(res2.x, res2.fun)
plt.scatter(res4.x, res4.fun)
plt.show()
あなたはプロットを見てみることができます。印刷出力は:
0.666666844366 0.666666656734
0.999994039139 1.28077640403
興味深いものです。ドキュメントの 'Objective関数を最小化する(スカラを受け入れる必要があります)').fminboundの場合、funcはスカラーを1つ返すべきであることを理解しました。 –
すべての「通常の」最適化ソフトウェアでは、目的がスカラーであることが必要です。目的がベクトルを返すと、多目的(または複数基準)の問題に終わりますが、それはむしろ特殊な領域です。 –