I recently started learning about genetic algorithms and programming. I came across several easy to start tools, libraries and tutorials.There are many cool visualizations available online to showcase how the algorithm improves the population generation over generation. Seems like a nice way to grasp the concept and build intuition.
Since I mainly code in Python, I ended up using DEAP for prototyping and learning. Documentations are very clear and with lots of examples to study from.
Artificial Ant Problem
One particular example was, Artificial Ant Problem. The goal is to evolve an individual that can control an ant and eat as many food items from the environment as possible given a limited amount and types of moves.
The code runs seamlessly and you could see the output in the console that generation over generation the population is actually able to increase the amount of food items eaten.
That’s all well and good, but I wanted to visualise the solution to see for myself and get a better understanding. First step was to actually read the best individual attributes
hall of fame.
Original Base Code for Reference
I captured the best individual after running the program and recompiled the attribute for that individual.
from deap import gp
hof_promitive_tree = gp.PrimitiveTree(hof)
routine = gp.compile(hof_promitive_tree , pset)
AntSimulator class a little bit to record every move for later use.
def __init__(self, max_moves):
self.recorded_moves = 
Next step was to run the routine again on modified
AntSimulator and get the recorder moves for simulation
# contains the initial food item and ant location
grid = ant.matrix
# recorder moves of best individual
moves = ant.recorded_moves
Given this much information, initialisation involved placing ant and food items on the pygame screen. The main loop consists of playing each move one by one and removing food items once eaten. Complete modified code can be found here
And here is the end result. Shows the individual controlling the first 600 moves of our artificial ant.