Peter's Undergrad/Masters Student Project Ideas


I help lead UCL's research on evolutionary computation. I am happy to supervise any project that involves evolution (genetic algorithms, genetic programming, evolutionary strategies, evolutionary programming) or related subjects (bio-inspired computation, artificial immune systems, swarm intelligence, robotics). If you are a final year undergrad or Masters student and interested in any of the following projects, or have some evolutionary ideas yourself, e-mail me at:

If you’d like to do a Ph.D. here at UCL and would like to discuss your project with me, then you’ll need to think of your own idea and then email me.

If you'd like to know more about the things I get up to, click here. Otherwise, here are some ideas for projects that might be good fun to try:

Evolving Latent Variables

Optimization and exploration only works when given an appropriate representation. It is the (genetic) representation that defines the searchspace, and we can map to a new representation (phenotype) in order to evaluate that quality of the solution. But designing a good representation that defines a smooth, searchable space is something of an art form, especially when the problem may naturally be massively multivariate, discontinuous, noisy, multiobjective, or constrained. In this project the aim is to use generative ML such as GANs or autoencoders such as VAEs to learn the representation from examples of existing solutions to the problem (or similar problems). We then use an optimizer such as a genetic algorithm to search in the latent space, and use the learned neural model to map from the evolved latent variables to the phenotype so that we can evaluate the solutions. This idea is becoming popular and looks to be the future of optimization. But how best to learn latent spaces? GANs enable more precise representations and some level of latent variable disentanglement can be achieved; VAEs are more fuzzy but have encoders and decoders enabling us to search in latent spaces and original spaces simultaneously and translate between them. How do they compare? Or would other generative approaches work better? For reading material on this topic, check out work by Sebastian Risi, work by Adama Gaier (especially his PhD thesis) and papers such as this. We've now published a couple of papers on this topic so this project can extend the work! Check out:

you can find the code here:


Autodesk Projects

Autodesk Research is very strong in 3D design related technologies and has many projects involving deep learning and morphology, often using boundary representations. They also have an excellent Internship programme. If you're interested in AI and design, then we can discuss a project in collaboration with the Autodesk AI Lab, who will be able to provide data and technical support. Here are some project ideas from Autodesk:

Project 1: 3D style transfer, style similarity measure, and visualizing style differences between 3D designs are all very closely related problems. Finding good solutions to them can lead to many new applications in creative AI, industrial design, media and entertainment, etc. It appears that some of the ideas and approaches from 2D image style transfer [Gatys2015] can be effectively applied to the 3D style problems. Measuring the style similarity between two 3D meshes or highlighting the specific areas of two 3D meshes that are different in style have been previously presented as a data science challenge here. The goal of this project is to solve one or more of the above problems using deep learning techniques and assess the solution using a couple of style-labelled datasets publicly available. This problem can have many different solutions (see for example this MSc thesis). You can come up with your idea or adopt one of your supervisor's ideas. The project has the potential to be extended to solve more of the above problems or be limited in scope to one of them. You might even be able to co-publish your work in a computer vision or machine learning conference if you are interested and hard working.

Project 2: Learning augmentations for contrastive learning. Contrastive learning is a popular self-supervising method in deep learning that allows a deep neural network to be trained without any labels (SIMCLR for example). However, this method relies on selecting good augmentations that are must be designed based on the task. For example, if you are trying to classify different types of parrots in input images, while color distortion which encourages invariance to color might not be a good choice of augmentation, rotation and flipping are. It is possible to define a range of augmentations parametrically and then train those parameters by back-propagation given some labels. This approach leads to a semi-supervised method. The project has the potential to be extended to more investigations or be limited to the initial research. You might even be able to co-publish your work in a computer vision or machine learning conference if you are interested and hard working.

Project 3: In evolutionary computation we have demonstrated that with the right kind of representations it is possible to demonstrate automatic improvement in robustness and efficiency if you continue to evolve well beyond the point at which the best solution has been found. It's a phenomenon well known in biology. Interestingly, this same effect has now been observed in neural networks, see this paper. This project will investigate how to take advantage of these ideas in neural networks. Can we keep learning well beyond overfitting, and perhaps by perturbing/resetting some neurons can we encourage more efficient/general/robust networks?

