EvoAl core implementation consists of multiple modules (realised as Maven projects) that provide different APIs and functionality. In the following, we will sketch the currently existing modules, their purpose, and their dependencies (among each other).
flowchart LR
core.main
core.junit
core.arff
generator.main
optimisation.api
optimisation.ea
optimisation.pso
surrogate.api
surrogate.simple
surrogate.smile
surrogate.adaption
core.arff --> core.main
core.junit --> core.main
generator.main --> core.main
generator.main --> optimisation.api
optimisation.api --> core.main
optimisation.ea --> optimisation.api
optimisation.pso --> optimisation.api
surrogate.api --> core.main
surrogate.api --> optimisation.api
surrogate.simple --> surrogate.api
surrogate.smile --> surrogate.api
surrogate.adaption --> surrogate.api
surrogate.adaption --> optimisation.api
core.main
The module core.main
contains the most fundamental concepts of EvoAl, such as the Blackboard, the CDI orchestration, model handling, and DSL handling. This module contains no optimisation or machine-learning-specific code to keep EvoAl as flexible as possible.
core.junit
The module core.junit
contains some helpers for unit testing, such as resource loading, DSL configuration, and DSL loading from the src/test/resources
folder (for regression testing).
core.jacoco
The module core.jacoco
(not mentioned in the overview) is a technical artifact that is necessary to do proper code coverage measurement.
core.arff
The module core.arff
contains code to support the Weka ARFF format for datasets.
generator.main
The module generator.main
implements a data generation framework based on benchmark functions typically used in the optimisation domain. Therefore, it uses the Generator DSL.
Additionally, the benchmark functions can be used as fitness functions in the optimisation use-case.
optimisation.api
The module optimisation.api
provides the core concepts that are common to all optimisation algorithms, such as fitness functions, initial population providers, and so on.
Any optimisation algorithm uses these elements to be able to reuse existing implementations and extensions, such as benchmark functions or surrogate models.
optimisation.ea
The module optimisation.ea
implements the evolutionary algorithm and its specialisations, such as, genetic programming.
optimisation.pso
The particle swam optimisation algorithm is implemented in the module optimisation.pso
.
surrogate.api
API and default implementations for surrogate learning (and usage) can be found in the surrogate.api
module.
The module parses the training specification, loads data, starts the training process, and calls quality of fit calculators.
surrogate.simple
The module surrogate.simple
implements some very simple model learners.
surrogate.smile
The module surrogate.smile
uses the SMILE library to offer support vector regression.
surrogate.adaption
Surrogate adaption techniques, based on the density of training data or the prediction interval are implemented in the module surrogate.adaption
.