AMazeing was a group project for CSC 587: Advanced Deep Learning. The goal of the project was to tackle three maze problems: maze generation, maze mutation, and maze solving. I had two partners, and each one of us tackled a separate problem. I primarily worked on maze solving.
I wanted to learn more about reinforcement learning and graph neural networks, so those were the two main components of my maze solver. Notably, neither of those two things are good for maze solving. Reinforcement learning performs better when there's some learnable difference between the actions you can take, and there's really no difference between the different directions you can move in a maze. Moreover, graph neural networks are extremely overkill for mazes, especially in our representation, since all of the nodes are basically identical and connected in a grid-like pattern.
Using graph neural networks meant I had to implement whatever reinforcement learning algorithm I chose from scratch, and I chose PPO, which ended up being a major hassle to get working. I eventually swapped from GNNs to CNNs because the GNNs were too computationally expensive and never converged, but since I had already written PPO, I decided to stick with my implementation instead of using something like OpenAI Gym or Stable Baselines.
The maze solver is really quite bad, but I learned a lot from this project, and had a great time working with my group. Reinforcement learning is not some super tool you can apply to every problem, and neither are graph neural networks. This project taught me the intricacies of what situations those tools are best suited to, as well as how to choose better tools for the job.
I've also attached our final report as part of this post, so if you are interested in a little more academic detail, take a look.