jmejia8 / Metaheuristics.jl

High-performance metaheuristics for optimization coded purely in Julia.
https://jmejia8.github.io/Metaheuristics.jl/stable/
Other
255 stars 26 forks source link
constrained-optimization decision-making differential-evolution hypervolume multi-objective-optimization nsga2 optimization pso simulated-annealing

Metaheuristics

Metaheuristics logo

High-performance metaheuristics for global optimization.

Build Status codecov Aqua QA Doc Doc DOI

Installation

Open the Julia 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.

Combinatorial Optimization

Single-Objective Optimization

Multi-Objective Optimization

SMS-EMOA in Metaheuristics.jl

Performance Indicators

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:

D = 10
bounds = boxconstraints(lb = -5ones(D), ub = 5ones(D))

Also, bounds can be a $2\times 10$ Matrix where the first row corresponds to the lower bounds whilst the second row corresponds to the upper bounds.

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.

How to cite?

Please cite the package using the bibtex entry

@article{metaheuristics2022, 
  doi = {10.21105/joss.04723}, 
  url = {https://doi.org/10.21105/joss.04723}, 
  year = {2022}, 
  publisher = {The Open Journal}, 
  volume = {7}, 
  number = {78}, 
  pages = {4723}, 
  author = {Jesús-Adolfo Mejía-de-Dios and Efrén Mezura-Montes}, 
  title = {Metaheuristics: A Julia Package for Single- and Multi-Objective Optimization}, 
 journal = {Journal of Open Source Software} }

or the citation string

Mejía-de-Dios et al., (2022). Metaheuristics: A Julia Package for Single- and Multi-Objective Optimization. Journal of Open Source Software, 7(78), 4723, https://doi.org/10.21105/joss.04723

in your scientific paper if you use Metaheristics.jl.

Contributing

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