The Floor In Pokémon Go : Useless Data

One of things I kind of miss from school, which I didn’t realise I would at the time, was experimenting with things and collecting data and plotting graphs and finding trends.

I work with data at the moment, but from a different angle.  I work with master data which… which… which is staggeringly hard to explain without going in to specifics.  It’s things like a company’s phone number or address.  The interest comes in its lifecycle rather than what it tells us about something.

And indeed, there is lots of analysis everywhere nowadays that links data and tries to tell us a story about its subject.  The more data you have, the more links you can make.  Being able to use that data, though, is something altogether different.

Pokémon Go

I was caught by the Pokémon Go bug when it was released last year.  I’d never played the games before (and still haven’t played anything other than Go) but it provided some light hearted escapism when I needed it.  The game has kept my interest as I’ve learnt about its mechanics.

For those that don’t know, the idea of Go is to walk around collecting pocket monsters that appear at certain points at certain times.  The caught Pokémon can be used to battle others in “gyms” and it’s the gym game that takes it beyond just catching ’em all.

Much of Pokémon Go is based on formulas, but especially the gym game.  There are formulas to calculate a Pokémon’s combat power and health.  These formulas use something called “individual values” for attack, defence and stamina each sitting individually on a scale of 1-15.

Individual values always remain the same but a Pokémon can be powered up using stardust to increase its level.  As level increases, so does the damage it can do in battle, but stardust is a rare commodity so you want to optimise how you use it.


One thing I remember from school when doing an experiment is that you write what you want to find in a synopsis.  My synopsis, therefore, was to use another great passion of mine (spreadsheets!) to determine the optimal use of stardust in Pokémon Go.  I know some people will say that this is a bit sad… OK, OK, very sad, but I love knowing how things work so irrespective of whether it was a game or something else, I’d enjoy doing this.

I’m not going to go in to all the parts of the formula here, but there is a significant part to the one that calculates the damage one Pokémon can do to the health of another.

The interesting part is “floor”.  This means that you always round down to the nearest whole number and the implication is that there are significant break points.  Find those breakpoints and you find how best to optimise your Pokémon.


Umm… Yeah, I remembered this bit too.  I created a spreadsheet, I put data into it, I ran simulations, I got results.


I found breakpoints!

This graph shows the damage done by a Vaporeon against a Rhydon.  Along the bottom of the graph is the Vaporeon’s level and up the other axis is the damage per second it inflicts.  The graph is a nice curve with four jumps where the boundaries provided by flooring the result are broken.


I can optimise my stardust usage by powering up my Pokémon to a certain level to get the most bang for my buck.  Because a Pokémon’s level can not be higher (or too much higher) than the trainer’s level, stardust can be saved and used elsewhere as efficiently as possible as one progresses through the game.


As with all scientific studies, a control is required.  In this instance, I need to control the Pokémon that my Vaporeon is battling against, and there are two things that affect how well it can defend attacks.

In that formula, I don’t know the “DefenceIV” and I don’t know the multiplier, so I set them (or what I need to find them) as 15 and 30 respectively.  The problem is that as I move these variables, my breakpoints move.

If I attack a level 30, 15 DefIV Rhydon, a breakpoint is at my level 35.  Attacking a level 30, 10 DefIV Rhydon, the breakpoint moves to level 32.  A level 20, 14 DefIV moved it to level 33.


All much a muchness, but the stardust difference between level 32 and 35 is 42,000.  You’ll have to trust me when I say that that is a lot!

Another Conclusion, then.

Thanks for indulging my geek out.  The point of this post was that sometimes you can see things, you can find patterns and trends all backed up by good, solid data.  However, there is only so much you can control.  This can be both a blessing a curse.  I was so pleased to find something, but all it’s done is left me with more questions.

I have a feeling, although this is why we test and look for things, that this doesn’t have too much further to run.  I think I’m going to be left with some very pretty but ultimately useless data.

Well it’s about time
It’s beginning to hurt
Time you made up your mind
Just what is it all worth

All my useless advice
All my hanging around
All your cutting down to size
All my bringing you down

Watch the clock on the wall
Feel the slowing of time
Hear a voice in the hall
Echoing in my mind

All your stupid ideals
You’ve got your head in the clouds
You should see how it feels
With your feet on the ground

Here I stand the accused
With your fist in my face
Feeling tired and bruised
With the bitterest taste

All my useless advice
All my hanging around
All your cutting down to size
All my bringing you down

All your stupid ideals
You’ve got your head in the clouds
You should see how it feels
With your feet on the ground

Useless by Depeche Mode

Since I wrote this post, I played with my data a bit more.  For those of you interested… On the graphs you’ll see that there are four break points.  With other combinations of Pokémon there can be more.  The break furthest to right tends to move further right per level increase in the defending Pokémon before dropping off the graph.

This doesn’t happen to the second break from the right. Instead you get a variation of only a few levels between defender level 30 to 37-38.

Therefore, I’m going to take my optimisation data from this point and power up to the attacker’s level that comes up most often.  I keep the defender’s defence IV at 15 because that’s the max and it makes sense to test against the strongest one to cover all bases.

Leave A Comment?