1

我正在使用 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 值进行优化。如何将这些值作为目标函数的输入?

4

1 回答 1

2

文档scipy.optimize.minimize提到了参数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)
于 2019-06-17T11:33:52.950 回答