Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?


Failed to load latest commit information.
Latest commit message
Commit time

Tiny Genetic Programming in Python

A minimalistic program implementing Koza-style (tree-based) genetic programming to solve a symbolic regression problem. is a basic (and fully functional) version, which produces textual output of the evolutionary progression and evolved trees. displays dynamic graphs of error and mean tree size (size = number of nodes), has a bloat-control option, and produces nicer, graphic output (you'll need to install

I invite you to check out another project of mine, which allows you to run an evolutionary algorithm with just 3 lines of code: EC-KitY — Evolutionary Computation Tool Kit in Python.

If you wish to cite this:

  author = {Sipper, M.},
  title = {Tiny Genetic Programming in Python},
  year = {2019},
  publisher = {GitHub},
  journal = {GitHub repository},
  howpublished = {\url{} }
Symbolic Regression using GP
Objective Find an expression with one input (independent variable x), whose output equals the value of the quartic function x4 + x3 + x2 + x + 1
Function set add, sub, mul
Terminal set x, -2, -1, 0, 1, 2
Fitness Inverse mean absolute error over a dataset of 101 target values, normalized to [0,1]
Paremeters POP_SIZE (population size), MIN_DEPTH (minimal initial random tree depth), MAX_DEPTH (maximal initial random tree depth), GENERATIONS (maximal number of generations), TOURNAMENT_SIZE (size of tournament for tournament selection), XO_RATE (crossover rate), PROB_MUTATION (per-node mutation probability)
Termination Maximal number of generations reached or an individual with fitness = 1.0 found
Evolved solution Another evolved solution
GPTree GPTree2
Bloat control No bloat control
GP run GP run