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