NOMAD.jl
|
Страница в процессе перевода. |
NOMAD — это пакет Julia, который взаимодействует с NOMAD, реализацией алгоритма прямого поиска на адаптивных сетках (Mesh Adaptive Direct Search, MADS) на языке C++, предназначенного для решения сложных задач оптимизации черного ящика. Это такие задачи, когда для получения функций, определяющих цель и ограничения, требуется затратное компьютерное моделирование. NOMAD.jl documentation
Алгоритм NOMAD вызывается функцией NOMADOpt().
Установка: OptimizationNOMAD.jl
Чтобы использовать этот пакет, установите пакет OptimizationNOMAD:
import Pkg;
Pkg.add("OptimizationNOMAD");
Глобальный оптимизатор
Без уравнений ограничений
Метод в NOMAD выполняет глобальную оптимизацию задач как с уравнениями ограничений, так и без них. Однако линейные и нелинейные ограничения, определенные в Optimization, в настоящее время не передаются.
NOMAD работает как с нижними и верхними прямоугольными границами, заданными в lb и ub в OptimizationProblem, так и без них.
Примеры
Функцию Розенброка можно оптимизировать с помощью NOMADOpt() с прямоугольными ограничениями и без них следующим образом:
using Optimization, OptimizationNOMAD
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 = OptimizationProblem(f, x0, p)
sol = Optimization.solve(prob, NOMADOpt())
prob = OptimizationProblem(f, x0, p, lb = [-1.0, -1.0], ub = [1.5, 1.5])
sol = Optimization.solve(prob, NOMADOpt())
retcode: Default
u: 2-element Vector{Float64}:
0.999457
0.99893