Project Lance

First rival battle in Pokemon Yellow.

In order to give myself some more tactile experience working with machine learning, I challenged myself to create a bot capable of competing in Generation I Pokemon battles. However, training the bot would still take forever with the only existing option - running a local Pokemon Showdown server and interfacing with it. To solve this problem, I devised Project Lance: a locally-run Python implementation of Generation I Pokemon battles. With it, I was able to run about 2000 full battles per second on my CPU, as opposed to the couple dozen I could run by interfacing with Showdown in that same time. To further improve training speed, I implemented a multicore evaluator for self-play. This allowed me to train a NEAT model to play optimally on a simplified version of the full battle engine.

Alex Steele
Alex Steele
Simulation Software Engineer

Physics and Electronics Simulations at Tesla