Metaheuristics - an Intuitive Package for Global Optimization
Author: Jesús-Adolfo Mejía-de-Dios (@jmejia8)
High-performance algorithms for optimization coded purely in a high-performance language.
Introduction
Optimization is one of the most common tasks in the scientific and industrial field but real-world problems require high-performance algorithms to optimize non-differentiable, non-convex, discontinuous functions. Different metaheuristics algorithms have been proposed to solve optimization problems but without strong assumptions about the objective function.
This package implements state-of-the-art metaheuristics algorithms for global optimization. The package aims to provide easy-to-use (and fast) metaheuristics for numerical global optimization.
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")
Quick Start
Assume you want to solve the following minimization problem.
Minimize:
where
Solution
Firstly, import the Metaheuristics package:
using Metaheuristics
Code the objective function:
f(x) = 10length(x) + sum( x.^2 - 10cos.(2π*x) )
nothing # hide
Instantiate the bounds:
D = 10
bounds = boxconstraints(lb = -5ones(D), ub = 5ones(D))
nothing # hide
Also, bounds
can be a 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
.
import Random: seed! # hide
seed!(50) # hide
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.
minimum(result)
minimizer(result)
Contents
Pages = ["examples.md", "algorithms.md", "problems.md", "indicators.md", "mcdm.md", "visualization.md", "api.md"]
Depth = 2
Related packages
- Evolutionary.jl: Genetic algorithms, "Evolution" Strategies, among others.
- GeneticAlgorithms.jl: Genetic Algorithms
- BlackBoxOptim.jl: Optimizers for black-box optimization (no information about the objective function).
- NODAL.jl: Stochastic Local Search methods, such as Simulated Annealing and Tabu Search.
- Other Packages.
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
.
Acknowledgments
Jesús Mejía acknowledges support from the Mexican Council for Science and Technology (CONACyT) through a scholarship to pursue graduate studies at the University of Veracruz, MEXICO.
This allowed the development of Metaheuristics.jl
from August 2018 to July 2022.