Genetic programming (GP) is an evolutionary computation technique that automatically creates computer programs or mathematical expressions by mimicking the process of natural selection. Programs are represented as tree structures and evolved through selection, crossover, and mutation operators. My research on GP has focused on grammar-based GP for neural architecture search, symbolic regression, and the broader area of evolutionary machine learning.

Foundations of Genetic Programming

GP for Function Learning and Symbolic Regression

Genetic programming can automatically discover mathematical expressions (programs) that describe a dataset, a task known as symbolic regression. Unlike other regression methods, GP produces interpretable expressions that can be analyzed and validated by domain experts.

Research on GP for function learning has examined how the choice of function set, terminal set, and evolutionary operators influences the ability of GP to discover compact and accurate expressions from noisy data. Topics include bloat control, parsimony pressure, and the relationship between expression complexity and generalization performance.

GP Representation and Operators
Investigation of different representations for genetic programming, including tree-based, linear, and graph-based representations. Research on variation operators (crossover and mutation) that preserve program semantics, reduce bloat, and improve search efficiency. Development of semantics-based operators that respect the functional behavior of programs rather than operating purely on their syntactic structure.

Grammar-Based Genetic Programming

Grammatical Evolution
Grammatical evolution (GE) is a variant of GP that uses a formal grammar (typically in BNF format) to specify the language of programs to be evolved. GE maps a binary or integer string genotype to a program phenotype through grammar-guided derivation. This approach allows the search space to be constrained to syntactically valid programs and enables the evolution of programs in arbitrary programming languages.
Grammar-Based GP for Deep Neural Networks
Application of grammar-based genetic programming to the automatic design of deep neural network architectures. A formal grammar defines the space of valid network architectures, and genetic programming explores this space to find architectures optimized for specific tasks such as image segmentation and classification.

GP for Neural Architecture Search

Convolutional Neural Network Design with GP
Development of grammar-based GP methods for automatically designing convolutional neural network architectures. The grammar encodes design choices such as the types of layers, the number of filters, kernel sizes, and connectivity patterns. The evolutionary search finds architectures that achieve high accuracy while remaining computationally efficient.
GP in Multi-task Architecture Design
Research on using GP within evolutionary methods for designing multi-network architectures for heterogeneous multi-task learning. GP provides a flexible representation for specifying how tasks share neural network components, allowing the evolutionary search to discover efficient parameter sharing schemes.

Evolutionary Machine Learning

EML for Unsupervised Learning
Contribution to the Handbook of Evolutionary Machine Learning: a chapter dedicated to evolutionary methods for unsupervised learning tasks, covering evolutionary approaches to clustering, dimensionality reduction, and generative modeling. The chapter surveys the state of the art and identifies open research questions in evolutionary unsupervised learning.
Evolutionary Approaches in Other Search-Based Optimization
Contribution to the IEEE CIS Open Book "Introduction to Computational Intelligence": a chapter covering other search-based optimization approaches, including genetic programming, simulated annealing, ant colony optimization, and particle swarm optimization, with an emphasis on their connections to evolutionary computation.

Selected Publications