Competent Geometric Semantic Genetic Programming for Symbolic Regression and Boolean Function Synthesis

Tomasz P. Pawlak, Krzysztof Krawiec


Program semantics is a promising recent research thread in Genetic Programming (GP). Over a dozen of semantic-aware search, selection, and initialization operators for GP have been proposed to date. Some of those operators are designed to exploit the geometric properties of semantic space, while some others focus on making offspring effective, i.e., semantically different from their parents. Only a small fraction of previous works aimed at addressing both these features simultaneously. In this paper, we propose a suite of competent operators that combine effectiveness with geometry for population initialization, mate selection, mutation and crossover. We present a theoretical rationale behind these operators and compare them experimentally to operators known from literature on symbolic regression and Boolean function synthesis benchmarks. We analyze each operator in isolation as well as verify how they fare together in an evolutionary run, concluding that the competent operators are superior on a wide range of performance indicators, including best-of-run fitness, test-set fitness, and program size.

Access full text

Full text is available at MIT Press. Preprint here.


month=jul # " 1",
journal={Evolutionary Computation},
title={Competent Geometric Semantic Genetic Programming for Symbolic Regression and Boolean Function Synthesis},
publisher={MIT Press},
keywords={semantics, metrics, geometry, effectiveness, theory, experiment},
author={Pawlak, Tomasz P. and Krawiec, Krzysztof},

Suplementary material

The Java source code of the experimental suite presented in the paper, together with the compiled Jar are available under conditions of Academic Free License. Java 1.8+ is required to compile the Jar from source. Instructions how to create configuration files and run the experiment are available in ECJ manual. The classes under interest of this study can be found in the following namespaces:

  •* (problem definitions)
  •* (operators and basic semantic stuff)
  • library.* (semantic library helper classes)