Julia:最小化具有多个参数的函数(BFGS)

mer*_*rch 1 optimization julia

我正在尝试使用BFGS算法最小化具有Optim.jl库的多个参数的函数.

在Optim库的GitHub网站上,我找到了以下工作示例:

using Optim
rosenbrock(x) = (1.0 - x[1])^2 + 100.0 * (x[2] - x[1]^2)^2
result        = optimize(rosenbrock, zeros(2), BFGS())
Run Code Online (Sandbox Code Playgroud)

让我们说我的目标函数是:

fmin(x, a) = (1.0 - x[1])^a + 100.0 * (x[2] - x[1]^2)^(1-a)
Run Code Online (Sandbox Code Playgroud)

我怎样才能通过额外的-常-参数一个采用优化

DSM*_*DSM 6

最简单的方法是传递一个变量的匿名函数,该函数使用参数集调用原始函数.例如,使用fmin的变体:

julia> fmin(x, a) = (1.0 - x[1])^a + 100.0 * (x[2] - x[1]^2)^(a)
fmin (generic function with 1 method)

julia> r = optimize(x->fmin(x, 2), zeros(2), BFGS());

julia> r.minimizer, r.minimum
([1.0,1.0],5.471432684244042e-17)
Run Code Online (Sandbox Code Playgroud)

或者,您可以为一个变量创建一个单独的命名函数,该函数将关闭您喜欢的任何参数.没有相当于Python args中的scipy.optimize.minimizein,你将非变量参数分别作为元组AFAIK传递.