Genetics4j is an open source library for Evolutionary Algorithms. This includes Genetic Algorithm, Genetic Programming and more!


  • 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 and is licensed under the Apache License v2.0.


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


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


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