My post is dedicated to ELO decay only:

If we're doing ELO decay, scaling decay would likely be the way to go.

(.0000135*((|600 - current_rank≤600)|/600 + 1)(600 - (current_rank≤600 - 1))(ELO≤1600 - 1600))
*note: current_rank≤600 means that any rank over 600 defaults to 600. If some dude's rank is 2000, the algorithm would count him as rank 600. The same applies to ELO≤1600.

i.e. current_rank≤600 = 1, ELO = 1662.97: (.0000135*((|600 - 1)/600 + 1)(|600 - (1 - 1)|)(1662.97 - 1600)) = ~1.02 ELO decay.
*pulled reference statistics from the may ranking thread

The ELO decay may need to be nerfed a bit depending on the current amount of ranked players, or it could just be changed to total_ranked_players<1600 in the place of total_ranked_players; I don't have access to the leaderboard information at the moment so I can't give an amazing algorithm.

The idea is to diminish the ELO of players near the top of the leaderboard for extended periods of activity. Middle-league players would receive decay, but it wouldn't be near as detrimental in comparison to the top players.

Here's some extra number crunching I did; rounded to the hundredths since that's what the current ELO system is rounded at.

current_rank≤600 = 1, ELO = 1662.97: (.0000135*((|600 - 1)/600 + 1)(|600 - (1 - 1)|)(1662.97 - 1600)) = ~1.02 ELO decay.

current_rank≤600 = 1, ELO = 1650: (.0000135*((|600 - 1)/600 + 1)(600 - (1 - 1))(1650 - 1600)) = ~.81 ELO decay.

current_rank≤600 = 300, ELO: 1615: (.0000135*((|600 - 300|)/600 + 1)(600 - (300 - 1))(1615 - 1600) = ~0.09 ELO decay.

current_rank≤600 = 600, ELO: 1600: (.0000135*((|600 - 600|)/600 + 1)(600 - (600 - 1))(1600 - 1600) = ~0.0 ELO decay.

current_rank≤600 = 600, ELO: 1601: (.0000135*((|600 - 600|)/600 + 1)(600 - (600 - 1))(1601 - 1600) = ~0.0 ELO decay.

The ELO decay may be a bit too lenient for the average player, if anyone wants to play around with the numbers feel free. I'll likely change some stuff up myself.
Last edited by Creati0n; May 28, 2017 at 01:52 AM.
.