Optim Julia单变量最小化与初始条件

时间:2016-01-13 17:48:49

标签: optimization julia

有没有办法在Julia中使用Optim进行单变量优化时指定初始条件(我希望提高速度)?看起来这不可能阅读文档,因为只有多变量优化似乎接受初始条件。我想我可以将我的问题指定为多变量问题,并忽略其中一个变量,但这并不是特别优雅。

2 个答案:

答案 0 :(得分:1)

如果您不想使用布伦特或黄金分割搜索,您可以简单地使用基于梯度或基于Hessian的方法,因为对于Optim中的大多数算法,R ^ n包括n = 1的情况。您必须遵循多变量方法的语法并传递矢量。

julia> using Optim, Plots
julia> f(x) = -2*x[1]+3*x[1]^2+sin(x[1]*3)
f (generic function with 1 method)

julia> plot(x->f4([x,]), lab = "Univariate Function")

julia> optimize(f, [2.5,], GradientDescent())
Results of Optimization Algorithm
 * Algorithm: Gradient Descent
 * Starting Point: [2.5]
 * Minimizer: [-0.12943993754432737]
 * Minimum: -6.948989e-02
 * Iterations: 5
 * Convergence: true
   * |x - x'| < 1.0e-32: false 
     |x - x'| = 3.35e-08 
   * |f(x) - f(x')| / |f(x)| < 1.0e-32: false
     |f(x) - f(x')| / |f(x)| = NaN 
   * |g(x)| < 1.0e-08: true 
     |g(x)| = 4.58e-12 
   * stopped by an increasing objective: false
   * Reached Maximum Number of Iterations: false
 * Objective Calls: 12
 * Gradient Calls: 12

enter image description here

答案 1 :(得分:0)

你的意思是布伦特的方法和黄金分割搜索?我认为这些方法的初始条件取决于您设置的初始下限和上限。因此,从这些算法的角度来看,为x_minimum提供初始猜测是多余的/错误的。

例如,在布伦特的方法中,估计最小值的初始值计算为:

x_minimum = x_lower + golden_ratio*(x_upper-x_lower)

请参阅source code