AnyMath 文档

NLopt。jl

该页面正在翻译中。

脧锚脧赂`N.NLopt`Julia包是否与自由/开源接口http://ab-initio.mit.edu/nlopt[脧锚脧赂`NLopt图书馆`]其中实现了全局和局部的许多优化方法https://nlopt.readthedocs.io/en/latest/NLopt_Algorithms/[NLopt文档].

安装:OptimizationNLopt.jl

要使用此软件包,请安装OptimizationNLopt软件包:

import Pkg;
Pkg.add("OptimizationNLopt");

方法

NLopt。jl 算法可以通过以下方式选择 NLopt。Opt(:algname,nstates) 其中nstates是要优化的状态数,但最好是通过 NLopt。算法名称() 哪里 `AlgorithmName可以是以下之一:

* NLopt.GN_DIRECT() * NLopt.GN_DIRECT_L() * NLopt.GN_DIRECT_L_RAND() * NLopt.GN_DIRECT_NOSCAL() * NLopt.GN_DIRECT_L_NOSCAL() * NLopt.GN_DIRECT_L_RAND_NOSCAL() * NLopt.GN_ORIG_DIRECT() * NLopt.GN_ORIG_DIRECT_L() * NLopt.GD_STOGO() * NLopt.GD_STOGO_RAND() * NLopt。LD_LBFGS() * NLopt。LN_PRAXIS() * NLopt。LD_VAR1() * NLopt。LD_VAR2() * NLopt。LD_TNEWTON() * NLopt。LD_TNEWTON_RESTART() * NLopt。LD_TNEWTON_PRECOND() * NLopt。LD_TNEWTON_PRECOND_RESTART() * NLopt.GN_CRS2_LM() * NLopt.GN_MLSL() * NLopt.GD_MLSL() * NLopt.GN_MLSL_LDS() * NLopt.GD_MLSL_LDS() * NLopt。LD_MMA() * NLopt。LN_COBYLA() * NLopt。LN_NEWUOA() * NLopt。LN_NEWUOA_BOUND() * NLopt。LN_NELDERMEAD() * NLopt。LN_SBPLX() * NLopt的。LN_AUGLAG() * NLopt的。LD_AUGLAG() * NLopt的。LN_AUGLAG_EQ() * NLopt的。LD_AUGLAG_EQ() * NLopt的。LN_BOBYQA() * NLopt.GN_ISRES() * NLopt的。奥格拉格() * NLopt的。AUGLAG_EQ() * NLopt。G_MLSL() * NLopt。G_MLSL_LDS() * NLopt。LD_SLSQP() * NLopt。LD_CCSAQ() * NLopt.GN_ESCH() * NLopt.GN_AG()

查看https://nlopt.readthedocs.io/en/latest/NLopt_Algorithms/[NLopt文档]有关每个优化器的更多详细信息。

除了通用参数,以下优化器参数可以设置为 夸格斯:

* 停止,停止 * xtol_rel * xtol_abs * [医]缩合剂 * 初始步骤 * 人口 * 矢量_存储

本地优化器

无衍生品

无导数优化器是即使在没有指定导数或自动微分的情况下也可以使用的优化器。 虽然它们往往比基于导数的优化器效率低,但它们可以很容易地应用于定义导数很困难的情况。 请注意,虽然这些方法不支持一般约束,但所有方法都支持通过 磅/磅ub优化问题. N.NLopt 无导数优化器是:

* NLopt的。LN_PRAXIS() * NLopt的。LN_COBYLA() * NLopt的。LN_NEWUOA() * NLopt。LN_NEWUOA_BOUND() * NLopt。LN_NELDERMEAD() * NLopt的。LN_SBPLX() * NLopt的。LN_AUGLAG() * NLopt的。LN_AUGLAG_EQ() * NLopt。LN_BOBYQA()

Rosenbrock函数可以使用 NLopt。LN_NELDERMEAD() 如下:

using Optimization
using OptimizationNLopt
rosenbrock(x, p) = (p[1] - x[1])^2 + p[2] * (x[2] - x[1]^2)^2
x0 = zeros(2)
p = [1.0, 100.0]
f = OptimizationFunction(rosenbrock)
prob = Optimization.OptimizationProblem(f, x0, p, lb = [-1.0, -1.0], ub = [1.0, 1.0])
sol = solve(prob, NLopt.LN_NELDERMEAD())
retcode: Success
u: 2-element Vector{Float64}:
 1.0
 1.0

基于梯度的

基于梯度的优化器是利用基于定义的导数或自动微分的梯度信息的优化器。 N.NLopt 基于梯度的优化器是:

* NLopt。LD_LBFGS_NOCEDAL() * NLopt。LD_LBFGS() * NLopt。LD_VAR1() * NLopt。LD_VAR2() * NLopt。LD_TNEWTON() * NLopt的。LD_TNEWTON_RESTART() * NLopt的。LD_TNEWTON_PRECOND() * NLopt。LD_TNEWTON_PRECOND_RESTART() * NLopt。LD_MMA() * NLopt的。LD_AUGLAG() * NLopt的。LD_AUGLAG_EQ() * NLopt的。LD_SLSQP() * NLopt。LD_CCSAQ()

Rosenbrock函数可以使用以下方法进行优化 NLopt的。LD_LBFGS() 如下:

using Optimization, OptimizationNLopt
rosenbrock(x, p) = (p[1] - x[1])^2 + p[2] * (x[2] - x[1]^2)^2
x0 = zeros(2)
p = [1.0, 100.0]
f = OptimizationFunction(rosenbrock, Optimization.AutoForwardDiff())
prob = Optimization.OptimizationProblem(f, x0, p, lb = [-1.0, -1.0], ub = [1.0, 1.0])
sol = solve(prob, NLopt.LD_LBFGS())
retcode: Success
u: 2-element Vector{Float64}:
 1.0
 1.0

全局优化器

无约束方程

以下算法在https://github.com/JuliaOpt/NLopt.jl[脧锚脧赂`N.NLopt`]正在对没有约束方程的问题进行全局优化。 然而,下限和上限约束由 磅/磅ub优化问题 是必需的。 N.NLopt 属于此类别的全局优化器是:

* NLopt.GN_DIRECT() * NLopt.GN_DIRECT_L() * NLopt.GN_DIRECT_L_RAND() * NLopt.GN_DIRECT_NOSCAL() * NLopt.GN_DIRECT_L_NOSCAL() * NLopt.GN_DIRECT_L_RAND_NOSCAL() * NLopt.GD_STOGO() * NLopt.GD_STOGO_RAND() * NLopt.GN_CRS2_LM() * NLopt.GN_MLSL() * NLopt.GD_MLSL() * NLopt.GN_MLSL_LDS() * NLopt.GD_MLSL_LDS() * NLopt的。G_MLSL() * NLopt。G_MLSL_LDS() * NLopt.GN_ESCH()

Rosenbrock函数可以使用以下方法进行优化 NLopt.GN_DIRECT() 如下:

using Optimization, OptimizationNLopt
rosenbrock(x, p) = (p[1] - x[1])^2 + p[2] * (x[2] - x[1]^2)^2
x0 = zeros(2)
p = [1.0, 100.0]
f = OptimizationFunction(rosenbrock)
prob = Optimization.OptimizationProblem(f, x0, p, lb = [-1.0, -1.0], ub = [1.0, 1.0])
sol = solve(prob, NLopt.GN_DIRECT(), maxtime = 10.0)
retcode: MaxTime
u: 2-element Vector{Float64}:
 0.9999999999999858
 0.9999999999999716

算法如 NLopt。G_MLSL()NLopt。G_MLSL_LDS() 还需要选择一个本地优化器,该优化器通过 本地-本地 的论点 解决方案.

Rosenbrock函数可以使用以下方法进行优化 NLopt。G_MLSL_LDS()NLopt。LN_NELDERMEAD() 作为本地优化器。 局部优化器的最大迭代通过 本地axiters:

using Optimization, OptimizationNLopt
rosenbrock(x, p) = (p[1] - x[1])^2 + p[2] * (x[2] - x[1]^2)^2
x0 = zeros(2)
p = [1.0, 100.0]
f = OptimizationFunction(rosenbrock, Optimization.AutoForwardDiff())
prob = Optimization.OptimizationProblem(f, x0, p, lb = [-1.0, -1.0], ub = [1.0, 1.0])
sol = solve(prob, NLopt.G_MLSL_LDS(), local_method = NLopt.LD_LBFGS(), maxtime = 10.0,
    local_maxiters = 10)
retcode: MaxTime
u: 2-element Vector{Float64}:
 1.0
 1.0

用约束方程

以下算法在https://github.com/JuliaOpt/NLopt.jl[脧锚脧赂`N.NLopt`]正在对约束方程的问题进行全局优化。 然而,下限和上限约束由 磅/磅ub优化问题 是必需的。

约束与NLopt平等和不等式方程支持 N.NLopt优化设计 不直接支持。 但是,您可以使用MOI包装器将约束与NLopt优化器一起使用。

N.NLopt 属于此类别的全局优化器是:

* NLopt.GN_ORIG_DIRECT() * NLopt.GN_ORIG_DIRECT_L() * NLopt.GN_ISRES() * NLopt.GN_AG()