Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >ELO等级分制度

ELO等级分制度

作者头像
Twcat_tree
发布于 2022-11-22 01:15:20
发布于 2022-11-22 01:15:20
1.5K00
代码可运行
举报
文章被收录于专栏:二猫の家二猫の家
运行总次数:0
代码可运行

目录

前言

近段重温了经典电影《社交网络》,在电影中 ,Facebook创始人马克·扎克伯格在和女友分手后,受到好友爱德华多对核心算法的指引 写下了哈佛女生“选美”网站Facemash,并一气之下黑了学校教务系统,将所有女生的照片放在Facemash上供人评比,网站大获成功,在上线两小时(周末凌晨两点到四点)内点击量达到了2万2千次,挤爆了哈佛的网络。Facemash也被喻为Facebook的原型,而这个网站中所用到的算法就是 ELO等级分制度

ELO等级分制度

ELO等级分制度 是美国物理学家 Arpad Elo 创建的一个衡量各类对弈活动选手水平的评分方法,是当今对弈水平评估的公认的权威方法。被广泛应用于国际象棋、围棋、足球等运动,以及很多网游与电子竞技产业。

游戏界比较著名的应用有: FIFA online,、炉石传说、星际争霸天梯排行、魔兽世界竞技场、Dota天梯系统、LOL匹配等游戏的竞技比赛系统中,都是采用ELO等级分

ELO是一套较为完善的评分规则和机制,比较适合对竞技类游戏的选手的技术等级进行评估,用以计量个体在对决类比赛中相对技能的算法系统,对于游戏而言,需要让每场游戏尽可能的接近公平,创造双方势均力敌的竞赛环境。

下面就来对算法进行解读,Arpad Elo认为:

假设每个玩家每盘游戏中的表现是一个正态分布的随机变量,ELO系统用随机变量的平均值来代表选手的真正水平。(后来普遍认为 Logistic逻辑斯蒂 分布更为合理)。 ELO系统用胜平负来评价选手在某一场游戏中的表现,赢就代表这场发挥比对手好,反之就是不好,因此会用赢加分,输扣分,平不得分来进行评分。

ELO计算方法:

Ra:A玩家当前的积分

Rb:B玩家当前的积分

Sa:实际胜负值,胜=1,平=0.5,负=0

Ea:预期A选手的胜负值,Ea=1/(1+101)

Eb:预期B选手的胜负值,Eb=1/(1+102)

因为E值也为预估,则Ea+ Eb=1

如果选手的表现比期望要好,那么此选手的排名应该上升。相反,若表现不如期望,则排名会下降。

Sa为选手A本局的得分(1或0),K为常数,数值越大比分变动越快,在大师级象棋赛中通常取16。用这个公式来计算出选手A本局比赛后的等级分排名。

例如,棋手A等级分为1613,与等级分为1573的棋手B战平。若K取32,则A的胜率期望值为,约为0.5573,因而A的新等级分为1613 + 32 · (0.5 − 0.5573) = 1611.166

代码实现: 代码分析

Facemash中ELO等级分用来对进行女生的分数进行评比,从而确定哪些是最优质女生。

首先,每个女生都有一个基础分,这个基础分在一开始都是一样的1400分,可称作“旧等级分”,在供人评比之后,将会通过公式计算出“新等级分”。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
新等级分=旧等级分+K(胜负值-期望胜率) 
      K值是一个定值,不过电影里没说明K值为多少,于是自己假定一个10 
      胜负值很简单,对于胜者胜负值为1,对于负者胜负值为0(这里没有平手,所以忽略平手时的0.5) 
      期望胜率待会儿再说,先告诉大家,当比较的2个女生旧等级分相同时,期望胜率对双方都为0.5 

现在假定某人在A,B两位女生中选择了A,那么A的新等级分为1400+10(1-0.5)=1405,B的新等级分为1400+10(0-0.5)=1395

在经过一阵评选之后,就会产生2位女生等级分不同的情况,这时候就需要用第二个公式重新计算期望胜率。

