《社交网络》里的评分公式——ELO排名系统
《社交网络》里的Mark Zackburg被女朋友甩后,在舍友的启发下,充分发挥了技术宅男自娱自乐的恶搞天分,做出了Facemash网站,对学校女生的相貌进行排名打分,结果网站访问流量过大,直接把学校网络搞瘫痪了。Facemask大受欢迎的关键就在于Zackburg基友Eduardo写在窗户上的排名公式,看电影之时就对这个排名公式非常感兴趣,上网了解下,才发现这条公式就是大名鼎鼎的ELO等级分制度。ELO的应用非常广泛,大部分棋类比赛,现在流行的Moba游戏,像11平台的DOTA天梯系统,都是采用ELO等级分。
以后做竞技类的游戏排行榜可以用ELO来排名,更真实地反映玩家的实力。闲来无事,做了个flash的Facemask,挺有意思的。
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 tiethis.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 distribution。
计分方法
假设棋手A和B的当前等级分分别为和,则按Logistic distribution A对B的胜率期望值当为
类似B对A的胜率为
假如一位棋手在比赛中的真实得分(胜=1分,和=0.5分,负=0分)和他的胜率期望值不同,则他的等级分要作相应的调整。具体的数学公式为
公式中和分别为棋手调整前后的等级分。在大师级比赛中通常为16。
例如,棋手A等级分为1613,与等级分为1573的棋手B战平。若K取32,则A的胜率期望值为,约为0.5573,因而A的新等级分为1613 + 32 · (0.5 − 0.5573) = 1611.166
国际象棋中的等级分
国际象棋中,等级分和棋联称号的大致对应为
- 2500分以上:国际特级大师
- 2400-2499分:国际大师
- 2300-2399分:棋联大师
其他参考:
ELO等级分计算公式详解
转载于:https://www.cnblogs.com/leoin2012/p/4854442.html
《社交网络》里的评分公式——ELO排名系统相关推荐
- C语言北京冬奥会比赛排名系统
C语言北京冬奥会比赛排名系统 编写程序实现2022年北京冬奥会四种单人赛事的角逐,包括雪车.单板滑雪.速度滑冰.花样滑冰.从文件读取不少于28名运动员的参赛信息,包括姓名.国籍.年龄(g,单位岁).体 ...
- 自己做量化交易软件(41)自编仿通达信公式及自编因子公式的计算速度比较及因子公式结果排名
自己做量化交易软件(41)自编仿通达信公式及自编因子公式的计算速度比较及因子公式结果排名 自编仿通达信指标公式是对单只股票计算,如果对一批股票计算,只能用循环来逐个处理. 自编因子指标公式是对一批股票 ...
- Lucece评分公式OKapi BM25原理解析(中)
背景: 延续上篇写了TF/IDF的公式解析,本篇为BM25解析简单介绍. BM25起源于 概率相关性模型,而不是矢量空间模型,但是该算法与Lucene的实际评分功能有很多共同点. 两者都使用Term词 ...
- 抖音seo搜索排名,源码开发部署/seo排名系统源码分析。
前言:抖音seo搜索排名,源码开发部署/seo排名系统源码分析.抖音seo源码搭建部分代码 抖音seo是什么?其实seo它是搜索引擎优化,不仅这样,抖音里也有搜索引擎优化,抖音seo其实就是优化抖音的 ...
- 2021高考公务员成绩查询,2021国家公务员成绩排名系统已开通,附查询入口
[导读]华图国家公务员考试网同步国家公务员考试网发布:2021国家公务员成绩排名系统已开通,附查询入口,更多关于2021国家公务员考试成绩,2021国家公务员考试成绩排名的内容请关注广西国家公务员考试 ...
- 《深入理解Elasticsearch(原书第2版)》——第2章 查询DSL进阶 2.1 Apache Lucene默认评分公式解释...
本节书摘来自华章计算机<深入理解Elasticsearch(原书第2版)>一书中的第2章,第2.1节,作者 [美]拉斐尔·酷奇(Rafal Ku)马雷克·罗戈任斯基(Marek Rogoz ...
- ElasticSearch源码解析(五):排序(评分公式)
ElasticSearch源码解析(五):排序(评分公式) 转载自:http://blog.csdn.net/molong1208/article/details/50623948 一.目的 一个 ...
- 数据结构(Splay平衡树):HAOI2008 排名系统
[HAOI2008] 排名系统 [题目描述] 排名系统通常要应付三种请求:上传一条新的得分记录.查询某个玩家的当前排名以及返回某个区段内的排名记录.当某个玩家上传自己最新的得分记录时,他原有的得分记录 ...
- 快速排名系统询火星推荐_搜狗网站快速排名系统 - 新站权重如何快速提升
原出处:超级排名系统 原文链接:http://www.chaojipaiming.com 搜狗网站快速排名系统注册地址 seo.chaojipaiming.com 网站关键词快速排名优化,7-15天关 ...
最新文章
- 阿里云E-HPC赋能制造业仿真云弹性
- ubuntu常见问题:could not get lock /var/lib/dpkg/lock -open
- macOS Big Sur 11.1更新了!苹果macOS Big Sur 11.1正式版发布
- 这样的家居选购界面让你忍不住剁手的冲动!
- 18. 避免使用vectorbool
- android7.1 repo,RK3399 Android 7.1 删除repo后编译报错
- ubuntu 下codeblocks的相关配置
- 【BZOJ1150】数据备份(堆/优先队列)
- abaqus实例手册_《ABAQUS 6.14超级学习手册》——1.5 ABAQUS帮助文档-阿里云开发者社区...
- 常见的应用层协议都有哪些?【面试官可能会问系列】
- Scrapy + selenium + 超级鹰验证码识别爬取网站
- 转自国学大师--南怀谨先生
- 蓝桥杯 核桃的数量(python)
- -Cannot use v-for on stateful component root element because it renders multiple elements
- IP地址和子网的划分详解
- crypto-js 加密 php后端解密
- VS2019打包程序安装后无法运行
- 知识分享·NLP中一些有趣的trick
- C++第一天(编写第一个程序,变量与常量)
- 计算机无法识别新挂硬盘,电脑更新后系统不识别移动硬盘的原因分析及解决办法 系统无法识别移动硬盘教程(两种方...
热门文章
- javaEE基于ssm的超市会员管理系统
- C++网络编程(四):多进程并发服务器
- CBTC系统标准: 1474.2---系统用户接口需求
- 淘宝直通车选词怎么做?大神导航,一个神奇的网站,从此开启大神之路!
- 双向buck boost以及带隔离变压器DAB拓扑可支持各种电压等级的双向DCDC变换,纹波小,动态响应好
- No such file or directory及解决方法
- java pdf模板 表单 多页_java使用itext操作填充pdf模板,(根据一个模板生成多页数据)...
- MT6771/MT6765/MT6762/MT6761+MT6631降蓝牙功率的方法
- C#合并两个图片,并保存到本地
- WIN 8 安装PL2303驱动