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

Metaheuristics.jl

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

Metaheuristics — это пакет Julia, в котором реализованы метаэвристические алгоритмы для глобальной оптимизации, не требующей дифференцируемости оптимизируемой функции.

Установка: OptimizationMetaheuristics.jl

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

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

Глобальный оптимизатор

Без уравнений ограничений

Алгоритм Metaheuristics с одной целью вызывается одним из следующих способов:

  • Алгоритм эволюционных центров: ECA()

  • Дифференциальная эволюция: DE() с 5 различными стратегиями

    • DE(strategy=:rand1) — стратегия по умолчанию

    • DE(strategy=:rand2)

    • DE(strategy=:best1)

    • DE(strategy=:best2)

    • DE(strategy=:randToBest1)

  • Оптимизация методом роя частиц: PSO()

  • Искусственный пчелиный рой: ABC()

  • Алгоритм гравитационного поиска: CGSA()

  • Алгоритм имитации отжига: SA()

  • Алгоритм оптимизации на основе имитации поведения китов: WOA()

Metaheuristics также выполняет Multiobjective optimization, но эта возможность пока не поддерживается в Optimization.

Каждый оптимизатор устанавливает настройки по умолчанию с учетом задачи оптимизации, но можно задать конкретные параметры, как показано в исходной Documentation.

Кроме того, общие параметры Metaheuristics, которые определяются в Metaheuristics.Options, можно просто передать в solve как специальные именованные аргументы, не используя структуру Metaheuristics.Options.

Наконец, информация о задаче оптимизации, например истинный оптимум, задается посредством Metaheuristics.Information и передается в рамках структуры оптимизатора в solve, например solve(prob, ECA(information=Metaheuristics.Information(f_optimum = 0.0)))

Доступные в настоящее время алгоритмы и их параметры перечислены здесь.

Примечания

Алгоритмы в Metaheuristics выполняют глобальную оптимизацию задач без уравнений ограничений. Однако требуются нижние и верхние ограничения, заданные в lb и ub в OptimizationProblem.

Примеры

Функцию Розенброка можно оптимизировать с помощью алгоритма эволюционных центров ECA() следующим образом:

using Optimization, OptimizationMetaheuristics
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, ECA(), maxiters = 100000, maxtime = 1000.0)
retcode: Default
u: 2-element Vector{Float64}:
 1.0
 1.0

По умолчанию Metaheuristics игнорирует начальные значения x0, заданные в OptimizationProblem. Чтобы в Optimization использовались значения x0, необходимо задать use_initial=true:

sol = solve(prob, ECA(), use_initial = true, maxiters = 100000, maxtime = 1000.0)
retcode: Default
u: 2-element Vector{Float64}:
 1.0
 1.0

С уравнениями ограничений

Хотя Metaheuristics.jl поддерживает такие ограничения, Optimization.jl в настоящее время их не передает.