使用 scipy 的微分进化改变多个参数
Varying over multiple parameters with scipy's differential evolution
我正在使用 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
但是我得到一个错误。使用上述方法对多个参数进行优化的正确方法是什么?
您可以通过将多个参数作为列表传递给 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)
返回函数 f
的负值。在这里,您可以将列表 x
中的 nu
和 mu
作为 lambda x:-f(args,x)
传递,并在 f
中将 x
解压为 nu
和 mu
分别.
我正在使用 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
但是我得到一个错误。使用上述方法对多个参数进行优化的正确方法是什么?
您可以通过将多个参数作为列表传递给 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)
返回函数 f
的负值。在这里,您可以将列表 x
中的 nu
和 mu
作为 lambda x:-f(args,x)
传递,并在 f
中将 x
解压为 nu
和 mu
分别.