All Projects → jenetics → Jenetics

jenetics / Jenetics

Licence: apache-2.0
Jenetics - Genetic Algorithm, Genetic Programming, Evolutionary Algorithm, and Multi-objective Optimization

Programming Languages

java
68154 projects - #9 most used programming language

Projects that are alternatives of or similar to Jenetics

Pagmo2
A C++ platform to perform parallel computations of optimisation tasks (global and local) via the asynchronous generalized island model.
Stars: ✭ 540 (-12.34%)
Mutual labels:  artificial-intelligence, genetic-algorithm, evolutionary-algorithms, optimization
goga
Go evolutionary algorithm is a computer library for developing evolutionary and genetic algorithms to solve optimisation problems with (or not) many constraints and many objectives. Also, a goal is to handle mixed-type representations (reals and integers).
Stars: ✭ 39 (-93.67%)
Mutual labels:  optimization, genetic-algorithm, evolutionary-algorithms
Eaopt
🍀 Evolutionary optimization library for Go (genetic algorithm, partical swarm optimization, differential evolution)
Stars: ✭ 718 (+16.56%)
Mutual labels:  genetic-algorithm, evolutionary-algorithms, optimization
Solid
🎯 A comprehensive gradient-free optimization framework written in Python
Stars: ✭ 546 (-11.36%)
Mutual labels:  artificial-intelligence, genetic-algorithm, optimization
Pyribs
A bare-bones Python library for quality diversity optimization.
Stars: ✭ 66 (-89.29%)
Mutual labels:  artificial-intelligence, evolutionary-algorithms, optimization
Pygmo2
A Python platform to perform parallel computations of optimisation tasks (global and local) via the asynchronous generalized island model.
Stars: ✭ 134 (-78.25%)
Mutual labels:  artificial-intelligence, evolutionary-algorithms, optimization
Scikit Opt
Genetic Algorithm, Particle Swarm Optimization, Simulated Annealing, Ant Colony Optimization Algorithm,Immune Algorithm, Artificial Fish Swarm Algorithm, Differential Evolution and TSP(Traveling salesman)
Stars: ✭ 2,791 (+353.08%)
Mutual labels:  artificial-intelligence, genetic-algorithm, optimization
zoofs
zoofs is a python library for performing feature selection using a variety of nature-inspired wrapper algorithms. The algorithms range from swarm-intelligence to physics-based to Evolutionary. It's easy to use , flexible and powerful tool to reduce your feature size.
Stars: ✭ 142 (-76.95%)
Mutual labels:  optimization, genetic-algorithm, evolutionary-algorithms
Geneticalgorithmpython
Source code of PyGAD, a Python 3 library for building the genetic algorithm and training machine learning algorithms (Keras & PyTorch).
Stars: ✭ 435 (-29.38%)
Mutual labels:  genetic-algorithm, evolutionary-algorithms, optimization
GeneticsJS
Evolutionary algorithms library for the web 🧬
Stars: ✭ 25 (-95.94%)
Mutual labels:  genetic-algorithm, evolutionary-algorithms
GeneticAlgorithmForFeatureSelection
Search the best feature subset for you classification mode
Stars: ✭ 82 (-86.69%)
Mutual labels:  genetic-algorithm, evolutionary-algorithms
Pymoo
NSGA2, NSGA3, R-NSGA3, MOEAD, Genetic Algorithms (GA), Differential Evolution (DE), CMAES, PSO
Stars: ✭ 547 (-11.2%)
Mutual labels:  genetic-algorithm, optimization
evoli
Genetic Algorithm and Particle Swarm Optimization
Stars: ✭ 22 (-96.43%)
Mutual labels:  genetic-algorithm, evolutionary-algorithms
TorchGA
Train PyTorch Models using the Genetic Algorithm with PyGAD
Stars: ✭ 47 (-92.37%)
Mutual labels:  genetic-algorithm, evolutionary-algorithms
NEATEST
NEATEST: Evolving Neural Networks Through Augmenting Topologies with Evolution Strategy Training
Stars: ✭ 13 (-97.89%)
Mutual labels:  genetic-algorithm, evolutionary-algorithms
bio ik
MoveIt kinematics_base plugin based on particle optimization & GA
Stars: ✭ 104 (-83.12%)
Mutual labels:  optimization, genetic-algorithm
pikaia
Modern Fortran Edition of the Pikaia Genetic Algorithm
Stars: ✭ 29 (-95.29%)
Mutual labels:  optimization, genetic-algorithm
tiny gp
Tiny Genetic Programming in Python
Stars: ✭ 58 (-90.58%)
Mutual labels:  genetic-algorithm, evolutionary-algorithms
Iamdinosaur
🦄 An Artificial Inteligence to teach Google's Dinosaur to jump cactus
Stars: ✭ 2,767 (+349.19%)
Mutual labels:  artificial-intelligence, genetic-algorithm
Opytimizer
🐦 Opytimizer is a Python library consisting of meta-heuristic optimization techniques.
Stars: ✭ 387 (-37.18%)
Mutual labels:  artificial-intelligence, optimization

