Metaheuristics.jl
Metaheuristics
is a Julia package implementing metaheuristic algorithms for global optimization that does not require for the optimized function to be differentiable.
Installation: OptimizationMetaheuristics.jl
To use this package, install the OptimizationMetaheuristics package:
import Pkg;
Pkg.add("OptimizationMetaheuristics");
Global Optimizer
Without Constraint Equations
A Metaheuristics
Single-Objective algorithm is called using one of the following:
Evolutionary Centers Algorithm:
ECA()
Differential Evolution:
DE()
with 5 different strategiesDE(strategy=:rand1)
- default strategyDE(strategy=:rand2)
DE(strategy=:best1)
DE(strategy=:best2)
DE(strategy=:randToBest1)
Particle Swarm Optimization:
PSO()
Artificial Bee Colony:
ABC()
Gravitational Search Algorithm:
CGSA()
Simulated Annealing:
SA()
Whale Optimization Algorithm:
WOA()
Metaheuristics
also performs Multiobjective optimization
, but this is not yet supported by Optimization
.
Each optimizer sets default settings based on the optimization problem, but specific parameters can be set as shown in the original Documentation
Additionally, Metaheuristics
common settings which would be defined by Metaheuristics.Options
can be simply passed as special keyword arguments to solve
without the need to use the Metaheuristics.Options
struct.
Lastly, information about the optimization problem such as the true optimum is set via Metaheuristics.Information
and passed as part of the optimizer struct to solve
e.g., solve(prob, ECA(information=Metaheuristics.Information(f_optimum = 0.0)))
The currently available algorithms and their parameters are listed here.
Notes
The algorithms in Metaheuristics
are performing global optimization on problems without constraint equations. However, lower and upper constraints set by lb
and ub
in the OptimizationProblem
are required.
Examples
The Rosenbrock function can be optimized using the Evolutionary Centers Algorithm ECA()
as follows:
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
Per default Metaheuristics
ignores the initial values x0
set in the OptimizationProblem
. In order to for Optimization
to use x0
we have to set 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
With Constraint Equations
While Metaheuristics.jl
supports such constraints, Optimization.jl
currently does not relay these constraints.