如何使用 scipy.optimize.minimize() 指定相对于 objective 函数最小化的参数?
How to specify the parameter an objective function is minimized with respect to, using scipy.optimize.minimize()?
假设我有一个 objective 函数 f(a,b,c)。我想找到最小化它的 b 的值,保持 a 和 c 不变,然后尝试 a 和 c 的不同组合,我不喜欢写 f(a,b,c) 作为 g(b)。
from scipy.optimize import minimize
def f(a,b,c):
return((a+1)**2 + b + c/2)
res = minimize(f, x0=1, args=(a,c,),)
print(res.x)
那么我如何指定 b 是 f(a,b,c) 应该相对于最小化的参数?该参数是否必须表示为 x?或者我应该让 b 作为 f 的第一个参数吗?
如 the documentation 所述,函数的签名应为 fun(x, *args)
,其中 x
是最小化的参数。所以你可以在你的原始函数周围使用一个小的包装器:
res = minimize(lambda b, a, c: f(a, b, c), x0=1, args=(a, c))
假设我有一个 objective 函数 f(a,b,c)。我想找到最小化它的 b 的值,保持 a 和 c 不变,然后尝试 a 和 c 的不同组合,我不喜欢写 f(a,b,c) 作为 g(b)。
from scipy.optimize import minimize
def f(a,b,c):
return((a+1)**2 + b + c/2)
res = minimize(f, x0=1, args=(a,c,),)
print(res.x)
那么我如何指定 b 是 f(a,b,c) 应该相对于最小化的参数?该参数是否必须表示为 x?或者我应该让 b 作为 f 的第一个参数吗?
如 the documentation 所述,函数的签名应为 fun(x, *args)
,其中 x
是最小化的参数。所以你可以在你的原始函数周围使用一个小的包装器:
res = minimize(lambda b, a, c: f(a, b, c), x0=1, args=(a, c))