用分享的方式成长,用有趣的眼光看世界。 

欢迎来到22 26 25的博客 !
热爱编码、算法、知识总结,不定期更新有趣、有料、有营养内容。 让我们共同学习,共同进步。

好文推荐:   从B站(哔哩哔哩)泄露的源码里发现了B站视频推荐的秘密

                     值得学习17个C/C++ 超经典开源项目,面试加分

                     400+条实用C/C++框架、库、工具整理 ,你能想到的都在这里了

目录


前言

ELO等级分制度

代码实现

前言


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

ELO等级分制度


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

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

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

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

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

ELO计算方法:

  Ra:A玩家当前的积分

  Rb:B玩家当前的积分

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

  Ea:预期A选手的胜负值,Ea=1/(1+10^[(Rb-Ra)/400])

  Eb:预期B选手的胜负值,Eb=1/(1+10^[(Ra-Rb)/400])

  因为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分,可称作“旧等级分”,在供人评比之后,将会通过公式计算出“新等级分”。

新等级分=旧等级分+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

源码: 

#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;
}

运算结果:

如果有什么要补充的,欢迎下方

Facebook前身 哈佛大学“选美“网站核心算法 -- ELO等级分制度(附源码)相关推荐

  1. SHA224和SHA256哈希算法原理及实现(附源码)

    相关文章: SHA224和SHA256哈希算法原理及实现(附源码) 国密SM3哈希算法原理及实现(附源码) SHA1哈希算法原理及实现(附源码) MD5哈希算法原理及实现(附源码) MD4哈希算法原理 ...

  2. SHA3系列(KECCAK)哈希算法原理及实现(附源码)

    相关文章: (本文持续更新中) SHA3系列(KECCAK)哈希算法原理及实现(附源码) SHA512系列哈希算法原理及实现(附源码) SHA224和SHA256哈希算法原理及实现(附源码) 国密SM ...

  3. 国密SM3密码杂凑算法原理及实现(附源码)

    相关文章: 国密SM3哈希算法原理及实现(附源码) SHA1哈希算法原理及实现(附源码) MD5哈希算法原理及实现(附源码) MD4哈希算法原理及实现(附源码) MD2哈希算法原理及实现(附源码) M ...

  4. SHA512系列哈希算法原理及实现(附源码)

    相关文章: SHA512系列哈希算法原理及实现(附源码) SHA224和SHA256哈希算法原理及实现(附源码) 国密SM3哈希算法原理及实现(附源码) SHA1哈希算法原理及实现(附源码) MD5哈 ...

  5. 人工智能 - A*算法解决迷宫问题 附源码和可视化显示

    写在最前,先附上可视化后的效果: 一.问题描述 迷宫问题可以表述为:一个二维的网格,0 表示点可走,1 表示点 不可以走,点用(x,y)表示,寻找从某一个给定的起始单元格出发, 经由行相邻或列相邻的单 ...

  6. b站学python_Python爬虫学习教程 bilibili网站视频爬取!【附源码】

    python爬虫学习教程,万物皆可爬!每个技术大牛都是从基础慢慢的提升上去的,基础知识越深以后的发展越牛!学好python,才能玩转python,那到底怎么才能学好python? 通过爬取b站案例带领 ...

  7. 基于Vision Transformer的图像去雾算法研究与实现(附源码)

    基于Vision Transformer的图像去雾算法研究与实现 0. 服务器性能简单监控 \LOG_USE_CPU_MEMORY\文件夹下的use_memory.py文件可以实时输出CPU使用率以及 ...

  8. Python爬虫学习教程 bilibili网站视频爬取!【附源码】

    Python爬虫学习教程,万物皆可爬!每个技术大牛都是从基础慢慢的提升上去的,基础知识越深以后的发展越牛!学好python,才能玩转python,那到底怎么才能学好python? 通过爬取b站案例带领 ...

  9. ssm电商背景下精品茶网站的设计与实现毕业设计-附源码191732

    摘 要 近年来,随着移动互联网的快速发展,电商背景下精品茶网站越来越受到网民们的欢迎,电商背景下精品茶网站对国家经济的发展也起着越来越重要的作用.简单的流程.便捷可靠的支付方式.快捷畅通的物流快递.安 ...

  10. 基于SpringBoot的“1818小酒馆”商城网站的设计与实现 毕业设计-附源码192004

    目  录 摘要 1 1 绪论 1 1.1研究背景与意义 1 1.2开发现状 1 1.3系统开发技术的特色 1 1.4论文结构与章节安排 1 21818小酒馆商城分析 3 2.1 可行性分析 3 2.2 ...

最新文章

  1. python与excel结合-使用Excel和python来做回归分析
  2. python网络爬虫教程-如何入门 Python 爬虫?
  3. 【HDU6667】Roundgod and Milk Tea【贪心】
  4. SharePoint 2010新体验2 – Ribbon界面
  5. python爬取百度文库_利用Python语言轻松爬取数据
  6. QR code 二维码基础入门教程(三)
  7. 爬取100页京东商品评论
  8. Initializer Lists
  9. angularJs service
  10. Head First设计模式之命令模式
  11. 白话算法:时间复杂度和大O表示法
  12. 51单片机的矩阵键盘、跑马灯和呼吸灯设计
  13. mysql手册07_存储引擎
  14. 【JAVA】数据结构——二叉树的学习
  15. linux添加变色龙引导,u盘启动盘制作win7变色龙引导工具
  16. 微信添加好友、加群的限制
  17. pip 添加trusted host 一劳永逸
  18. 俄罗斯方块的设计思路
  19. php java 单点登录_用cas来实现php的单点登陆
  20. omap_i2c omap_i2c.2: controller timed out

热门文章

  1. openfeign配置代理服务器
  2. 西部素质教育杂志西部素质教育杂志社西部素质教育编辑部2022年第13期目录
  3. ESP32使用MLX90614红外测温传感器
  4. NVIDIA Studio和Game Ready区别
  5. vue实现echarts中的map自定义地图背景色
  6. 弘辽科技:刷单越来越不行了吗?
  7. python——月供计算器
  8. 应届生产品助理/经理面试,应当多谈点什么?
  9. android .dex文件,对于Android DEX文件详细说明
  10. 什么是cc攻击以及个人网站遭到cc攻击的解决方法