0

我正在使用 Scipy 的内置差分进化在 Python 中的参数 nu 上找到函数 f 的最大值,同时保持其他项(args)固定。我的代码

max = scipy.optimize.differential_evolution(lambda nu:-f(args,nu),bounds)
 
fopt = max.fun

给我我想要的正确价值。但是,现在我想做同样的事情,但在两个参数上有所不同;称他们为 nu 和 mu。我试过了

max = scipy.optimize.differential_evolution(lambda nu,mu:-f(args,nu,mu),bounds)

fopt = max.fun

但我得到一个错误。使用上述方法对多个参数进行优化的正确方法是什么?

4

1 回答 1

1

您可以通过将多个参数作为列表传递给scipy.optimize.differential_evolution. 例如,假设以下函数将列表x作为参数:

def fun(x):
    return x[0] + x[1]

假设第一个参数是nu(对应于x[0]),第二个参数是(mu对应于x[1])。nu为和相应地定义界限mu,然后您可以同时优化两者:

from scipy.optimize import differential_evolution

bounds = [(0,2), (0,3)] # for e.g., (0,2) for nu and (0,3) for mu
max = differential_evolution(fun, bounds)
fopt = max.fun

使用lambda

from scipy.optimize import differential_evolution

fun = lambda x: x[0]+x[1]
bounds = [(0,2), (0,3)] # for e.g., (0,2) for nu and (0,3) for mu
max = differential_evolution(fun, bounds)
fopt = max.fun

在您的特定情况下,您的 lambda 函数lambda nu,mu:-f(args,nu,mu)返回 function 的负值f。在这里,您可以分别传递numu在列表中xlambda x:-f(args,x)和解包。xfnumu

于 2022-02-04T13:40:53.803 回答