我正在使用scipy库执行优化任务。 我有一个必须最小化的功能。我的代码和功能看起来像
import numpy as np
from scipy.optimize import minimize
from scipy.optimize import Bounds
bounds = Bounds([2,10],[5,20])
x0 = np.array([2.5,15])
def objective(x):
x0 = x[0]
x1 = x[1]
return a*x0 + b*x0*x1 - c*x1*x1
res = minimize(objective, x0, method='trust-constr',options={'verbose': 1}, bounds=bounds)
我的a,b和c值随时间变化并且不是恒定的。该函数不应针对a,b,c值进行优化,而应针对可随时间变化的给定a,b,c值进行优化。如何将这些值作为目标函数的输入?
答案 0 :(得分:2)
scipy.optimize.minimize
的{{3}}提到了args
参数:
args:元组,可选
传递给目标函数及其派生函数(fun,jac和hess函数)的额外参数。
您可以按以下方式使用它:
import numpy as np
from scipy.optimize import minimize
from scipy.optimize import Bounds
bounds = Bounds([2,10],[5,20])
x0 = np.array([2.5,15])
def objective(x, *args):
a, b, c = args # or just use args[0], args[1], args[2]
x0 = x[0]
x1 = x[1]
return a*x0 + b*x0*x1 - c*x1*x1
# Pass in a tuple with the wanted arguments a, b, c
res = minimize(objective, x0, args=(1,-2,3), method='trust-constr',options={'verbose': 1}, bounds=bounds)