常用游戏算法:ELO 积分算法

发布于 2022-09-18 16:12:24 字数 1555 浏览 271 评论 0

ELO 积分算法是用来计算玩家的相对技术等级,通常用于博弈类游戏,比如国际象棋,围棋。

Elo,并不是一个缩写,而是系统发明者的姓。

它本来是个改良的国际象棋积分系统,现在被广泛用于很多类比赛的选手分级。比如 帝国时代3,星际,魔兽争霸3,魔兽世界,剑侠情缘,dota,LOL 等等。

Elo 假设每个玩家在每盘游戏中的表现是一个正态分布的随机变量,尽管选手在不同的游戏中发挥可能差异很大,但每位选手在一段时间内表现的平均值变化很 小。Elo 用随机变量的平均值来代表选手的真正水平。

简单的说:每个选手在每盘游戏中的发挥都是不稳定的,80 的实力可能发挥出 85,或者发挥出 75, 但是随着比赛的不断进行,可以越来越多的趋近 80 这个真实水准。而 ELO 是用这个平均值来作为真实水准。


数学公式

Ra: A选手当前分数
Rb: B选手当前分数

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

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

E值也是预估的双方胜率,所以 Ea + Eb = 1

Sa: 实际胜负值,胜 = 1, 平 = 0.5, 负 = 0
K: 每场比赛能得到的最大分数,魔兽里 k=32 

R'a: A选手一场比赛之后的积分
R'a = Ra + K(Sa-Ea)

R'b: B选手一场比赛之后的积分
R'b = Rb + K(Sa-Eb)

举例讲解

A队1500分,B队1600分,则
预估A队的胜负值 Ea = 1/(1+10^[(1600-1500)/400]) = 0.36
预估B队的胜负值 Eb = 1/(1+10^[(1500-1600)/400]) = 0.64

假设A队赢了,
A队最终得分为 R'a = 1500 + 32*(1-0.36) = 1500+20.5 = 1520, 赢20分,B队输20分。
假设B队赢了,
B队最终得分为 R'b = 1600 + 32*(1-0.64) = 1600 + 11.52 = 1612, 赢12分,A队输12分。

这就是为什么你赢高分队分数多,输给低分的输的也多,赢低分的分数很少。
其实K值就是这个方程的极限,所以理论上你最多可以赢一个队伍32分,实际上29-30已经差不多了,赢了不得分也是有可能的。

ELO 与一般的得分制相比,优势在于它考虑到了选手本身的实力差距。比如一个较强的选手战胜了一个较弱的选手,这种胜利应该是理所当然的,因而获得的分数 就会相对较少。而反之一个较弱的选手战胜了一个较强的选手,这种胜利不太常见,就会相应提高赢得的分数。这样相对而言更为公平。很多玩家觉得疑惑,为什么我杀人最多,加的分数却最少,因为在你的队伍中,你的分数应该是最高的,所以胜利的加分最少。

而随着比赛场数的增加,你的最终的积分将会稳定在一个值附近。假如你的实力水准是 1800,你战胜了 1700 的玩家几乎是得不到什么分数的,所以你没法通过大量战胜低等级的对手来提升分数。也就是说,天梯是没法不断刷分的。你可能偶尔运气好,战胜了 1850 以上的对手,但是如果你实力只有 1800,随着战 斗的进行,与 1850 分数段的战都终究会失败的场数更多,分数维持在 1800。所以为什么说积分战场最公平,因为分数可以代表选手的基本实力,而你只会与积分相近的对手进行战斗。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

0 文章
0 评论
84961 人气
更多

推荐作者

马化腾

文章 0 评论 0

thousandcents

文章 0 评论 0

辰『辰』

文章 0 评论 0

ailin001

文章 0 评论 0

冷情妓

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文