今天了解了一下游戏中的PVP模块的实现,大多数的游戏都使用到了ELO算法,刚开始的时候并不清楚这个算法是做什么的,对此开始大量查找有关于ELO算法的资源,功夫不负有心人,总算找到一些有用的资源了。
先来简单介绍一下埃洛等级分系统,根据百度百科是这样描述的:

埃洛等级分系统是指由[匈牙利](http://baike.baidu.com/view/6397.htm)裔美国物理学家**阿帕德·埃洛**创建的一个衡量各类对弈活动水平的评价方法,是当今对弈水平评估的公认的权威方法。被广泛用于国际象棋、围棋、足球、篮球等运动。

该系统基于统计学的一个评估棋手水平的方法。美国国际象棋协会在1960年首先使用这种计分方法。由于它比先前的方法更公平客观,这种方法很快流行开来。1970年国际棋联正式开始使用这个系统。
系统模型原先采用正态分布。但是实践显明棋手的表现并非呈正态分布,所以改进后的埃洛排名系统通常使用的是逻辑斯谛分布


其实在此之前有看过一部电影<社交网络>中也有提及到这个公式,电影中里的Mark Zackburg被女朋友甩后,在舍友的启发下,充分发挥了技术宅男自娱自乐的恶搞天分,做出了Facemash网站,对学校女生的相貌进行排名打分,结果网站访问流量过大,直接把学校网络搞瘫痪了。Facemask大受欢迎的关键就在于Zackburg基友Eduardo写在窗户上的排名公式,看电影之时就对这个排名公式非常感兴趣,上网了解下,才发现这条公式就是大名鼎鼎的ELO等级分制度ELO的应用非常广泛,大部分棋类比赛,现在流行的MODB游戏,像11平台的DOTA天梯系统,都是采用ELO等级分。

 
facemash.png
 
c4c7311488fe318a.jpg

ELO Rating System 是当今对弈水平评估的公认权威规则,已被广泛应于国际象棋、围棋、足球和篮球等体育运动以及游戏中。例如星际争霸天梯排行,魔兽世界竞技场,Dota天梯系统,LOL匹配等游戏的竞技比赛系统中。ELO是一套较为完善的评分规则和机制,比较适合对竞技类游戏的选手的技术等级进行评估,用以计量个体在对决类比赛中相对技能的算法系统,对于游戏而言,需要让每场游戏尽可能的接近公平,创造双方势均力敌的竞赛环境。它最初由美国物理学教授 Arpad Elo 创立,故命名为埃罗排名。


一、ELO Rating System模型思路
1.假设每个玩家每盘游戏中的表现是一个正态分布的随机变量,尽管选手在不同的游戏中发挥可能差异很大,但每位选手在一段时间内表现的平均值变化很小,ELO系统用随机变量的平均值来代表选手的真正水平。
2.ELO系统用胜平负来评价选手在某一场游戏中的表现,赢就代表这场发挥比对手好,反之就是不好,因此会用赢加分,输扣分,平不得分来进行评分。

二、积分计算公式
Ra:A玩家当前的Rating
Rb:B玩家当前的Rating
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

 
 
 
 

R’a=Ra+K(Sa-Ea)
R’a:A玩家进行了一场比赛之后的Rating

 
 

K:K值是一个极限值,代表理论上最多可以赢一个玩家的得分和失分,K/2就是相同rating的玩家其中一方胜利后所得的分数。
国际象棋大师赛中,K=16;在大部分的游戏规则中,K=32。通常水平越高的比赛中其K值越小,这样做是为了避免少数的几场比赛就能改变高端顶尖玩家的排名。

三、实例说明
若当前A玩家rating为1500,B玩家rating为1600
预估A玩家的胜负值Ea = 1/(1+10^[(1600-1500)/400])≈0.36
预估B玩家的胜负值Eb = 1-Ea = 1-0.36 = 0.64

假设A玩家获胜,实际胜负值为Sa = 1
A玩家最终得分为 R'a = 1500 + 32*(1-0.36) = 1500+20.5 = 1520,A玩家赢20分,B玩家输20分。

假设B玩家获胜,实际胜负值为Sa = 1
B队最终得分为 R'b = 1600 + 32*(1-0.64) = 1600 + 11.52 = 1612,B玩家赢12分,A玩家输12分。
PS:^符号代表次方运算。

四、天梯系统目的
1.保护新手不被有经验的玩家虐,让高手局中没有新手。
2.创造竞技和公平的游戏对局,使玩家的游戏乐趣最大化。
3.无需等待太久就能找到对手进入游戏。

五、具体实例
11对战平台的天梯实例。
下面的公式很好的说明了天梯积分的计算方法,而Si的计算则是取的ELO算法,虽然11的天梯还是存在Bug,但是不得不承认确实是很棒的设计。

 
 

从天梯积分曲线图可以看出,虽然曲线有波动,但是基本上能够代表这一段时间,玩家的技术水平区间,进而匹配战力接近的玩家,让玩家享受竞技的乐趣,而不是一味的虐菜,最后独孤求败进而流失。

 
 

(PS:文自http://blog.csdn.net/sr0ad/article/details/7975370

下面列出有关于ELO有关资料:
电影社交网络中facemash女生评比算法java实现
电影社交网络中facemash女生评比算法讲解
《社交网络》中Facemash算法分析
《社交网络》里的评分公式——ELO排名系统
ELO等级分计算公式详解
Logistic_distribution
天梯匹配规则ELO
ELO匹配系统实际应用
EloRatingTools-GitHub-C#
ELO-Rating-System

elo system的更多相关文章

  1. 从Elo Rating System谈到层次分析法

    1. Elo Rating System Elo Rating System对于很多人来说比较陌生,根据wikipedia上的解释:Elo评分系统是一种用于计算对抗比赛(例如象棋对弈)中对手双方技能水 ...

  2. Elo rating system 模拟

    package org.cc.foo_008; import java.util.ArrayList; import java.util.List; import java.util.Random; ...

  3. Elo rating system(Elo 打分体系)

    A.B 两个待比较.评价的对象,分别打分为 RA,RB,则各自获胜的期望值为: ⎧⎩⎨⎪⎪⎪⎪⎪⎪EA=11+10(RB−RA)/400.EB=11+10(RA−RB)/400. 不妨令 QA=10R ...

  4. Linux File System

    目录 . Linux文件系统简介 . 通用文件模型 . VFS相关数据结构 . 处理VFS对象 . 标准函数 1. Linux文件系统简介 Linux系统由数以万计的文件组成,其数据存储在硬盘或者其他 ...

  5. .Net多线程编程—System.Threading.Tasks.Parallel

    System.Threading.Tasks.Parallel类提供了Parallel.Invoke,Parallel.For,Parallel.ForEach这三个静态方法. 1 Parallel. ...

  6. .Net Core MVC 网站开发(Ninesky) 2.2、栏目管理功能-System区域添加

    在asp或asp.net中为了方便网站的结构清晰,通常把具有类似功能的页面放到一个文件夹中,用户管理功能都放在Admin文件夹下,用户功能都放在Member文件夹下,在MVC中,通常使用区域(Area ...

  7. .Net Core上用于代替System.Drawing的类库

    目前.Net Core上没有System.Drawing这个类库,想要在.Net Core上处理图片得另辟蹊径. 微软给出了将来取代System.Drawing的方案,偏向于使用一个单独的服务端进行各 ...

  8. System.Guid ToString五中格式

    参考:https://msdn.microsoft.com/en-us/library/97af8hh4.aspx 测试代码: using System; using System.Collectio ...

  9. System进程(pid=4)占用80端口的解决方案

    问题 Mail服务器在安装TFS服务(含SQLServer2016)后启动不了网页服务. 排查问题 使用命令查看端口占用情况 netstat -nao | find ":80" n ...

随机推荐

  1. 微信小程序扫码解析小程序码

    通过微信扫小程序码,跳转到应用小程序内, 如何解析小程序码的参数呢? 一般小程序码会跳转到设置的页面,如首页, 可以直接跳转到小程序首页,然后解析小程序携带的参数,再打开某个页面. (小程序码的路径要 ...

  2. 《Windows程序设计(第5版 珍藏版)》配书光盘

    https://pan.baidu.com/s/1ro72qQja_xTbf-Ik8b06Ng

  3. Datawhale学数据分析第一章

    需要用到的基础知识pandas基础知识参考1,2章https://github.com/datawhalechina/joyful-pandas 1.导入数据tsv 制表符作为分隔符的字段符csv 逗 ...

  4. Jmeter 常用函数(21)- 详解 __char

    如果你想查看更多 Jmeter 常用函数可以在这篇文章找找哦 https://www.cnblogs.com/poloyy/p/13291704.htm 作用 根据给定的字符值转换成 Unicode ...

  5. 测量定位实践-:C#采集控制

    用Halcon已经完成采集,在在C#中不行. 其实还是比较简单,主要是Halcon封装的太好了. 主要是以下几个算子: *打开 Image Acquisitionopen_framegrabber ( ...

  6. Ceph Luminous手动解决pg分布不均衡问题

    原文链接: https://www.jianshu.com/p/afb6277dbfd6 1.设置集群仅支持 Luminous(或者L之后的)客户端 具体命令: ceph osd set-requir ...

  7. ceph 快照,克隆

    转载 https://my.oschina.net/wangzilong/blog/1595081 ceph 快照,克隆 ceph是一个非常好的后端存储系统.其中包括最常用的块存储,对象存储,文件系统 ...

  8. Linux环境下如何生成core文件

    Linux环境下进程发生异常而挂掉,通常很难查找原因,但是一般Linux内核给我们提供的核心文件,记录了进程在崩溃时候的信息.但是生成core文件需要设置开关,具体步骤如下: 1.查看生成core文件 ...

  9. 算法-搜索(6)B树

    B树是平衡的m路搜索树. 根结点至少两个子女,根结点以外的非失败结点至少⌈m/2⌉个子女,所有失败结点都在h+1层. 第h层至少2⌈m/2⌉h-1个结点,因此失败结点数n+1≥2⌈m/2⌉h-1个. ...

  10. Windows servers 2008 环境下,CA证书服务器搭建。

    CA证书这个东西好像是很久之前的东西了,现在已经不大用了,不过还是作为一种服务,搭建一下. 环境:Windows servers 2008 (虚拟机环境) 1.配置IP地址. 2.添加角色. 选择Ac ...