-
Notifications
You must be signed in to change notification settings - Fork 24
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
Integrating the library #14
Comments
Sure, you can make an API that accepts JSON files. What exactly do you want this library to do? If you want to implement it in Rust, the |
I currently have a PHP application which is able to generate the player rankings for some contests as defined in the |
Oh if you just want MMR itself, it's not a lot of code: https://github.com/EbTech/Elo-MMR/blob/master/multi-skill/src/systems/simple_elo_mmr.rs Would you be able to translate this to your preferred language? Feel free to ask questions. |
I think I should be able to do this. However, is there a difference between EloMMR and SimpleEloMMR? How much do they differ? |
They're the same. The bigger Elo-MMR just has a bunch of (for most purposes) unnecessary features that can be turned on, like approximations that would make it run even faster. |
I decided to use it as a web-api for now as it is simpler to use it that way for now. Are there any specific values for drift_per_second needed? After a certain threshold (~ 0.5/(246060)) inactive players are preferred. |
Inactive players get a boost when the drift is above 0.5 per day? That's unexpected. |
I made a repo to reproduce it (including steps) with the dataset I am using here. Below you can see the first ranked player, the display ranking, the last contest and the drift per day. For drifts between 0 and 0.25 (the threshold may be higher) it seems reasonable but for higher than 0.5 it seems off as a player which hasn't been active for some years shouldn't be rated the top player.
Do you have any idea? Did I do something wrong in the rust api or is my methodology wrong? Thank you in advance. |
Oh hey, I just remembered something that should explain your situation (sorry I've been a bit ill). The decay feature, which I think was pioneered by Glicko, comes with a couple caveats:
If you disagree with this uncertainty-based approach altogether, you can hack in a rating penalty instead of messing with sigma. |
Thanks for your thorough explanation. Currently I use the experiment.eval() to to get the ranking. Where can I hack in the rating penalty? |
You can use the uncertainty-based decay too, using the same formula to update the rating for any given time. It's just that the current implementation doesn't have a way to ask for an updated rating at a particular time (I may change the design to support that later). If you want to add that yourself, I could imagine several places and haven't thought carefully about which is best. Whenever you retrieve the ratings, if you also retrieve the player's last update time, you can compare that to the current time and compute an adjusted rating that way. |
I have a tendency to dislike this approach - only because if a player is absent from competition for a while it is unfair to assume that their skill will decrease. A possible reason for why a competitor is not competing may be to practise a particular skill or improve in an aspect of the game / task. I am still thinking of a solution to this problem. |
@stephankokkas in that case, wouldn't the uncertainty-based approach be more suitable? That way, the display rating is temporarily lowered, but is quickly raised when the player returns. Maybe you specifically dislike mu returning to 1500? In that case, you might leave mu untouched, but gradually increase sigma^2 towards an asymptotic cap such as 350. If the community gravitates towards a particular approach, I might make that the default; for now, there appears to be room for competing philosophies. |
@stephankokkas I am unable to grasp the concept @EbTech suggests. However, lowering the score manually incentivizes users to play more often. |
@stephankokkas have you come up with a better solution? |
Without changing the code, yes. I was able to acquire training data of my competitors and incorporated it that way into the rating of each player. |
I don’t understand it completely. How can I integrate it? Is there a rating decay? |
To expand more on Aram's solution: The "display rating" in our system is calculated as Aram is suggesting steadily increasing the "uncertainty" over time. On the front-end, this looks like the rating is gradually going down over time. Increasing the uncertainty means that the "true rating" in our system stays the same, but the system is less certain about the spread around the true rating. When users participate in a contest, their performance uncertainty is decreased by the system because we get more information about them. This means that if their skill has not decayed, then they will return to their original rating quicky. Hope this helps, |
@where-is-paul would you be able to explain how to enable this feature when rating? Is it a tag that can be used in the command line? Or perhaps something that needs adjusting in the source code? Thanks |
Some commits happened recently on this repository but I don’t know what exactly they do. At least some APIs have changed. For example some in the SimpleEloMMR. |
@stephankokkas conservative display ratings are computed by https://github.com/EbTech/Elo-MMR/blob/b513efe/multi-skill/src/systems/common/player.rs#L15, and appear in the @Wulfheart Unless I'm forgetting something, the old APIs should still work. A bit of backward-compatibility was lost when minor changes were made to the file format. We did add a new way to run the rating system using config files (briefly mentioned in README), but that's not quite ready for public primetime yet. We'll document it better when we intend for more people to use it. |
@EbTech just to be sure: The drift per second is only applied, when the player participates in another game, isn't it? |
I would like to integrate the algorithm into an existing Web API. Therefore I thought I could send the data which is currently in a subfolder of the
cache
directory directly as JSON. Is there any way to integrate it quite seamlessly as a library?The text was updated successfully, but these errors were encountered: