We built a bot that plays Pokemon battles on Pokemon showdown. We initially started with a naive approach that only simulated 1 turn ahead and scored the possible positions based on the Pokemon's remaining HP.
We ended up settling on Monte Carlo Tree Search so our bot could explore promising situations more than 1 move ahead. Throughout the hackathon, we tried various different approaches with the Monte Carlo Tree Search to varying degrees of success, and our best strategy allows us to win about 63% of the time against another very popular bot online called Foul Play.
We decided to specialise in Gen 9 OU single battles, a format where you see the enemy team's 6 Pokemon at the start of the battle and they see yours. You can now choose what Pokemon you will start with after you see all 6, but you don't know the enemy 6's movesets, stat spreads, held items, or starting Pokemon. The strategy we use runs Monte Carlo Tree Searches across multiple possible versions of the enemy team, exploiting the fact that most people will use the same meta builds on every Pokemon. The more confident its prediction of a team being accurate, the more it will explore deeper in that search tree. We update the bots confidence every turn, since the enemy team reveals more and more info each time, narrowing down possible Pokemon configurations.
Our approach allows us to choose what move within 3 seconds per turn, much quicker than any approach with a traditional LLM (which we naively tried at the start). Our best strategy with the bot ends up winning about 63% of the time against Foul Play, another popular bot that is commonly used online as a benchmark.
Log in or sign up for Devpost to join the conversation.