您的位置:首页 >盘口分析 >

《社交网络》MarkZackburg被女朋友甩后的ELO等级分制度

时间:2022-07-28 17:03:38 来源:网络整理

《社交网络》中的马克·扎克伯格在被女友甩后,在室友的启发下,充分发挥了技术宅男自娱自乐的恶搞天赋足球世界排名计算方法,创建了一个名为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;

《社交网络》MarkZackburg被女朋友甩后的ELO等级分制度

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 {

《社交网络》MarkZackburg被女朋友甩后的ELO等级分制度

return this.rating2; } } }

ELO 简介

ELO评级系统是指由匈牙利裔美国物理学家Elo创建的一种评估方法,用于衡量各种游戏活动的水平。它是当今公认的评估游戏水平的权威方法。广泛应用于国际象棋、围棋、足球、篮球等运动项目。网游英雄联盟和魔兽世界中的竞技战斗系统也采用了这种分级系统。

历史

ELO 评分系统是一种基于统计的方法,用于评估棋手的技能。美国国际象棋协会在 1960 年首次使用这种计分方法。这种方法很快就流行起来,因为它比以前的方法更公平、更客观。 1970年,国际棋联正式开始使用评分系统。

Elo 模型最初使用正态分布。但是实践表明,棋手的成绩并不是正态分布的,所以目前的评分系统通常采用Logistic分布。

评分方法

假设玩家A和B的当前成绩分别为

,那么Logistic分布A对B的胜率的期望值应该是

类似于B对A的胜率

《社交网络》MarkZackburg被女朋友甩后的ELO等级分制度

如果玩家在游戏中的真实得分

(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成绩计算公式详解


郑重声明:文章仅代表原作者观点,不代表本站立场;如有侵权、违规,可直接反馈本站,我们将会作修改或删除处理。