New hot sorting (Patreon)
Content
In short, this is how the old algorithm worked:
- Fetch x amount of entities from datastore
- Of those, find the oldest one
- Of those, find the best scoring one
Foreach entity, calculate new score, like so:
1 - entity.elapsedSincePublication / oldest.elapsedSincePublication + 2 * entity.score / bestScoring.score
- Sort on new score
The resulting score was the sum of how new the interaction was (scoring 0-1), and what score it had (scoring 0-2).
This way of doing it had a couple of problems. Because the algorithm is linear, high scoring interactions would be favored, making the first page static and thus creating a positive feedback loop.
Another issue was that when the highest scoring interaction suddenly became too old to be included in the result (fetching x amount), then this would affect the score of everything else (since the score of each entity is based on the highest scoring one), suddenly changing the entire result and all pages.
The new algorithm we're using is based on how reddit works, with a logarithmic component:
https://medium.com/hacking-and-gonzo/how-reddit-ranking-algorithms-work-ef111e33d0d9#.24pmb83yj
We think this new algorithm is more fair giving rising interactions a chance in the spotlight, while also being more consistent in how interactions age. There won't be any sudden changes as time progresses, but rather a slow continuous change all the time.
As for 0.5.2…
We originally intended to release 0.5.2 sometime this previous week, but unexpected developments with the fox has pushed it a little bit. Fox has required more iterations than we first anticipated. This partly has to do with fox being a different kind of character than we’ve previously made and it has taken longer to get something we felt happy with, but also because we’re trying out a new approach in our character creation process.
We’re still not sure when 0.5.2 will be released, which means it’s probably at least a week away.