PhD Studentship Topic

Genetic Programming in Search Based Software Engineering

I am interested in the general question of how we can get a computer
to program itself which has long been a goal of Artificial
Intelligence.

I am interested in the general question of how we can get a computer
to program itself which has long been a goal of Artificial
Intelligence.

Software engineering provides a unique material on which to perform
optimization tasks as the optimization algorithms are themselves
software. In other words, unlike other engineering disciplines where
the materials have to be simulated, in software engineering the
software is its own model. This presents the optimization and machine
learning communities with a rich source of challenging real-world
problems.

In particular, I am interested in how results from theoretical
computer science can inform the largely empirical practice of software
engineering (for example ideas and results from complexity and
computability theory and Kolmogorov complexity), and how this can help
us build dynamic algorithms which adapt online over their lifetime.

In the past Genetic Programming has traditionally taken the approach
of evolving programs from scratch using a process inspired by natural
selection. However recent techniques take existing programs as a
starting point and try to improve them. These techniques include the
following two approaches.

Genetic Programming as a Hyper-heuristic, which can be
interpreted as the Automatic Design of Algorithms (effectively in
vivo), where part of an algorithm is human designed and part of the
algorithm is designed by computer (Genetic Programming).

Genetic Improvement operates directly on source code
(effectively in situ), where small edits are made to source code using
Evolutionary Computation.

In both cases the resultant is an executable program, which often has
better performance than solely human designed code.

Currently algorithms are typically written by a human programmer - but
in a few years many programs could be written automatically.

Particular areas of interest for PhD study include:

Search based software engineering; the application of machine
learning and optimization techniques to the domain of software.

Genetic Programming, Genetic Improvement and Automated Programming;
the practice of evolving programs, either from scratch or from
existing software.

Optimization Machine Learning, and in particular Heuristics,
Metaheuristics and Hyper-heuristics.