The MetaJul project is aimed at studying the implementation of metaheuristics in the Julia programming language. The implemented codes and unit tests are located, respectively, in the src
and tests test
folders. MetaJul is described in the paper Experiences Using Julia for Implementing Multi-objective Evolutionary Algorithms, presented at the MIC 2024 conference.
Current features:
Encoding: continuous (float, integer), binary, permutation
Problems:
- Single-objective problems: continuous (Sphere), binary (OneMax)
- Multi-objective problems: continuous (Fonseca, Schaffer, Kursawe, ZDT benchmark), binary (OneZeroMax), multi-objective TSP
- Constrained problems: Srinivas, ConstrEx, Bihn2, Tanaka, Osyczka2, Golinski, multi-objective Knapsack
Operators: mutation (uniform, polynomial, bit-flip, permutation swap), crossover (BLX-alpha, simulated binary crossover -SBX-, single-point, PMX), selection (random, binary tournament)
Algorithms: local search, evolutionary algorithm, genetic algorithm, NSGA-II, SMPSO (multi-objective PSO)
Archives: unbounded non-dominated archive, bounded crowding distance archive
Observers:
EvaluationObserver
,FitnessObserver
,FrontPlotObserver
. Observers can be registered in observable entities, such as evolutionary algorithms, at configuration time.
The examples
folder contains Julia programs illustrating how the included algorithms (local search, single objective evolutionary algorithm, NSGA-II, SMPSO) can be configured and executed.
Jupyter notebooks with examples can be found in the notebooks
folder.
The next steps to carry out are enumerated in the open issues page of the project.