Over the past few weeks I have been working on a larger project to extract as much information from the game as possible. I spent a lot of hours moving game information to a google sheet in order to analyse it.
I posed the question of, “Who is the most dominant player bmx2 has every seen?”
If you want the simple answer, it is Uncleal. Uncleal is by far the most dominant player we have ever seen.
Before we go into how it was done, you can see the whole leaderboard here:
https://docs.google.com/spreadsheets/d/1ABM3uI8KIGOfn_6sRirYebpmEpfoYCuwYKrdfH5sLSM/edit#gid=1985958143
The math:
To even start to figure this out we would need to make a ranking system that measures dominance/scores from past weeks and having them decay over time.
The first would be to assign values to each Jam with a exponential decaying function in order to balance out a score. But the exponential decaying function must not flatten out for over 30 values.
Something more like light blue, and not like dark blue or green, as it flattens out too quickly and would assign higher scores to lower values.
We did this by taking:
Which gives us this nice exponential decaying function:
We would now assign the current race/Jam a value increase of 1.67 in order to formulate first place to 500, and not 300 potential score value.
Now, to get the dominance account. We would need to get a potential value for the last 5, and then last 10 Jams in order to measure true dominance and not just previous Jam scores (which would not actually alter the scores from the previous Jam).
We would want to decay the value previous Jams so the previous 4 Jams would be just true score. So a potential value of 300 per race (or 299.997 if you want to be exact ). Then, taking the prior 5 Jams and giving them a potential value of 100 each.
This would now make the function:
With which we could calculate anyone’s dominance score.
Some simple google sheets formulas and we would automatically extract dominance from another sheet.
=(INDEX(‘Point Values’!E:E,Profiles!L2)*1.67) + ((INDEX(‘Point Values’!E:E,Profiles!F2) + INDEX(‘Point Values’!E:E,Profiles!E2) + INDEX(‘Point Values’!E:E,Profiles!D2) + INDEX(‘Point Values’!E:E,Profiles!C2))/3 + (INDEX(‘Point Values’!E:E,Profiles!G2) + INDEX(‘Point Values’!E:E,Profiles!H2) + INDEX(‘Point Values’!E:E,Profiles!I2) + INDEX(‘Point Values’!E:E,Profiles!J2) + INDEX(‘Point Values’!E:E,Profiles!K2))/1.67)
This would go into every field for the player (besides the first 10 which we consistently would add scores (the first one would get score*2 to get a higher value). This is why the scores (basically linearly) rise until week 10 until all values from previous Jams have gotten valued.
Now after this we just had to make profiles for each of the 296 players that have reached top-30 in a Jam and then we were set!
If you have any further questions, feel free to contact me here, or on discord: BWR_Colin#3169
Thank you!