The search for an optimal solution among many possible solutions is a recurring
Optimisation and machine-learning tasks are constant companions in research, nowadays.
problem. Research proposed many algorithms for solving such problems.
There are several user groups working with optimisation and machine-learning task.
Nevertheless, there is a gap between optimisation research and practice. While
A central group are users, that want to use these algorithms, configure them and apply them
there is plenty of research it is still necessary to code optimisation tools
to their respective problems. Another group are researchers developing new algorithms or adaptions
by hand to solve actual problems. With EvoAl, we try to close this gap by applying
of these algorithms in these areas that want to evaluate these algorithms.
ideas from software engineering, such as domain-specific languages. EvoAl uses
Researchers that want to replicate results of other publications are also potential user.
domain-specific languages to describe the domain data, the optimisation problem
and the optimisation algorithm configuration.
While various tools and libraries offer possibilities to work with optimisation algorithms and
machine learning, there often is either a gap between algorithm development and evaluation
or a difficulty for easily making results reproducible, or the combination with constantly changing
domain information causes maintainability problems.
With EvoAl, we try to close this gaps and solve these problems by applying
ideas from software engineering to the optimisation and machine-learning domain, such as domain-specific languages. EvoAl uses domain-specific languages to describe the domain data, the optimisation problem
and the optimisation algorithm configuration and allows execution by providing implementations for
many of these algorithms.
# Features of EvoAl
EvoAl currently two different parts: The languages necessary for writing the configuration files to specify the algorithms to and include domain knowledge. The second part is the realisation of the actual algorithms in (at the moment Java) which will be adapted according to the configuration files. These realisations can again be divided into three areas at the moment: Optimisation, Machine Learning, and Data Handling.
## Optimisation Algorithms
EvoAl currently offers a wide variety of nature-inspired optimisation algorithms. It, however, does not yet include gradient-based optimisation algorithms or algorithms from the area of integer programming/linear programming.
Algorithms that EvoAl offers are:
* Hill-Climbing algorithms
* Simulated Annealing (with different temperature decrease functions)
* Threshold Accepting
* Particle Swarm Optimisation
* Evolutionary Algorithms (with different encoding, mutation, and recombination, as well as selection operators - we include the Jenetics library here, which offers great support in that area)
* Genetic Programming
Additionally, we have support for _model-based optimisation_ which also allows working with graph-based problems.
We plan to extend the list supported algorithms in the future, and whoever wants to contribute, is welcome to do so (have a look at **How to contribute** at the end of this page).
## Machine Learning Algorithms
Machine Learning Tasks usually contain three different parts: First, the capability for training, second, the capability of hyperparameter training and thus computing quality measures of the trained models, and third, the capability of using the trained model for predictions. All three are offered by EvoAl.
Offered machine learning algorithms (we currently have a focus on regression algorithms, however, classification algorithms can easily be included):
* Support Vector Regression
* Linear Regression
* Quadratic Regression
* Random Forest (work in progress)
* k-nearest neighbour (work in progres)
* Gaussian Processes (work in progress)
We offer the following quality measures and techniques:
* k-fold crossvalidation
* coefficient of determination (R²)
* MSE
* MAPE (work-in-progress)
* RRME (work-in-progress)
* Precalculations for prediction and confidence intervals
## Data Handling
Oftentimes, when working with data, different steps of data handling are necessary, e.g., the generation of data, noising of data, transforming of data for scaling, and many more. EvoAl offers different forms of data handling, data transformation or generation capabilities, that can easily be configured or extended for your own needs.
* Data generation:
## Languages
# How to get started
Depending on your use case, we have different tutorials to get you started.