现在假定第2个人在A,B两位女生中选择了A,那么对A来说新的期望胜率为1/(1+10(1395-1405/400))≈51.4%,对B来说新的期望胜率为1/(1+10(1405-1395/400))≈48.5%,A的新等级分为1405+10(1-0.514)=1410.14,B的新等级分为1395+10(0-0.485)=1389.86

源码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <bits/stdc++.h>
using namespace std;
 
#define win	    1;
#define loss 	0;
#define tie  	0.5;
 
class OBJ{ 
    public:
    	double Score; 
    	string Name;
		OBJ(string name){// 这是构造函数
		    this->Score = 1400 ;
		    this->Name = name;
		}
};
 
double getmean(OBJ obj1,OBJ obj2){//计算期望 
	return 1 / (1+pow(10,(obj1.Score - obj2.Score)/400));
}
 
void computeScore(OBJ &obj1,OBJ &obj2,double result){
	double mean1 =  getmean(obj1,obj2);
	double mean2 =  getmean(obj2,obj1);
	obj1.Score = obj1.Score + 10*(result - mean1);
	obj2.Score = obj2.Score + 10*(abs(result-1) - mean2);
} 
 
int main(){
	OBJ obj1("xiaoA");
	OBJ obj2("xiaoB");
	double result;
	while(1){
		cout << "输入比赛结果(1为A赢,0.5为平局,0为B赢,-1结束):  ";
		cin >> result;
		if(result == -1)break; 
		computeScore(obj1,obj2,result) ;
		cout << "比赛结束后A的分数为:" << obj1.Score<<endl; 
		cout << "比赛结束后B的分数为:" << obj2.Score<<endl;
	}
	cout << "game over,thanks"; 
    return 0;
}

