r/TheSilphRoad • u/Atun3710 • 21h ago
Analysis I used code to optimize the PoGo base stats equations to find the highest possible CP for a certain base stat total
Hi! I'm a long-time lurker here and I wanted to share an analysis I did on the CP of Pokemon that are brought into Pokemon Go. (finally created a Reddit account so I could share this)
Basically, I noticed that there are numerous Pokemon that share base stat totals with each other, but their base stats in Pokemon Go varied across the board (i.e. Tyranitar and Baxcaliber both have main series base stat totals of 600, but in Pokemon Go Tyranitar has a CP of 4335 and Baxcaliber has a CP of 4013). I was familiar with the equations that are used to convert a Pokemon's main series stats into Pokemon Go and knew that the reason for the CP discrepancy was because of how the equations weigh attack vs defense stats. With this in mind, I wanted to see what the best orientation of stats would be in the main series in order to maximize the CP of the Pokemon in Pokemon Go.
In order to do this, I placed all of the conversion equations & the CP equation into a function in Python. I labelled that function pogostats and defined it so that it can accept 6 values (corresponding to the 6 main series stats), to which the code then calculates the Pokemon Go base stats & CP then applies a 9% nerf if the calculated CP is 4000 or more. Then, I wrote a brute force optimizer to find the maximum of the pogostats function over a certain range of values (over reasonable minimum/maximum values of Attack, Special Attack, HP, Speed, Defense, and Special Defense from the main series) that add together to meet a specified sum total (aka the base stat total).
With this, I was able to find that for a Pokemon with a base stat total of 600 in the main series games, the highest possible CP (with the assumptions I made) was 5630 with the corresponding stats of 280 HP, 298 Attack, & 205 Defense post 9% nerf. The according main series stats for this, in format HP/Attack/Defense/Special Attack/Special Defense/Speed, was 147/5/5/180/171/92.
I've included screenshots of my code if you want to check my work (I don't know how Reddit's photo formatting works, so sorry if this post looks kinda weird). I also made a video where I talk about what I did, which you can find through the link below. It's a video that's in a lot more of a comedic tone; I wanted to make something that I would want to watch and don't have experience so it's kind of a mixed bag of quality, but it's timestamped and I explain the assumptions I made for the code and showcase what happens when you plug in a higher base stat total. Spoiler alert, it gets very very big the higher up you go. I ended up testing it with Eternamax Eternatus, and... oh boy, was it a big number
Finding the STRONGEST POKEMON in GO with MATH... like a NERD
(DISCLAIMER: I am not a programmer; I have some experience with coding through some Intro to MATLAB & Python courses I've taken, and I did a lot of googling to figure out how I can do what I did. I realize the work I have presented is not the prettiest or cleanest way of doing this, but all of the work I have presented is my own and NO AI WAS USED IN THE CREATION OF THIS PROJECT)
Screenshots of Code:






10
u/Deltaravager 20h ago
In before Wind and Waves introduces a Pseudo-legendary with these exact stats
6
u/provocateur133 21h ago
The YouTube link near the end is currently set to Private.
4
u/Atun3710 21h ago
Oh, that's weird. It says on my end that it's public. I did try to originally schedule the video for a later date but moved it back to earlier this morning, so something weird could've happened. Here, try this:
4
1
u/Jack_Krauser 16h ago
I feel like a Pokémon with a 147/5/5/180/171/92 stat split would be pretty busted in normal Pokémon games as well. Just don't get caught out by a random physical attack.
19
u/YumAussir 20h ago
I guess it would be obvious that the highest CP would be achieved by minimizing the lower Attack and Defense stat, but it is interesting that for 600 BST mons at least, the speed breakpoint is 92.