Project Overview
The simulator implemented two entity types: bushes and trees. These would compete for the available soil and light by evolving their genes that define their energy requirements and consumption. The general consensus for the design of these genes was for them to have a visual impact on the entity. These genes affected the scale, color, and type of seeds of every plant. You can find the details of my thesis in the final document:
→ Bachelor's Thesis Final Document
The application I implemented encompassed many systems. These are divided into four subsystems: the simulator, the statistics gathering and generation system, the genetic algorith, and the GUI.
-
The Simulator: This is the core system of the thesis. It was in charge of configuring and running a single simulation. It envolved many advanced performance optimizations, to ensure a simulation could run as quickly as possible. The most interesting bits are the generation of the 'Plants Requirements' Tracker Texture' (Appendix D) and the encoding of the specific evolution rules for both trees and bushes, so that they could drastically interact with one another.
-
Statistics Gathering and Generation: This system serializes the data of a simulation step. I named these instances 'mementos'. With a collection of mementos, this system, detects species and generates several data visualization graphs such as the species distributions and heatmaps. Here, the most interesting implementation is the Spatio-Temporal Clustering algorithm I designed to detect the different species.
-
The Genetic Algorithm: A genetic algorithm can be run on top of the simulation subsystem to find an initial configuration that leads to every entity type coexisting, instead of one dominating over the other.
-
The GUI: I designed the whole interface myself. This was a massive task given the amount of fields the user can tweak, and the many visualization modes the application presents. I had to implement the plotting visualization myself, since Unity does not provide a 'line' or 'circle' renderer.
Here is a video that displays all the functionalities of the simulator I implemented, and the timestamps are listed below:
Timestamps
-
0:00 - Configure a new simulation
-
0:48 - Run the simulation
-
1:36 - Load/delete simulations
-
2:00 - View simulation statistics
-
2:46 - Navigate simulation
-
3:35 - Configure experiment with the Genetic Algorithm
-
3:59 - Run experiment with the Genetic Algorithm
-
4:37 - Auto-configure simulator with the Genetic Algorithm results