运算结果:


  1. (Rb-Ra)/400 ↩︎
  2. (Ra-Rb)/400 ↩︎
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-11-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
0573-5.16.1-如何将CDSW从1.4.2升级到1.5
Cloudera于2019年1月29日发布CDSW1.5,Fayson在前面的文章《0544-CDSW1.5的新功能》中对于1.5的新功能也做了介绍。对于已经安装并在使用的CDSW用户,很多都是1.4版本的,发布新版本,一般第一时间关心是如何升级,本文将主要描述如何升级CDSW。
Fayson
2019/04/28
7660
0573-5.16.1-如何将CDSW从1.4.2升级到1.5
0773-1.7.2-CDSW1.7的新功能
Cloudera Data Science Workbench仅支持从版本1.5.x和1.6.x升级到版本1.7.1。如果使用的是CDSW的早期版本,则必须首先升级到1.5.x或1.6.x版,然后再升级到1.7.1版。
Fayson
2020/05/25
1.3K0
如何通过CM将CDSW从1.3升级至1.4
随着CDSW新版本的发布也提供了更多的新功能,具体参考Fayson前面文章《CDSW1.4的新功能》,本篇文章Fayson主要介绍如何通过Cloudera Manager升级CDSW至1.4版本。
Fayson
2018/08/17
6110
如何通过CM将CDSW从1.3升级至1.4
0586-5.16.1-如何在CDH5.16.1中安装CDSW1.5
Cloudera在2018年11月29日发布了CDH5.16.1版本,5.16.1的新功能可以参考前一篇文章《0466-CDH5.16.1和CM5.16.1的新功能》,2019年1月29日发布CDSW1.5。CDH5.13版本以后支持CDSW的Parcel安装,本篇文章Fayson就主要讲述如何通过CM5.16.1使用Parcel包安装CDSW1.5。
Fayson
2019/04/28
1.9K0
0586-5.16.1-如何在CDH5.16.1中安装CDSW1.5
0478-如何在CDH5.16.1中安装CDSW1.4.2
Cloudera在2018年11月29日发布了CDH5.16.1版本,5.16.1的新功能可以参考前一篇文章《0466-CDH5.16.1和CM5.16.1的新功能》,这一次随着CDH5.16的同时没有发布新的CDSW,比如CDSW1.5,但前一段时间就已经发布了CDSW1.4.2。CDH5.13版本以后支持CDSW的Parcel安装,本篇文章Fayson就主要讲述如何通过CM5.16使用Parcel包安装CDSW1.4.2。
Fayson
2018/12/26
2.8K0
0666-6.2.0-如何在CDH6.2.0上安装CDSW1.5
Cloudera在2019年1月29日发布CDSW1.5,CDSW1.5的一个最大的更新就是支持CDH6和HDP,在1.5之前,CDSW是不能安装到CDH6.x的。CDH5.13版本以后支持CDSW的Parcel安装,本篇文章Fayson就主要讲述如何通过CM6.2使用Parcel包安装CDSW1.5。
Fayson
2019/07/09
1.3K0
0892-7.1.7-如何将CDP从7.1.7升级到7.1.8
1.Cloudera升级概述 CDP作为一个软件系统,安装成功后主要包含三部分:Cloudera Manager Server,Cloudera Manager Agent以及CDH Parcel,所以CDP的升级也主要是包含这三部分的升级。一般来说是先通过操作系统的Package升级Cloudera Manager,然后通过Parcel升级CDH即可以完成整个集群的升级。CDH和Cloudera Manager不用同时升级,但是需要保证Cloudera Manager和CDH版本的兼容,具体的版本兼容情况
Fayson
2022/09/08
1.4K0
0892-7.1.7-如何将CDP从7.1.7升级到7.1.8
如何在CDH5.13中安装CDSW1.2
Cloudera前一段时间发布了CDH5.13版本,5.13的新功能可以参考前一篇文章《CDH5.13和CM5.13的新功能》,在CDH5.13版本以后支持CDSW的Parcel安装,本篇文章就主要讲述如何通过CM使用Parcel包安装CDSW。
Fayson
2018/03/29
1K0
如何在CDH5.13中安装CDSW1.2
如何在CDH5.14中安装CDSW1.3
温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。 Fayson的github: https://github.com/fayson/cdhproject 提示:代码块部分可以左右滑动查看噢 1.文档编写目的 ---- Cloudera在2018年1月26日发布了CDH5.14版本,5.14的新功能可以参考前一篇文章《CDH5.14和CM5.14的新功能》,在CDH5.13版本以后支持CDSW的Parcel安装,本篇文章就主要讲述如何通过CM5.14.3使用Parce
Fayson
2018/07/12
1.9K0
如何在CDH5.15中安装CDSW1.4
温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。 Fayson的github: https://github.com/fayson/cdhproject 提示:代码块部分可以左右滑动查看噢 1.文档编写目的 ---- Cloudera在2018年6月12日发布了CDH5.15版本,5.15的新功能可以参考前一篇文章《CDH5.15和CM5.15的新功能》,随着CDH5.15发布的同时还有CDSW1.4。在CDH5.13版本以后支持CDSW的Parcel安装,本篇文章
Fayson
2018/07/13
5.4K2
0594-6.1.0-如何从CDH6.1.0升级到CDH6.2.0
Fayson在前面的文章中详细介绍过CDH的升级,参考《如何升级Cloudera Manager和CDH》,对于小版本的滚动升级,也有专门的一篇文章介绍,参考《0284-CDH集群跨多版本滚动升级》。但以前的版本都是基于CDH5,本文主要是描述如何从CDH6.1升级到CDH6.2。
Fayson
2019/04/29
2K0
0594-6.1.0-如何从CDH6.1.0升级到CDH6.2.0
0600-6.1.0-如何在CDH6.1中安装CDSW1.5
Cloudera在2019年1月29日发布CDSW1.5,CDSW1.5的一个最大的更新就是支持CDH6和HDP,在1.5之前,CDSW是不能安装到CDH6.x的。CDH5.13版本以后支持CDSW的Parcel安装,本篇文章Fayson就主要讲述如何通过CM6.1使用Parcel包安装CDSW1.5。
Fayson
2019/04/28
2.4K0
0600-6.1.0-如何在CDH6.1中安装CDSW1.5
CDSW1.4的新功能
温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。 Fayson的github: https://github.com/fayson/cdhproject 提示:代码块部分可以左右滑动查看噢 前两天Fayson介绍过《CDH5.15和CM5.15的新功能》,与CDH5.15同时发布的还有CDSW1.4,以下我们具体看看CDSW1.4的新功能。 1.CDSW1.4的新功能 ---- 1.模型和实验 - CDSW1.4优化了模型开发到投产的过程。现在,你可以使用CDSW在统一的工作流里创建,训练和部
Fayson
2018/07/12
1.2K0
0544-CDSW1.5的新功能
Cloudera于2019年1月29日发布CDSW1.5,因为恰逢过年,所以Fayson没第一时间翻译。1.5的主要更新是C6中终于可以使用CDSW了,另外HDP2.6.5和HDP3.1中也可以使用CDSW。
Fayson
2019/03/07
1.3K0
0716-1.6.0-CDSW1.6的新功能
你现在可以利用CDSW的所有好处,同时使用你熟悉的编辑器。这个功能支持在你本地电脑上运行第三方的IDE比如PyCharm,或者基于浏览器的IDE像Juypter。Base Image v8预打包了Juypter,你可以在Start Session菜单中选择它。
Fayson
2019/10/25
1.1K0
如何通过CM升级Kafka0.11及Spark2.2
在前面的文章《CDH5.13和CM5.13的新功能》中Fayson介绍过Cloudera发布CDH5.13时,同时也发布了Kafka3.0版本(即社区0.11版),目前社区最新版本为1.0。由于Kafka3.0和Spark2.2需要JDK8的支持,所以在升级Kafka3.0和Spark2.2版本时必须先升级JDK版本,可以参考《如何将CDH集群JAVA升级至JDK8》和《如何将Kerberos环境下CDH集群JAVA升级至JDK8》,本文Fayson主要介绍在CDH集群中如何升级Kakfa3.0和Spark2.2。
Fayson
2018/03/29
1.8K0
如何通过CM升级Kafka0.11及Spark2.2
如何使用Cloudera Manager升级Spark2.1版本至Spark2.2
在CDH集群中spark1和Spark2版本可以共存,为了更好的体验及使用Spark新版本的API或修改已知旧版本的bug,现需要将CDH集群中Spark2的版本升级至Spark2.2最新,本篇文章主要介绍如何通过Cloudera Manager将Spark2.1版本升级至Spark2.2。
Fayson
2018/03/29
2.2K0
CDH5.11 离线安装或者升级spark2.x详细步骤
在我CDH5.11集群中,默认安装的spark是1.6版本,这里需要将其升级为spark2.x版本。经查阅官方文档,发现spark1.6和2.x是可以并行安装的,也就是说可以不用删除默认的1.6版本,可以直接安装2.x版本,它们各自用的端口也是不一样的。我尝试了安装spark2.0版本和spark2.1版本,均告成功。这里做一下安装spark2.1版本的步骤记录。
大数据真好玩
2020/08/28
5420
CDH5.11 离线安装或者升级spark2.x详细步骤
0726-6.3.0-如何在CDH6.3中安装Streams Messaging Manager(SMM)
Cloudera在2019年9月18日正式对外宣布发布Cloudera Stream Processing(CSP)2.0,参考《Cloudera Streams Management正式GA》。Cloudera Stream Processing (CSP)提供了高级消息传递,流处理和流分析功能,这些功能由Apache Kafka作为核心流处理引擎提供支持。它同时为Kafka添加了两个流管理功能,Kafka监控和Kafka数据复制。Streams Messaging Manager(SMM)为Kafka集群提供了一个监控仪表板。Streams Replication Manager(SRM)为企业提供了实现跨集群Kafka topic复制的能力。
Fayson
2019/11/09
1.8K0
0726-6.3.0-如何在CDH6.3中安装Streams Messaging Manager(SMM)
0584-5.16.1-如何卸载CDSW1.5
Fayson在上一篇文章中介绍了如何将CDSW1.4.2升级到CDSW1.5,参考《0573-5.16.1-如何将CDSW从1.4.2升级到1.5》,期间还碰到了一个问题《0574-5.16.1-CDSW1.4升级1.5版本db-migrate镜像启动失败问题解决》,本文主要介绍如何卸载CDSW1.5。
Fayson
2019/04/28
5640
0584-5.16.1-如何卸载CDSW1.5
相关推荐
0573-5.16.1-如何将CDSW从1.4.2升级到1.5
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验