2016-01-13 66 views
2

有沒有一種方法來指定一個初始條件(我希望提高速度)使用Optim在朱莉婭單變量優化?看起來這是不可能的,因爲只有多元優化才能接受初始條件。我想我可以將我的問題指定爲多變量問題,並忽略其中一個變量,但這不是特別優雅。Optim Julia單變量最小化與初始條件

回答

0

你的意思是布倫特的方法和黃金分割搜索?我認爲這些方法中的初始條件取決於您設置的初始下限和上限。因此,從這些算法的角度來看,提供x_minimum的初始猜測會是多餘/錯誤的。

例如,在布倫特的方法預計最低的初始值計算爲:

x_minimum = x_lower + golden_ratio*(x_upper-x_lower) 

source code

+0

謝謝。這太遺憾了。我在一個循環中使用了優化,我想將一次迭代的結果作爲初始猜測的更新提供給後續迭代。 –

+0

選擇一個初始區間大小:'x_upper + x_lower',然後使用上面的公式找到'x_upper'和'x_lower',它們給你'x_minimum'。你只需要小心,初始間隔足夠大,以包含你想要的解決方案的概率很高。 –

0

如果你不想爲使用布倫特原油或黃金分割搜索,您可以簡單地使用基於梯度或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