Jenetics

Build Status Maven Central Javadoc

Jenetics is a Genetic Algorithm, Evolutionary Algorithm, Genetic Programming, and Multi-objective Optimization library, written in modern day Java. It is designed with a clear separation of the several concepts of the algorithm, e.g. Gene, Chromosome, Genotype, Phenotype, Population and fitness Function. Jenetics allows you to minimize and maximize the given fitness function without tweaking it. In contrast to other GA implementations, the library uses the concept of an evolution stream (EvolutionStream) for executing the evolution steps. Since the EvolutionStream implements the Java Stream interface, it works smoothly with the rest of the Java Stream API.

Other languages

  • Jenetics.Net: Experimental .NET Core port in C# of the base library.
  • Helisa: Scala wrapper around the Jenetics library.

Documentation

The library is fully documented (javadoc) and comes with an user manual (pdf).

Requirements

Runtime

  • JRE 11: Java runtime version 11 is needed for using the library, respectively for running the examples.

Build time

  • JDK 11: The Java JDK 11 must be installed.
  • Gradle 6.x: Gradle is used for building the library. (Gradle is download automatically, if you are using the Gradle Wrapper script ./gradlew, located in the base directory, for building the library.)

Test compile/execution

  • TestNG 7.x: Jenetics uses TestNG framework for unit tests.
  • Apache Commons Math 3.6: Library is used for testing statistical collectors.

Build Jenetics

Check out the master branch from Github.

$ git clone https://github.com/jenetics/jenetics.git <builddir>

Jenetics uses Gradle as build system and organizes the source into sub-projects (modules). Each sub-project is located in it’s own sub-directory:

Published projects

The following projects/modules are also published to Maven.

  • jenetics Javadoc: This project contains the source code and tests for the Jenetics core-module.
  • jenetics.ext Javadoc: This module contains additional non-standard GA operations and data types. It also contains classes for solving multi-objective problems (MOEA).
  • jenetics.prog Javadoc: The modules contains classes which allows to do genetic programming (GP). It seamlessly works with the existing EvolutionStream and evolution Engine.
  • jenetics.xml Javadoc: XML marshalling module for the Jenetics base data structures.

Non-published projects

  • jenetics.example: This project contains example code for the core-module.
  • jenetics.doc: Contains the code of the web-site and the manual.
  • jenetics.tool: This module contains classes used for doing integration testing and algorithmic performance testing. It is also used for creating GA performance measures and creating diagrams from the performance measures.

