“So far, we have been able to study only one evolving system and we cannot wait for interstellar flight to provide us with a second. If we want to discover generalizations about evolving systems, we will have to look to artificial ones.” - John Maynard Smith.
My research resides somewhere at the intersection of artificial life, evolutionary biology, and evolutionary computation. I am broadly interested in how evolutionary processes remain open-ended, continuously generating increasingly complex organisms. My work is a mishmash of using digital evolution to study general properties of evolving systems and of drawing inspiration from natural evolution and its byproducts to develop new evolutionary computation techniques and representations. Below are some of my current research projects. If anything is of interest to you, feel free to contact me!
Genetic programming (GP) is the application of natural principles to evolve computer programs rather than by writing them by hand. The types of programs that are easily evolvable depends on the underlying programming representation - i.e., the way we organize and interpet programs.
SignalGP is a new GP technique designed to give evolution direct access to the event-driven programming paradigm where computations are triggered response to signals from the environment, from other agents, or that are internally generated. I designed and developed the initial version of SignalGP in 2017, resulting in a paper and a talk at GECCO 2018 where I demonstrate the value of giving evolution direct access to the event-driven paradigm.
I am currently working on several extensions to the SignalGP representation, such as function regulation, multi-representation SignalGP, and multi-level/hierarchical SignalGP.
Major transitions in individuality redefine what it means to be an individual: formerly independent individuals unite to form a new, more complex lifeform. Examples include the evolution of eukaryotes, multicellularity, and eusocial insect colonies. From a computational perspective, major transitions in individuality result in distributed systems.
The goal of this research is to develop a digital model for studying biological evolutionary transitions, allowing us to ask general questions about their dynamics. In the context of evolutionary computation, a system capable of transitions in individuality would be useful for allowing evolution to incrementally build distributed solutions. I am currently working to extend the SignalGP represention to allow co-evolving programs to unite to form hiearchically organized programs.
MAP-Elites is an evolutionary computation technique that has proven valuable for exploring and illuminating the genotype-phenotype space of a computational problem. In MAP-Elites, a population is structured based on phenotypic traits of prospective solutions; each cell represents a distinct combination of traits and maintains only the most fit organism found with those traits. The resulting map of trait combinations allows the user to develop a better understanding of how each trait relates to fitness and how traits interact.
If we define a MAP-Elites map with traits associated with different aspects of our genetic programming representation (e.g., functions, program length, etc.), we can use MAP-Elites as a tool to explore how different aspects of different representations interact across different problems. Are there trade-offs between different aspects of our representation? Are there parts of representation-space that are unlikely to yield solutions? Exploring our GP representations in this way may inform how we configure things such as variation/mutation or selection operators.
This project is an ongoing collaboration with fellow devolab student, Emily Dolson.
Phenotypic plasticity is the capacity of a genotype to express different
phenotypes (e.g., traits or characteristics) in response to different
environmental conditions. Plasticity is often leveraged as a strategy to
cope with heterogenous environments. In computer science, our computer programs
are often plastic in the sense that they may perform different computations
in response to different types of input.
The programmatic underpinning of many types of computational plasticity
are flow control statements (e.g., if
or while
).
In biological organisms, the genetic underpinning of many types of phenotpyic
plasticity is gene regulation.
The goal of this research is to study the step-by-step process by which gene regulation and phenotypic plasticity evolve. See this paper for work using Avida to observe the step-by-step process by which phenotypic plasticity evolves. Currently, I am working on extending SignalGP to allow for more biologically inspired forms of function regulation, making it a good model for studying the process by which gene regulation and any resulting phenotypic plasticity evolves.