PRIMA.jl
Установка: OptimizationPRIMA
Чтобы использовать этот пакет, установите пакет OptimizationPRIMA:
import Pkg;
Pkg.add("OptimizationPRIMA");
Локальный оптимизатор
Пакет PRIMA.jl предоставляет пять алгоритмов Пауэлла из библиотеки prima:
UOBYQA: (Unconstrained Optimization BY Quadratic Approximations, оптимизация квадратичными аппроксимациями без ограничений) — для оптимизации без ограничений, то есть Ω = ℝⁿ.
NEWUOA: также для оптимизации без ограничений. По утверждению М. Дж. Д. Пауэлла, алгоритм newuoa превосходит uobyqa.
|
xl ≤ x ≤ xu }. |
LINCOA: (LINearly Constrained Optimization, оптимизация с линейными ограничениями) для задач оптимизации с ограничениями в виде границ, линейных равенств и линейных неравенств.
COBYLA: (Constrained Optimization BY Linear Approximations, оптимизация линейными аппроксимациями с ограничениями) для общих задач оптимизации с ограничениями в виде границ, линейных равенств, линейных неравенств и нелинейными ограничениями.
using OptimizationBase, OptimizationPRIMA
rosenbrock(x, p) = (p[1] - x[1])^2 + p[2] * (x[2] - x[1]^2)^2
x0 = zeros(2)
_p = [1.0, 100.0]
prob = OptimizationProblem(rosenbrock, x0, _p)
sol = solve(prob, UOBYQA(), maxiters = 1000)
sol = solve(prob, NEWUOA(), maxiters = 1000)
sol = solve(prob, BOBYQA(), maxiters = 1000)
sol = solve(prob, LINCOA(), maxiters = 1000)
function con2_c(res, x, p)
res .= [x[1] + x[2], x[2] * sin(x[1]) - x[1]]
end
optprob = OptimizationFunction(rosenbrock, AutoForwardDiff(), cons = con2_c)
prob = OptimizationProblem(optprob, x0, _p, lcons = [1, -100], ucons = [1, 100])
sol = solve(prob, COBYLA(), maxiters = 1000)
retcode: Success
u: 2-element Vector{Float64}:
0.8
0.6399999996879134