AnyMath 文档

通过使用链接求解器创建聚汞合金 翻拍

该页面正在翻译中。

使用多个求解器使用探索-收敛交替的一般框架通常被称为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

耶! 我们已经找到了全局最优(这是已知的在 ).