《社交网络》MarkZackburg被女朋友甩后的ELO等级分制度
《社交网络》中的马克·扎克伯格在被女友甩后,在室友的启发下,充分发挥了技术宅男自娱自乐的恶搞天赋足球世界排名计算方法,创建了一个名为Facemash的网站进行长相分析的女生。排名打分足球世界排名计算方法,结果网站流量太大,直接瘫痪了学校网络。 Facemask受欢迎的关键在于Zackburg的朋友Eduardo在橱窗上写的排名公式。我在看电影的时候对这个排名公式很感兴趣。上网看了下,发现这个公式就是大名鼎鼎的ELO评分系统。 ELO的应用非常广泛。大多数棋类游戏和流行的Moba游戏,例如11平台的DOTA天梯系统,都使用ELO等级分。
未来竞技游戏的排名可以通过ELO排名,更真实的体现玩家的实力。闲来无事做了个flash面罩,很有意思。
ELO的实现代码
package { /** * Elo排名算法 * @author ShuchangLiu */ public class EloRating { public static const ELO_RESULT_WIN:int = 1; public static const ELO_RESULT_LOSS:int = -1; public static const ELO_RESULT_TIE:int = 0; public static const ELO_RATING_DEFAULT:int = 1500; protected var rating1:int; protected var rating2:int; protected var score1:Number; protected var score2:Number; public function EloRating(rating1:int = ELO_RATING_DEFAULT, rating2:int = ELO_RATING_DEFAULT):void { this.rating1 = rating1; this.rating2 = rating2; } /** * @param result ELO_RESULT_WIN or ELO_RESULT_LOSS or ELO_RESULT_TIE */ public function setResult(result:int):void { var cscore1:Number = computeScore(this.rating2, this.rating1); var cscore2:Number = computeScore(this.rating1, this.rating2); if (result == ELO_RESULT_WIN) { this.rating1 = this.rating1 + (computeK(this.rating1) * (1 - cscore1)); this.rating2 = this.rating2 + (computeK(this.rating2) * (0 - cscore2)); }else if(result == ELO_RESULT_LOSS) { this.rating1 = this.rating1 + (computeK(this.rating1) * (0 - cscore1)); this.rating2 = this.rating2 + (computeK(this.rating2) * (1 - cscore2)); }else{ // Assume tie this.rating1 = this.rating1 + (computeK(this.rating1) * (0.5 - cscore1)); this.rating2 = this.rating2 + (computeK(this.rating2) * (0.5 - cscore2)); } } protected function computeScore($rating1:int, $rating2:int):Number { return (1 / (1 + Math.pow(10, ($rating1 - $rating2) / 400))); } protected function computeK(rating:int):int { if(rating>=2400){ return 16; }else if(rating >= 2100){ return 24; }else{ return 36; } } /** A的获胜期望*/ public function getScore1():Number { this.score1 = computeScore(this.rating2, this.rating1); return this.score1; } /** B的获胜期望*/ public function getScore2():Number { this.score2 = computeScore(this.rating1, this.rating2); return this.score2; } /** A的排名等级*/ public function getRating1():int { return this.rating1; } /** B的排名等级*/ public function getRating2():int { return this.rating2; } } }
ELO 简介
ELO评级系统是指由匈牙利裔美国物理学家Elo创建的一种评估方法,用于衡量各种游戏活动的水平。它是当今公认的评估游戏水平的权威方法。广泛应用于国际象棋、围棋、足球、篮球等运动项目。网游英雄联盟和魔兽世界中的竞技战斗系统也采用了这种分级系统。
历史
ELO 评分系统是一种基于统计的方法,用于评估棋手的技能。美国国际象棋协会在 1960 年首次使用这种计分方法。这种方法很快就流行起来,因为它比以前的方法更公平、更客观。 1970年,国际棋联正式开始使用评分系统。
Elo 模型最初使用正态分布。但是实践表明,棋手的成绩并不是正态分布的,所以目前的评分系统通常采用Logistic分布。
评分方法
假设玩家A和B的当前成绩分别为
和
,那么Logistic分布A对B的胜率的期望值应该是
类似于B对A的胜率
如果玩家在游戏中的真实得分
(Win=1 point, Sum=0.5 points, Loss=0 point) 和他的预期胜率
不同,那么他的成绩点也要相应调整。具体数学公式为
在公式中
和
调整前和调整后的成绩分别为玩家。在大师赛中
通常是 16 个。
例如,等级为 1613 的玩家 A 与等级为 1573 的玩家 B 并列。如果 K 为 32,则 A 的预期获胜率为
,约0.5573,所以A的新成绩是1613 + 32 · (0.5 − 0.5573) = 1611. 166
国际象棋评分
在国际象棋中,成绩与国际象棋联合会头衔的大致对应关系为
其他参考资料:
ELO成绩计算公式详解
-
FIFA世界排名规则调整新方案跟现行的平均分算法
2022-07-18 -
中国在世界足坛排名下降了多少?中国足球亚洲最新排名
2022-07-18 -
足球不是单纯的回合制游戏(/9156240)(图)
2022-06-19