Swarming Flies
Projects

The final year of my degree involved a year-long research project, in order to qualify as an Honours degree. The project could be whatever we liked, provided that it was relevant to the course, and had sufficient academic merit. I took an interest in the work of Craig Reynolds, particularly with regards to Steering Behaviours. My project became an investigation into the use of steering behaviours to create swarming behaviour (similar to flies) which I then combined with dynamic obstacle avoidance behaviour. The overall goal was to discover if AI could be produced at that level which could convincingly avoid dynamic obstacles whilst moving in a complex fashion.

The investigation is thoroughly documented in the linked dissertation, which features all of the research carried out, a history of the development and testing of the artefacts for the investigation, the results and conclusions that could be drawn from them and more. The dissertation is a 69 page .pdf file.

As a part of the investigation, a number of artefacts had to be produced. In this case, a program was developed in three Implementation Phases. The first of these produced adjustable swarming behaviour for the flies, and established the groundwork for the rest of the project.

The second of these is a finalised version of the swarming behaviour, using the results from the first round of testing in order to decide upon the ideal parameters for the project. This phase added the dynamic obstacle avoidance behaviour to the flies and provided dynamic obstacles for them to be tested with.

The third, and final, phase used finalised figures for the dynamic obstacle avoidance behaviour, gained from testing, to then investigate efficiency. This phase involved three separate implementations - a benchmarking one; a centralised, efficiency-minded approach and a blackboard-based approach.

All five executable files and the associated source code are available for download through the "Artefacts" link on this page. The programs run using OpenGL and have no other dependencies.