Elo评分系统:玩家持续加入游戏时的起始值
我在游戏中实施了 Elo 评级系统。玩家数量没有限制。玩家可以不断地加入游戏,因此玩家数量可能会逐渐增加。
Elo 值的精确计算方式并不重要,因为以下事实:如果 A 队击败 B 队,则 A 的 Elo 胜利等于 B 的 Elo 失利。
因此,我在评级系统的起始值方面遇到了问题:
- 我应该为每个玩家使用起始值“0”吗?所有 Elo 值的总和将是恒定的。但由于玩家数量不断增加,就会出现某种 Elo 通货紧缩,不是吗?
- 我应该使用任何大于 0 的起始值吗?在这种情况下,所有Elo值的总和会不断增加。所以可能会出现 Elo 通货膨胀。问题:Elo 点失去价值,但起始值始终保持不变。
我应该怎么办?你能帮助我吗?提前致谢!
I've implemented an Elo rating system in a game. There is no limit for the number players. Players can join the game constantly so the number of players probably rises gradually.
How the Elo values are exactly calculated isn't important because of this fact: If team A beats team B then A's Elo win equals B's Elo loss.
Hence I've got a problem concerning the starting values for my rating system:
- Should I use the starting value "0" for every player? The sum of all Elo values would be constant. But since the number of players is increasing there would be some kind of Elo deflation, wouldn't it?
- Should I use any starting value greater than 0? In this case, the sum of all Elo values would constantly increase. So there could be an Elo inflation. The problem: Elo points lose value but the starting value keeps always the same.
What should I do? Can you help me? Thanks in advance!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
您可以从 0 开始,然后在显示的分数中添加一个模糊因子,以使其保持在 0 以上,或者您也可以从 1000 开始 - 它们是同一件事。是的,起点为 1000 时,系统中的 ELO 总点数将不断增加,但每个玩家的平均点数始终相同 - 1000。Elo 的起始值始终是当前平均值。 ELO 是一种零和游戏,玩家 A 失去的分数由玩家 B 获得。
当您将起点设置为 1000 时,您实质上是在说平均玩家 = 1000 分。对于初始玩家(beta 测试者?)的封闭组来说,这是正确的,该组内的平均值 = 1000。但是,如果您随着时间的推移不断改进游戏,那么与没有这样做的人相比,您的封闭组平均玩家会变得非常熟练玩过。
现在,当您将 1000 分配给新玩家时,您是在说新的平均玩家 = 现有的高技能平均玩家。这不是真的,他们的技能可能比你原来的封闭团队要低得多。因此,新玩家会失去分数,而您的高技能玩家会获得=>通货膨胀。您需要做的是准确评估新玩家的技能,并为他们分配一个更符合他们实际技能的排名。这可以通过为他们的前 x 场比赛分配一个“临时排名”来完成,直到你感受到他们的技能为止。当临时排名时,只有他们的 ELO 分数会改变,而他们玩的人的分数不会改变。一旦他们加入真实的系统,他们进入 ELO 评分的分数将大致等于他们的实际技能,并且他们不会大幅上升或下降 =>没有通货膨胀或通货紧缩。
简而言之:临时排名
You can start at zero and add a fudge factor to the displayed score to keep it above zero, or you can start at 1000 - they are the same thing. Yes, with the 1000 starting point you'll have an increasing number of total ELO points in the system but it will always be the same number per player on average - 1000. The starting value for Elo is always the current average. ELO is a zero sum game, points lost by player A are gained by player B.
When you set a starting point at 1000 what you are essentially saying is that the average player = 1000 pts. With a closed group of initial players (beta testers?) this is true, within that group average = 1000. But if the game is something you improve at with time then your closed group average player becomes highly skilled compared to someone who hasn't played.
Now when you assign a 1000 to a new player you are saying new average players = existing highly skilled average player. This is not true, they are likely to be much less skilled that your original closed group. So the new player loses points and your highly skilled players gain => inflation. What you would need to do is accurately assess the skill of new players and assign them a ranking that is more in keeping with their actual skill. This could be done be assigning them a "provisional ranking" for their first x games until you get a feel for their skill. When provisionally ranked only their ELO score would change, not those of the people they play. Once they join the real system the points they bring into the scored ELO would roughly equate to their actual skill and they wouldn't move up or down dramatically => no inflation or deflation.
In short: Provisional rankings
该网站使用 elo 评级系统。它们的起价为 1200
取自 http://gameknot.com/ help-answer.pl?question=29
GameKnot 评级系统基于 Elo 评级系统,固定 K = 20 并进行以下修改:
前 20 场游戏用于在网站上建立玩家评级。前20场比赛中,玩家的评分按所有对手评分的平均值计算,胜则+400,负则-400,平则相同。当与具有临时等级的玩家对战时,使用+/-200分。
玩家的等级在前 20 场比赛中是临时的,之后就确定了。
在前 5 场评分比赛中,玩家的评分被视为等于 1200。
仅当比赛中至少进行了 3 步时,暂停才算为胜利(无论进行了多少步,超时的玩家始终都算作失败)。
游戏开始时和结束时两个评分中较高的一个用于计算游戏结束后的评分调整。
例如,如果在您的前 20 场评分游戏中,您玩了 3 场比赛,并且您赢了 1200 名临时评分玩家,然后对阵 1400 名既定评分玩家,但输给了 1600 名既定评分玩家,您的评分将为:
( (1200 + 200) + (1400 + 400) + (1600 - 400) ) / 3 = 1467
或者,如果在前 20 场评级比赛中,您对 1200 临时比赛获胜,对 1400 已确定比赛获胜,对 1600 临时比赛失败,平局对于 1500,您的评分将是:
( (1200 + 200) + (1400 + 400) + (1600 - 200) + 1500 ) / 4 = 1525
This site used the elo rating system. They start at 1200
taken from http://gameknot.com/help-answer.pl?question=29
GameKnot rating system is based on Elo rating system with a fixed K = 20 and the following modifications:
The first 20 games are used to establish player's rating on the website. During the first 20 games, the player's rating is calculated as an average of the ratings of all his/her opponents, +400 in case of a win, -400 in case of a loss, same for a draw. +/-200 points are used when playing against a player with a provisional rating.
PLayer's rating is provisional during the first 20 games, after which it becomes established.
Player's rating is considered to be equal to 1200 during the first 5 rated games.
Timeouts are counted as wins only if there were at least 3 moves made in the game (losses are always counted for the timed out players, regardless of how many moves were made).
The higher of two ratings, at the beginning of the game and at the end, is used to calculate the rating adjustments after the game is over.
For example, if during your first 20 rated games, you played 3 games and you won against 1200 player with provisional rating, then against 1400 player with established rating, but lost against 1600 player with established rating, your rating will be:
( (1200 + 200) + (1400 + 400) + (1600 - 400) ) / 3 = 1467
Or, if during your first 20 rated games, you win against 1200 provisional, win against 1400 established, lose against 1600 provisional, draw against 1500, your rating will be:
( (1200 + 200) + (1400 + 400) + (1600 - 200) + 1500 ) / 4 = 1525
Elo 致力于解决两个玩家或球队评分的差异,实际值无关紧要。您可以从任何您喜欢的数字开始。我为 Facebook Scrabble League 运行了一个起始值为 5000 的系统,只是为了将其与其他 Scrabble 评级系统区分开来。
通货膨胀并不是因为被高估的新人输给经验丰富的玩家而导致的——这一切都会随着时间的推移而平衡。通货膨胀是由于评分低于平均水平的人离开系统而造成的。与现实生活中的国际象棋不同,这种情况在网络游戏中往往会发生,在现实生活中,通货紧缩是一个问题,因为高评价的玩家会退役并将他们的积分从系统中扣除。
但你需要担心通货膨胀吗?唯一重要的是,如果您希望将当前玩家的表现与历史人物进行比较 - 这不是任何在线游戏玩家都可能面临的问题。即使您确实担心通货膨胀,也很容易纠正。找到所有当前玩家的平均评分并将其与起始数据进行比较,如果太高,则降低每个人的评分以使其恢复一致。根据我的经验,每个评级周期减少 1 或 2 分就可以解决问题,并导致很多新人被打败而不再回来。
许多系统给新手更高的K值,以便他们更快地找到自己的水平。
另一种方法是在新人玩完第一个评级期之前不要对他们进行评级,此时您可以根据 Elo 正确预测结果所需的条件来计算评级。如果您将所有未评级的玩家放在一起,这是不可能的,并且(我认为)如果锦标赛中有多个新人,则将涉及递归。它还破坏了 Elo 的零和原则,并消除了衡量通货膨胀的能力。然而,在与使用该系统的人交谈时,我被告知在实践中“一切都会平衡”。
我还要补充一点,我们有一位意志坚定的球员,在过去四年里,他参加了 732 场比赛,除了 21 场之外,他输掉了所有比赛,而他的 Elo 仍然在 4100 左右。他每轮失去的评分点正在迅速接近零。
Elo works on the difference in the ratings of the two players or teams, the actual value is irrelevant. You can start at any number you like. I run a system for the Facebook Scrabble League with a starting value of 5000 simply to distinguish it from other Scrabble ratings systems out there.
Inflation does not result from over-rated newcomers losing points to experienced players - that all evens out in time. Inflation results from people with less than average ratings leaving the system. This is what tends to happen in online games unlike real life chess, where deflation is a problem because highly rated players retire and take their points out of the system.
But do you need to worry about inflation? The only time it is important is if you wish to compare the performance of current players with historical figures - not a problem any online gamers are likely to face. Even if you do worry about inflation, it's easy to correct. Find the mean rating of all your current players and compare it with the start figure, if it's too high, reduce everyone's rating to bring it back in line. In my experience a reduction of 1 or 2 points per ratings period does the trick and accounts for a lot of newcomers who get thrashed and don't come back.
Many systems give newcomers higher K values in order that they find their level more quickly.
Another approach is not to rate newcomers until they have played their first ratings period, at which point you calculate the rating based on what if would have to have been for Elo to predict the results correctly. This is impossible if you have all unrated players together and (I think) would involve recursion if you have multiple newcomers in a tournament. It also undermines the zero-sum principle of Elo and removes your ability to measure inflation. However, talking to people who use this system, I am told "it all evens out" in practice.
I would also add that we have one determined player who has lost all but 21 out of 732 games he's played in the last four years and his Elo is still about 4100. The ratings points he loses each round are rapidly approaching zero.
我不知道它是否有用,但是 Mark Glickman 的评级页面 讨论了Elo 评级的一些问题、评级下降等(请参阅最后几段)。另请参阅他的评级系统,Glicko 系统,该系统似乎考虑了播放频率并讨论评级可靠性。最后,他的研究页面有很多讨论评级及其可靠性的论文。
希望有帮助。
I don't know if it is useful, but Mark Glickman's Ratings Page discusses some issues with Elo ratings, their declines, etc. (see the last few paragraphs there). Also see his rating system, the Glicko system, which seems to account for playing frequency and discusses rating reliability. Finally, his research page has a lot of papers discussing ratings and their reliability.
Hope that helps.
我会让每个人都从某个正值开始(10、100、1000,这并不重要)。当两个能力相对的人互相比赛时,分数就会如预期般交换。你需要关注的是两个玩家之间的某种相对能力。
假设,在游戏的后期,我有 25000 分,而你是 100 分的 n00b。我打败了你,我什么也没得到,你什么也没有失去。为什么?因为我刚刚pwned了一个n00b,这就是原因。新玩家击败首发玩家应该没有任何优势。另外,即使您处于某个积分范围内,您也应该实施一些措施,使您只能在特定时间范围内从给定玩家那里获得一定数量的积分。
显然,这将是在游戏的整个生命周期中不断调整的内容。
I would start everyone out at some positive point value (10, 100, 1000, it doesn't matter). When two people of relatively capability play each other, the scores trade as expected. Where you need to concentrate is some sort of relative capability between two players.
Suppose, later on in the game's life, I have 25000 points, and you're a n00b with 100. I beat you, I gain nothing and you lose nothing. Why? Because I just pwned a n00b, that's why. There should be no advantage for a new player to take down a starting player. Also, even if you are in some point range, you should implement something where you can only earn so many points from a given player in a certain time range.
Obviously, this will be something that will be continually tweaked throughout your game's life time.
也许,让分数不能低于起始值,并将损失的金额放入某个“口袋”。
假设玩家从 0 开始。
一名玩家 elo 为 0,失去 10 分。他不会失去任何东西,这些积分将进入一些人的口袋。
现在让我们想象一下该玩家赢得了下一场比赛并获得 11 分。他不会得到这 11 分,而只会得到 1 分。而现在他的“口袋”里已经有0分了。
Maybe, make points not be able to go below the starter about and put the amount of he loss in some "pocket.
Lets say players start with 0.
One player has elo 0 and lose 10 points. He will lose nothing and this points will go to some pocket.
Now lets imagine the player won the next game and got 11 points. Instead of getting those 11 points, he would get just 1 point. And now his "pocket" would have 0 points.
我认为互联网上大多数类似 ELO 的系统都会遇到收视率攀升的问题。
假设所有新玩家的等级都是零。 LousyPlayer 输掉了十几场比赛,他的评分远低于零。是什么阻止他清理浏览器、用新电子邮件地址注册新帐户并重新开始?
如果这是可能的,那么排名较低的帐户将被闲置,从而提高实际平均评级。
I think that most ELO-like systems on the Internet will have a problem with ratings creep.
Assume that all new players start at a rating of zero. LousyPlayer loses a dozen games, and his rating goes far below zero. What stops him from clearing his browser, registering a new account under a new email address, and starting over?
If this is possible, then low-ranked accounts will lay fallow, moving up the practical average rating.