dcgp: Differentiable Cartesian Genetic Programming made easy

Genetic Programming (GP), is a computational technique based on the idea of representing a computer program in some dedicated data-structure (e.g. a tree) to then evolve it using genetic algorithms as to improve its ability at solving a predefined task. How good a certain program is at solving the task is typically encapsulated in its fitness: a vector of floating point values defining various aspects of the program. In a typical example, the fitness would be the program output error with respect to a predefined behaviour over a number of inputs. Generation after generation, the genetic algorithm would then improve such a fitness in the attempt to have the program behave correctly.