通过使用链接求解器创建聚汞合金 翻拍
|
该页面正在翻译中。 |
使用多个求解器使用探索-收敛交替的一般框架通常被称为polyalgorithms。 在过去的优化。jl提供了一个 [医]多普特 解决者在 link:/optimization_packages/polyopt#OptimizationPolyalgorithms.jl[OptimizationPolyalgorithms。jl 它结合了优化者的亚当。来自Optim的BFGS的jl。jl. 通过接口提供大量的选择,求解器的独特组合可以有效地解决特定的问题。
在本教程中,我们将演示如何使用 翻拍 功能链在一起的求解器创建您自己的聚汞合金.
SciML接口提供了一个 翻拍 功能,它允许你重新创建 优化问题 从以前定义的 优化问题 优化变量的初始猜测不同。
让我们来看看超立方体中的10维schwefel函数 ].
using Optimization, OptimizationLBFGSB, Random
using OptimizationBBO, ReverseDiff
Random.seed!(122333)
function f_schwefel(x, p = [418.9829])
result = p[1] * length(x)
for i in 1:length(x)
result -= x[i] * sin(sqrt(abs(x[i])))
end
return result
end
optf = OptimizationFunction(f_schwefel, AutoReverseDiff(compile = true))
x0 = ones(10) .* 200.0
prob = OptimizationProblem(
optf, x0, [418.9829], lb = fill(-500.0, 10), ub = fill(500.0, 10))
@show f_schwefel(x0)
2189.853687755758
我们的polyalgorithm策略将使用BlackBoxOptim的全局优化器来有效地探索参数空间,然后使用准牛顿LBFGS方法(希望)收敛到全局最优。
res1 = solve(prob, BBO_adaptive_de_rand_1_bin(), maxiters = 4000)
@show res1.objective
592.7339938425041
这是一个良好的开端,我们能收敛到全局最优吗?
prob = remake(prob, u0 = res1.minimizer)
res2 = solve(prob, OptimizationLBFGSB.LBFGSB(), maxiters = 100)
@show res2.objective
118.4384618901176
耶! 我们已经找到了全局最优(这是已知的在 ).