Project 4: Conveying complex objectives to reinforcement learning (RL) agents can often be difficult, involving meticulous design of reward functions that are sufficiently informative yet easy enough to provide. Human-in-the-loop RL methods allow practitioners to instead interactively teach agents through tailored feedback, which will be used to train a reward function to result in complex behaviors that are difficult to specify with standard reward functions. However, existing methods usually use "scripted teachers" to automatically provide feedback during training, which is not practical for tasks that donŐt have ground-truth reward functions, like design. This project is to develop an interactive browser-based system that can display the intermediate training results and collect real-time human feedback. It will be an important tool to benchmark human-in-the-loop RL algorithms on real-world settings, where the human feedback is not alway rational and consistent. Prerequisite: no RL background is needed, but it will be a good opportunity to get familiar with RL. Reference: Learning from Human Preferences


Developmental design and embryogenesis

Nature shows us some amazing tricks when it comes to intelligence. But an often-overlooked example of intelligence is development - the process of embryogenesis that builds the complex forms of life (including the brain) through interactions between genes, cells and environments. Development is much cleverer than our brains, and just as poorly understood. However we do now have some really interesting examples of developmental systems. Here's one fun example. It's doing the equivalent of biological development using a neural network instead of a gene regulatory network, with around 8k parameters for each pattern according to the author. This is by far the most impressive example of development, showing the ability to generate desired forms correctly most of the time and self-repair. We've tried to do similar things before, e.g. see Julian Miller's early work on Cartesian GP and evolving flags (and there's been a lot since on evo-devo). However GP always struggled a bit in this domain - there are some key evolvability issues that get in the way. The holy grail of this area is to be able to generate a complex desired form efficiently in the same way that nature does it - using minimal information in a growth/generative/development process, with interaction from an environment, resulting in a shape orders of magnitude more complex than the 'instructions' needed to define it. One possibility is to swap out the NN used by the authors above, with a GRN like this one and see if it's any more efficient. GRNs have a lot going for them, as they are the method used in biological development, and they're also a bit like dynamic NNs with connectivity between genes changing rapidly according to protein concentrations. Another option is to add more 3D physics and make the work by Andy Lomas more controllable. Evolutionary computation could play an important role in all these ideas, to search for the right configurations in order to make the developmental systems work.


Deep Distributed Generative Design

Generative design is big business today. Automatically creating 3D geometries such that form fits function is many orders of magnitude more complex than working with 2D images. Get it right and you can auto generate building designs, aerodynamic forms, engine components - vital applications for companies such as Autodesk and its customers. Current approaches used in industry rely on genetic algorithms to optimize forms. More recent work uses deep learning to generate forms based on large datasets of existing designs. These approaches show useful results but they are limited in complexity and limited by data - GAs can find novelty but they struggle to find complex forms, and deep learning cannot innovate: its solutions are always variants of past designs and it doesn't adapt them to new environments. We need a method that combines ideas from both. In this project the aim is to use methods such as generative adversarial networks or variational autoencoders to enable the generation of a representation with the right properties for development: the right amount of expressiveness, useful bias, evolvability to enable effective search, adaptability and efficiency. This representation combined with methods such as cellular automata or multi agent system will enable the generation of different forms, akin to the growing CA work (see project above). Techniques such as genetic algorithms or novelty search will enable the exploration of different forms using this representation. The result would be a distributed generative design process that generates a complex desired form efficiently in the same way that nature does it - using combining learned information with iterative growth and interaction from an environment such that it meets new constraints, resulting in a shape massively more complex than the 'instructions' needed to define it. It would also be a novel combination of AI techniques that expand the capabilities of all.


Adaptation in Generative Design

There are a lot of different approaches to generative design, but most forget the most important lesson from nature: adaptation. Take two genetically identical ivy plants and look at their morphologies after they have grown for a while. Despite sharing the same design, they adapt to their environments to such a degree that they look radically different. Such differences are evident in morphogenesis for organisms that lack autonomous movement such as plants, but are harder to observe in brains - as twin studies illustrate. Yet we have plenty of similar problems, e.g., building architecture, which must be created to suit its environment and will never move. For this reason, the creation of generative design methods that incorporate adaptation to their environments is of great interest to researchers and industry alike. It looks like one trick used in nature is Hox Collinearity - a mirroring of generative computational architecture and resulting morphology for both temporal and spatial aspects. Can we create useful adaptive generative design by learning from this?


Agent-based Modelling of Human Social Interaction

There is an increasing number of people, with increasing diversity and a growing need for them to work together. Differential psychology (also known as individual differences research) is a branch in psychology that studies the ways in which individuals differ in their behaviour and the processes that underlie it. It investigates differences in personality, motivation, empathy, ability, interests, values, self-concept, self-efficacy, and self-esteem. In this project you will develop our existing agent-based model that incorporates human psychology, to understand what helps and hinders collaboration. This work spans everything from human testing to detailed modelling and analysis of results.


Modelling the App Store

A while ago I developed iStethoscope Pro which briefly became the number one best selling iOS app in the whole UK App Store. Following from this I worked with Soo Ling Lim and developed an agent based model of the iOS app store, which predicts how different kinds of developer strategies and app types might affect success in the store. On top of this we have now surveyed more than ten thousand app users worldwide to gather data about app usage around the world. This project would build on this previous work by extending the app store model with the new data, enabling it to model different developer and user behaviours in different countries. To see the previous papers describing this work, check out Soo Ling's publications here.


Crowdsourcing Intelligence Through Gaming

Crowdsourcing is an effective method of using large numbers of people to solve problems together. It has been used successfully to help digitise books, for example some captcha codes are actually fragments of ambiguous text that computers struggle to translate, and by typing in your guess you are translating the text to its digital equivalent. Some navigation map systems use user movements to determine traffic levels or even build new maps; they encourage users to visit data-poor areas of the map by awarding them points if they can "collect" virtual tokens placed at those locations. This project would use this idea to map general problems onto a game that many users would enjoy playing, and by playing they solve the problems. Maybe it would be a new form of sudoku where the solution would help solve a fragment of a complex schedule; maybe it would be a variation of a train-routing game, which would help solve a section of the travelling salesman problem. Release the game as an app and thousands of users all use their brains to solve computationally difficult problems in parallel.


Evolutionary Sculptures

Evolutionary design - that's using evolution to evolve designs - is a rapidly growing area of research. One application is art, and in particular, sculpture. Using VRML (or OpenGL) to display the 3D shapes, an evolutionary algorithm can be used to explore 'sculpture-space', helping us to find some aesthetically pleasing forms. These could even be built, resulting in novel physical sculptures. Evolution has already been used by some artists and architects and the results are surprising - many quite beautiful pieces have been created using this approach. Take a peek in my book Evolutionary Design by Computers for more details.


Evolving Ferrofluid Patterns

Ferrofluid is a magnetic fluid - its shape can be pulled and distorted by magnetism. It works because it has nano-sized magnetic particies held in suspension of an oil-like substance. This practical project would involve linking several electromagnetics to a computer, and then using a genetic algorithm to evolve patterns of activation of the electromagnets. These would then be placed around a pool of ferrofluid, causing it to be pulled into different patterns and shapes. The result would be a physical evolutionary art system - you would be able to evolve attractive "liquid sculptures" that dance to the direction of the magnets. Another possibility is to control the ferrofluid as a display, e.g.: the Fetch project.


Evolving Aerodynamic Shapes

The wings of birds, bats and insects have all evolved to be highly efficient for flight. This project would involve the use of a genetic algorithm to evolve an aerodynamic shape for unpowered flight. Using a mixture of software simulation and real-world testing, a shape designed to increase the time spent airborne could be evolved. This might use the spiraling flight of a sycamore seed, the drifting flight of a dandelion seed, or the gliding flight of a bird. Because real-world testing is so time-consuming, methods to interpolate fitness scores and perform simple simulation will be essential.