Julia的Optim.jl包无法执行盒装优化

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Julia的Optim.jl包无法执行盒装优化相关的知识,希望对你有一定的参考价值。

我试图从Optim.jl documentation运行一个例子:

using Optim

f(x) = (1.0 - x[1])^2 + 100.0 * (x[2] - x[1]^2)^2


function g!(G, x)
G[1] = -2.0 * (1.0 - x[1]) - 400.0 * (x[2] - x[1]^2) * x[1]
G[2] = 200.0 * (x[2] - x[1]^2)
end

lower = [1.25, -2.1]
upper = [Inf, Inf]
initial_x = [2.0, 2.0]
inner_optimizer = GradientDescent()
results = optimize(f, g!, lower, upper, initial_x, Fminbox(inner_optimizer))

它返回:

ERROR: LoadError: MethodError: Cannot `convert` an object of type Optim.GradientDescent{LineSearches.InitialPreviou
s{Float64},LineSearches.HagerZhang{Float64},Void,Optim.##43#45} to an object of type Optim.Fminbox
This may have arisen from a call to the constructor Optim.Fminbox(...),
since type constructors fall back to convert methods.

我无法弄清楚出了什么问题。如果问题不使用下限和上限,它可以运行:

 results = optimize(f, g!, initial_x)
答案

您最有可能使用Optim版本0.14.1,在这种情况下您应该写:

optimize(f, g!, initial_x, lower, upper, Fminbox{GradientDescent}())

一切都干净利落。

与您的代码的差异是:

  • 参数顺序 - 初始点应该是第三个参数
  • 你用不同的方式调用Fminbox构造函数

您正在使用的语法需要Optim 0.15.1,它可以正常工作。

以上是关于Julia的Optim.jl包无法执行盒装优化的主要内容,如果未能解决你的问题,请参考以下文章

错误:无法从URL或路径确定包名称

OpenACC Julia 图形

Julia DataFrames - 如何进行一次热编码?

运行 Julia .jl 文件

Julia:在运行时生成代码并将其存储以供将来评估/执行

Julia和Bash - Julia的shell模式不执行〜/ .bash_profile(或〜/ .bashrc)