Документация Engee

PRIMA.jl

Страница в процессе перевода.

PRIMA.jl — это оболочка Julia для библиотеки Фортрана prima, которая реализует методы оптимизации Пауэлла без вычисления производных.

Установка: OptimizationPRIMA

Чтобы использовать этот пакет, установите пакет OptimizationPRIMA:

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

Локальный оптимизатор

Пакет PRIMA.jl предоставляет пять алгоритмов Пауэлла из библиотеки prima:

UOBYQA: (Unconstrained Optimization BY Quadratic Approximations, оптимизация квадратичными аппроксимациями без ограничений) — для оптимизации без ограничений, то есть Ω = ℝⁿ.

NEWUOA: также для оптимизации без ограничений. По утверждению М. Дж. Д. Пауэлла, алгоритм newuoa превосходит uobyqa.

BOBYQA: (Bounded Optimization BY Quadratic Approximations, оптимизация квадратичными аппроксимациями с границами) — для простых задач с ограничениями в виде границ, то есть Ω = { x ∈ ℝⁿ

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