View on GitHub

Evolving Event-driven Programs with SignalGP

Published in the Proceedings of The 2018 Genetic and Evolutionary Computation Conference (GECCO)



This repository is associated with our 2018 GECCO submission, Evolving Event-Driven Programs with SignalGP (Lalejini and Ofria, 2018). A pre-print of this work can be found here:

Repository Guide:



We present SignalGP, a new genetic programming (GP) technique designed to incorporate the event-driven programming paradigm into computational evolution’s toolbox. Event-driven programming is a software design philosophy that simplifies the development of reactive programs by automatically triggering program modules (event-handlers) in response to external events, such as signals from the environment or messages from other programs. SignalGP incorporates these concepts by extending existing tag-based referencing techniques into an event-driven context. Both events and functions are labeled with evolvable tags; when an event occurs,the function with the closest matching tag is triggered. In this work, we apply SignalGP in the context of linear GP. We demonstrate the value of the event-driven paradigm using two distinct test problems (an environment coordination problem and a distributed leader election problem) by comparing SignalGP to variants that are otherwise identical, but must actively use sensors to process events or messages. In each of these problems, rapid interaction with the environment or other agents is critical for maximizing fitness. We also discuss ways in which SignalGP can be generalized beyond our linear GP implementation.

TL;DR (i.e., the abstract is sooo long and technical, what does it say in three sentences?)

What is SignalGP?

SignalGP Cartoon

Better description coming…

Experiment Source Code

The source code and configs for the changing environment problem can be found here: experiments/changing_environment.

The source code and configs for the distributed leader election problem can be found here: experiments/election.

Both problems are implemented in C++ using the Empirical library, which is required to compile and re-run the experiments.

WARNING: the Empirical library is under development, and as a result, it can often change in ways that may break the code used for the experiments used in this work. I make no promises that I will keep these problems up to date with the latest changes to the Empirical library. However, I am more than happy to update the code upon request. Just submit an issue/email me (

Experiment Configuration Details

We give the SignalGP instruction set details, environment-state tags (for the changing environment problem), and hand-coded SignalGP program solutions to each problem here.

Additionally, a .pdf version of the configuration details supplemental material can be found here: supplemental_material/gecco-2018-signal-supp-methods.pdf.

Data and Analyses

The data for all of our experiments can be found in this repository: data/.

The full statistical details along with a step-by-step (source code and all) walk-through can be found here: analysis/data_analysis.html

GECCO 2018 Presentation

Link to my GECCO 2018 presentation slides on Google slides!.

Please feel free to leave comments!

Updates Since Publication


Lalejini, A., & Ofria, C. (2018). Evolving Event-driven Programs with SignalGP. In Proceedings of the Genetic and Evolutionary Computation Conference. ACM.