Genetics4j
Introduction
Genetics4j is an open source library for Evolutionary Algorithms. This includes Genetic Algorithm, Genetic Programming and more!
Features
-
Genetic Algorithms
-
Strongly Typed Genetic Programming
-
Multi-Objective Optimization support with algorithms such as NSGA2 and SPEA2
-
NeuroEvolution of Augmenting Topologies, also known as NEAT
-
Supports multiple replacement strategies
-
Configurable and user friendly
-
Multi-GPU and Multithreaded based implementations for faster execution
-
Clear separation between the problem definition and its execution model
-
Enhanced test coverage with mutation testing :)
The project is located at https://gitlab.com/bmahe/genetics4j and is licensed under the Apache License v2.0.
Modules
Genetics4j encompass multiple aspects of the Evolutionary Algorithms family through different modules:
-
core: Contains the core features for Genetic Algorithms
-
gp: Contains features related to Genetic Programming
-
moo: Contains features related to Multi-Objective Optimization
-
neat: Contains features related to NeuroEvolution of Augmenting Topologies, also known as NEAT
-
gpu: Multi-GPU and hardware accelerator support
-
samples: Contains different examples to highlight the different features and how to use them
-
extras: Extra set of classes which can be useful but do not necessarily fit in other modules. Example: There is a CSV Evolution listener to record population over time along with any extra configurable attributes
Documentation
There are various ways to learn more about Genetics4j:
-
There is a Quick Start guide to help you get up and running in minutes!
-
Each module contains its own documentation
-
Javadocs are built for the whole project as well as for each individual modules. They can be found under Project Reports
-
Various additional reports are also published under Project Reports, including changelogs and tests results and coverage
Examples
There are a few examples with this library. Namely:
-
Clustering where we attempt to find the best way to cluster data and compare the different approaches
-
Mixture Models where we attempt to find the best way to cluster data using mixture models with the help of GPUs
-
6 ways to handle your bloat issues where we explore different methods from the Multi Objective Optimization field to find the best equation to represent a set of data points. This provides us a way to find a good trade-off between long and precise equations and shorter but less precise equations
-
Fitness Sharing where we present one technique to reduce the likelihood to get stuck in a local optimum and explore a great set of diverse solutions
-
Impelementing XOR with NEAT where we implement a XOR gate with NeuroEvolution of Augmenting Topologies (NEAT)
-
Evolutionary Painting with GPUs where we use genetic algorithms to generate whole paintings. We also use GPUs for faster computations