に追加の引数を指定することができます。他のユーザーがもっと具体的なものを必要とする場合は、ここに簡単な例があります。
一般二次方程式:
In [282]: def fun(x, a,b,c):
...: return a*x**2 + b*x + c
In [283]: optimize.minimize(fun, 10, args=(1,0,0))
Out[283]:
fun: 1.7161984122524196e-15
hess_inv: array([[ 0.50000001]])
jac: array([ -6.79528891e-08])
message: 'Optimization terminated successfully.'
nfev: 15
nit: 4
njev: 5
status: 0
success: True
x: array([ -4.14270251e-08])
In [284]: optimize.minimize(fun, 10, args=(1,1,1))
Out[284]:
fun: 0.7500000000000221
hess_inv: array([[ 0.49999999]])
jac: array([ 3.12924385e-07])
message: 'Optimization terminated successfully.'
nfev: 12
nit: 2
njev: 4
status: 0
success: True
x: array([-0.49999985])
機能は、同様に、入力として配列を取るが、それでも単一の(スカラー)を返す必要がある可能性があり値:
In [289]: optimize.minimize(fun, [10,10,10], args=(np.array([1,2,3]), 1, 1))
Out[289]:
fun: 2.541666666667115
hess_inv: array([[ 0.50021475, -0.00126004, 0.00061239],
[-0.00126004, 0.25822101, -0.00259327],
[ 0.00061239, -0.00259327, 0.16946887]])
jac: array([ -8.94069672e-08, 4.47034836e-07, -2.20537186e-06])
message: 'Optimization terminated successfully.'
nfev: 55
nit: 9
njev: 11
status: 0
success: True
x: array([-0.50000006, -0.2499999 , -0.16666704])
In [286]: def fun(x, a,b,c):
...: return (a*x**2 + b*x + c).sum()
それはすることをお勧めします関数が提案されたx0
とargsで実行されていることを確認してください。あなたは目的関数を呼び出し、または引数がどのように動作するかに関して、混乱していることができない場合
In [291]: fun(np.array([10,10,10]), np.array([1,2,3]), 1, 1)
Out[291]: 633
、minimize
は特効薬ではありません。この最小化は目的関数の理解と同じくらい良いです。
'functools.partial'を使って特定の' a、b、c'値を持つ関数を「フリーズ」しますか? –
@ PM2Ringこれはうまくいくはずですが、私は今このツールについて知ってうれしいですが、@Liteyeが指摘しているように、 'minimize'は実際にパラメータを渡すことができます。ありがとう! –
心配はいりません。あなたがそれを必要とするときには「部分的」は素晴らしいですが、私はSciPyを知らないので、それは示唆にすぎません。明らかに、Liteyeの答えがこれを行う適切な方法です。 :) –