-
Notifications
You must be signed in to change notification settings - Fork 359
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Migrate rating system from Topcoder to Elo-MMR #1751
Conversation
Codecov Report
@@ Coverage Diff @@
## master #1751 +/- ##
==========================================
- Coverage 46.52% 46.22% -0.30%
==========================================
Files 221 222 +1
Lines 12461 12612 +151
==========================================
+ Hits 5797 5830 +33
- Misses 6664 6782 +118
Continue to review full report at Codecov.
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Otherwise looks pretty good.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please also create a PR to https://github.com/DMOJ/docs/blob/master/docs/site/api.md with any API changes.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Code looks fine to me. Has anyone tested the migration? If it works I am going to approve.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM and applied to prod.
Thanks everyone who worked on this!
Elo-MMR is a rating system that has more desirable properties than Topcoder's rating system. For example, Elo-MMR converges faster, prevents users from farming volatility, and has a more reasonable performance calculation.
Change in the rating curve (ratings rounded to the nearest 100x+50):
Change in each user's rating (i.e. users can expect their rating to increase by +100):
Due to the expected +100 rating increase, I modified the rating cutoffs:
RATING_VALUES = [1000, 1200, 1500, 1800, 2200, 3000]
RATING_VALUES = [1000, 1300, 1600, 1900, 2400, 3000]
Change in performance (on my virtual machine):
recalculate_ratings()
(4.5 seconds), and the query forhistorical_p
(1.5 seconds).