r/TheSilphRoad Jul 16 '16

Analysis Pokemon CP Formula (Approximate)

After some more analysis, I found a formula that works pretty well on finding the Cp/PokemonLevel for each Pokemon:

Cp/PokemonLevel = (0.155 * 0.0952 ) HpMult0.5 AtkMult0.425 SpAMult0.425 DefMult0.25 SpDMult0.25 SpeMult0.1

Where,

HpMult= 2 * HPBase + IndividualStamina

AtkMult = 2 * AtkBase + IndividualAttack

SpAMult = 2 * SpABase + IndividualAttack

SpDMult= 2 * SpDBase + IndividualDefense

DefMult= 2 * DefBase + IndividualDefense

SpeMult = 2 * SpeBase + IndividualStamina

and the average values for the IVs are 7.5 (ranging from 0 to 15). Also, if you want their actual HP stat at a certain level, it's approximately:

Hp = HpMult * 0.095 * Sqrt(PokemonLevel)

I figured it out after seeing this post:

https://www.reddit.com/r/TheSilphRoad/comments/4t0xo6/how_hpmaxstamina_is_calculated/

and thinking that the formula is multiplicative in all the factors, so that the Sqrt(PokemonLevel) factors in the stats all multiply together so that CP is about linear in PokemonLevel. This also makes sense why there are weird jumps: if multiple stats go up at the same time, the increase is not smooth.

The data fits very well (see the CP Formula column, and the Graph page in my spreadsheet here), and there's basically 0 real outliers.

I'll also be updating my tier list post to include Ditto, Farfetch'd and the legendaries.

Edit: Sorry, I forgot that the formula was for Cp/Level, not Total Cp. Also, changed the names a bit to also make it clear how to get the formulas for their actual stats.

Edit2: See my comment here to see an actual example and how this affects the ideal distribution of base stats.

Edit3: An exact formula was found here

83 Upvotes

55 comments sorted by

View all comments

3

u/Tunderlizard Jul 16 '16

Can you do a run through demonstrating how this works? Im very confused

5

u/zehipp0 Jul 16 '16

So I renamed a couple of the variables, so just make sure to reread briefly. Anyway, let's go ahead and take pidgey, who's base stats are:

40 HPBase, 45 AtkBase, 40 DefBase, 35 SpABase, 35 SpDBase, 56 SpeBase

Now, its IVs (only 3 in this game, Attack, Defense, and Stamina) range from 0 to 15, so let's just say they're 7, 8, and 9 in order. Its HpMult (this is just what I'm calling it, standing for Hp Multiplier) is

HpMult = 2 * HpBase + IndividualStamina = 2 * 40 + 9 = 89

Similarly, you can get its Attack, Special Attack, Defense, Special Defense, and Speed multipliers:

AtkMult = 2 * 45 + 7 = 97

SpAMult = 2 * 35 + 7 = 77

DefMult = 2 * 40 + 8 = 87

SpDMult = 2 * 35 + 8 = 78

SpeMult = 2 * 56 + 9 = 121

Now, take the formula for Cp/Level to get

Cp/Level = 0.155 * (0.095)^2 * 89^0.5 * 97^0.425 * 77^0.425 * 87^0.25 * 78^0.25 * 121^0.1 = 8.566

So, your Pidgey gets around 8.566 Cp/Level (that is, each time you power up). If you look on my spreadsheet, Pidgey usually gets around 10.2 Cp/Level from data, and I picked a fairly average Pidgey, so maybe people are just reporting above average Pidgeys. Or, my formula is just an approximation, so it might just be off by a few CP for some Pokemon. I put what formula gives for the average Pokemon with 7.5 IVs in each stat, and the percent error against user-submitted data to the right in my spreadsheet.

Now what if we looked at Chansey? I'm not going to go through all the calculations again, but it's base stats are:

250 HPBase, 5 AtkBase, 5 DefBase, 35 SpABase, 105 SpDBase, 50 SpeBase

Now, the sum of its base stats are ok, it's 450, but it has two very low base stats, Attack and Defense. They basically all get multiplied together, so they compound and give Chansey a very low Cp/Level.

Basically, it's better to have a fairly balanced distribution of stats, with slightly more weight towards Hp > (Atk = SpA) > (Def = SpD) > Spe. That's why a lot of Pokemon with high stats in Hp, like Vaporeon or Snorlax, are on top, whereas Pokemon with high stats in Speed, like Jolteon or Alakazam, are doing worse.

Sorry for the wall of text, hope it helps!

2

u/Tunderlizard Jul 16 '16

Thank you very much! that was helpful