For building the library change into the <builddir> directory (or one of the module directory) and call one of the available tasks:

  • compileJava: Compiles the Jenetics sources and copies the class files to the <builddir>/<module-dir>/build/classes/main directory.
  • jar: Compiles the sources and creates the JAR files. The artifacts are copied to the <builddir>/<module-dir>/build/libs directory.
  • javadoc: Generates the API documentation. The Javadoc is stored in the <builddir>/<module-dir>/build/docs directory
  • test: Compiles and executes the unit tests. The test results are printed onto the console and a test-report, created by TestNG, is written to <builddir>/<module-dir> directory.
  • clean: Deletes the <builddir>/build/* directories and removes all generated artifacts.

For building the library jar from the source call

$ cd <build-dir>
$ ./gradlew jar

Example

Hello World (Ones counting)

The minimum evolution Engine setup needs a genotype factory, Factory<Genotype<?>>, and a fitness Function. The Genotype implements the Factory interface and can therefore be used as prototype for creating the initial Population and for creating new random Genotypes.

import io.jenetics.BitChromosome;
import io.jenetics.BitGene;
import io.jenetics.Genotype;
import io.jenetics.engine.Engine;
import io.jenetics.engine.EvolutionResult;
import io.jenetics.util.Factory;

public class HelloWorld {
    // 2.) Definition of the fitness function.
    private static Integer eval(Genotype<BitGene> gt) {
        return gt.chromosome()
            .as(BitChromosome.class)
            .bitCount();
    }

    public static void main(String[] args) {
        // 1.) Define the genotype (factory) suitable
        //     for the problem.
        Factory<Genotype<BitGene>> gtf =
            Genotype.of(BitChromosome.of(10, 0.5));

        // 3.) Create the execution environment.
        Engine<BitGene, Integer> engine = Engine
            .builder(HelloWorld::eval, gtf)
            .build();

        // 4.) Start the execution (evolution) and
        //     collect the result.
        Genotype<BitGene> result = engine.stream()
            .limit(100)
            .collect(EvolutionResult.toBestGenotype());

        System.out.println("Hello World:\n" + result);
    }
}

In contrast to other GA implementations, the library uses the concept of an evolution stream (EvolutionStream) for executing the evolution steps. Since the EvolutionStream implements the Java Stream interface, it works smoothly with the rest of the Java streaming API. Now let's have a closer look at listing above and discuss this simple program step by step:

  1. The probably most challenging part, when setting up a new evolution Engine, is to transform the problem domain into a appropriate Genotype (factory) representation. In our example we want to count the number of ones of a BitChromosome. Since we are counting only the ones of one chromosome, we are adding only one BitChromosome to our Genotype. In general, the Genotype can be created with 1 to n chromosomes.

  2. Once this is done, the fitness function which should be maximized, can be defined. Utilizing the new language features introduced in Java 8, we simply write a private static method, which takes the genotype we defined and calculate it's fitness value. If we want to use the optimized bit-counting method, bitCount(), we have to cast the Chromosome<BitGene> class to the actual used BitChromosome class. Since we know for sure that we created the Genotype with a BitChromosome, this can be done safely. A reference to the eval method is then used as fitness function and passed to the Engine.build method.

  3. In the third step we are creating the evolution Engine, which is responsible for changing, respectively evolving, a given population. The Engine is highly configurable and takes parameters for controlling the evolutionary and the computational environment. For changing the evolutionary behavior, you can set different alterers and selectors. By changing the used Executor service, you control the number of threads, the Engine is allowed to use. An new Engine instance can only be created via its builder, which is created by calling the Engine.builder method.

  4. In the last step, we can create a new EvolutionStream from our Engine. The EvolutionStream is the model or view of the evolutionary process. It serves as a »process handle« and also allows you, among other things, to control the termination of the evolution. In our example, we simply truncate the stream after 100 generations. If you don't limit the stream, the EvolutionStream will not terminate and run forever. Since the EvolutionStream extends the java.util.stream.Stream interface, it integrates smoothly with the rest of the Java Stream API. The final result, the best Genotype in our example, is then collected with one of the predefined collectors of the EvolutionResult class.

Evolving images

This example tries to approximate a given image by semitransparent polygons. It comes with an Swing UI, where you can immediately start your own experiments. After compiling the sources with

$ ./gradlew compileTestJava

you can start the example by calling

$ ./jrun io.jenetics.example.image.EvolvingImages

Evolving images

The previous image shows the GUI after evolving the default image for about 4,000 generations. With the »Open« button it is possible to load other images for polygonization. The »Save« button allows to store polygonized images in PNG format to disk. At the button of the UI, you can change some of the GA parameters of the example.

Projects using Jenetics

  • Renaissance Suite: Renaissance is a modern, open, and diversified benchmark suite for the JVM, aimed at testing JIT compilers, garbage collectors, profilers, analyzers and other tools.
  • Chartsy|One: Chartsy|One is a Netbeans based tool for stock market investors and traders.
  • Chronetic: Chronetic is an open-source time pattern analysis library built to describe time-series data.
  • APP4MC: Eclipse APP4MC is a platform for engineering embedded multi- and many-core software systems.

Blogs and articles

Citations

Release notes

6.2.0

Improvements

  • #754: Make Optimize.best method null friendly.

Bugs

  • #742: Fix compile error with Java 15.
  • #746: Const<Double> equals doesn't conform with Double.compare.
  • #748: Fix broken formulas in Javadoc.
  • #752: StreamPublisher doesn't close underlying Stream on close.

All Release Notes

License

The library is licensed under the Apache License, Version 2.0.

Copyright 2007-2021 Franz Wilhelmstötter

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

Used software

IntelliJ

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].