MultiStartOptimization.jl
|
Страница в процессе перевода. |
MultistartOptimization — это пакет Julia, реализующий метод мультистарта для глобальной оптимизации, который выполняет локальную оптимизацию после выбора нескольких начальных точек.
MultistartOptimization требует определения как глобального, так и локального метода. Глобальный метод мультистарта выбирает набор начальных точек, из которых начинается выполнение локального метода.
В настоящее время реализован только один глобальный метод (TikTak), который вызывается как MultistartOptimization.TikTak(n), где n — количество начальных точек Соболя.
Установка: OptimizationMultistartOptimization.jl
Чтобы использовать этот пакет, установите пакет OptimizationMultistartOptimization:
import Pkg;
Pkg.add("OptimizationMultistartOptimization");
|
Note Кроме того, необходимо загрузить соответствующий подпакет для выбранного локального метода. Например, если вы планируете использовать один из оптимизаторов NLopt.jl, следует установить и загрузить OptimizationNLopt, как описано в разделе NLopt.jl. |
Глобальный оптимизатор
Без уравнений ограничений
Методы в MultistartOptimization выполняют глобальную оптимизацию задач без уравнений ограничений. Однако требуются нижние и верхние ограничения, заданные в lb и ub в OptimizationProblem.
Примеры
Функцию Розенброка можно оптимизировать с помощью MultistartOptimization.TikTak(), используя 100 начальных точек и локальный метод NLopt.LD_LBFGS(), следующим образом:
using Optimization, OptimizationMultistartOptimization, 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, MultistartOptimization.TikTak(100), NLopt.LD_LBFGS())
Вы можете использовать любые оптимизаторы Optimization на ваш выбор. Глобальный метод MultistartOptimization — это позиционный аргумент, за которым следует локальный метод. Например, можно выполнить оптимизацию методом мультистарта с LBFGS в качестве оптимизатора, используя реализацию из NLopt.jl или Optim.jl, следующим образом. Более того, этот интерфейс позволяет получать доступ и настраивать все параметры оптимизатора обычным образом:
using OptimizationOptimJL
f = OptimizationFunction(rosenbrock, Optimization.AutoForwardDiff())
prob = Optimization.OptimizationProblem(f, x0, p, lb = [-1.0, -1.0], ub = [1.0, 1.0])
sol = solve(prob, MultistartOptimization.TikTak(100), LBFGS(), maxiters = 5)