Metaheuristics.jl icon indicating copy to clipboard operation
Metaheuristics.jl copied to clipboard

High-performance metaheuristics for optimization coded purely in Julia.

Metaheuristics

Metaheuristics logo

High-performance metaheuristics for global optimization.

Build Status codecov Doc Doc DOI

Installation

Open the Julia (Julia 1.1 or later) REPL and press ] to open the Pkg prompt. To add this package, use the add command:

pkg> add Metaheuristics

Or, equivalently, via the Pkg API:

julia> import Pkg; Pkg.add("Metaheuristics")

Algorithms

Some representative metaheuristics are developed here, including those for single- and multi-objective optimization. Moreover, some constraint handling techniques have been considered in most of the implemented algorithms.

Single-Objective Optimization

  • ECA: Evolutionary Centers Algorithm
  • DE: Differential Evolution
  • PSO: Particle Swarm Optimization
  • ABC: Artificial Bee Colony
  • GSA: Gravitational Search Algorithm
  • SA: Simulated Annealing
  • WOA: Whale Optimization Algorithm
  • MCCGA: Machine-coded Compact Genetic Algorithm
  • GA: Genetic Algorithm

Multi-Objective Optimization

SMS-EMOA in Metaheuristics.jl

  • MOEA/D-DE: Multi-objective Evolutionary Algorithm based on Decomposition
  • NSGA-II: A fast and elitist multi-objective genetic algorithm: NSGA-II
  • NSGA-III: Evolutionary Many-Objective Optimization Algorithm Using Reference-Point-Based Nondominated Sorting Approach
  • SMS-EMOA: An EMO algorithm using the hypervolume measure as the selection criterion
  • SPEA2: Improved Strength Pareto Evolutionary Algorithm
  • CCMO: Coevolutionary Framework for Constrained Multiobjective Optimization

Performance Indicators

  • GD: Generational Distance
  • IGD, IGD+: Inverted Generational Distance (Plus)
  • C-metric: Covering Indicator
  • HV: Hypervolume
  • Δₚ (Delta p): Averaged Hausdorff distance
  • Spacing Indicator
  • and more...

Multi-Criteria Decision-Making

Multi-Criteria Decision Making methods are available, including:

Quick Start

Assume you want to solve the following minimization problem.

Rastrigin Surface

Minimize:

$$f(x) = 10D + \sum_{i=1}^D x_i^2 - 10\cos(2\pi x_i)$$

where $x\in [-5, 5]^D$, that is, each coordinate in $x$ is between -5 and 5. Use $D=10$.

Solution

Firstly, import the Metaheuristics package:

using Metaheuristics

Code the objective function:

f(x) = 10length(x) + sum( x.^2 - 10cos.(2π*x)  )

Instantiate the bounds, note that bounds should be a $2\times 10$ Matrix where the first row corresponds to the lower bounds whilst the second row corresponds to the upper bounds.

D = 10
bounds = [-5ones(D) 5ones(D)]'

Approximate the optimum using the function optimize.

result = optimize(f, bounds)

Optimize returns a State datatype which contains some information about the approximation. For instance, you may use mainly two functions to obtain such an approximation.

@show minimum(result)
@show minimizer(result)

Documentation

See the documentation for more details, examples and options.

Contributing

Please, be free to send me your PR, issue or any comment about this package for Julia.