Build StatusCoverage Statuscodecov

Cartesian Genetic Programming in Julia. Based on the Cambrian.jl framework.


CartesianGeneticProgramming.jl can be installed through the Julia package manager

pkg> add CartesianGeneticProgramming.jl


Examples of usage are provided in scripts. To run any of these examples, do

$ julia scripts/gym.jl

This will create and populate gens and logs folders, which store CGP individuals and evolutionary logs, respectively.

Note that these examples have only been tested on Linux and have additional dependencies which must be installed, like PyCall or ArcadeLearningEnvironment.


CGP.jl comes with tests which can offer examples of detailed usage of the different genetic operators and CGP extensions. To run all tests, use

pkg> test CartesianGeneticProgramming


Configuration is handled by src/config.jl. Configurable options are read in through YAML files (an example being cfg/test.yaml). All possible node functions are defined in src/functions.jl and are populated in the configuration files.

Mixed-Type CGP

This repository is now intended only for floating point inputs and therefore no longer implements Mixed-Type CGP. The commit reference for the results in [1] is 096e843, however this requires Julia 0.6 and may no longer function. MTCGP is currently being rewritten at This is done to separate heavy image processing package dependencies which are not necessary for base CGP.

[1] Wilson, Dennis G., et al. "Evolving simple programs for playing Atari games." Proceedings of the Genetic and Evolutionary Computation Conference. ACM, 2018.