积分系统的思考

无处不在的积分系统

积分系统非常的常见,比如:

  1. 基于1对1的对战打分:如围棋的对战评分,AlphaGo如何通过几场大战,排名世界第一,这个名次到底应该如何排?
  2. 基于group的对战打分:如codeforces中一场比赛,该场次排名为第x位,那么总积分应该是多少?

1V1,积分分值和概率转换

假如有A和B进行对战,A的积分为x,B的积分为y, 积分越高能力越强,能力越强赢得概率越大(不是绝对的赢或者输,否则就没有比赛的必要了),那么如何衡量A赢B的概率呢?

  1. x=y: A和B的能力相等,赢的概率各50%
  2. x>y: A比B强,赢得概率比B大;x<y则相反

那么如何将x和y和概率值对接起来?

观察一下, x=y -> 0.5, 而且x和y比较才有意义,那么我们就取x-y,可以很容易想到sigmoid function,如下:
p(A赢B) = sigmoid(k(x-y)), 其中k是参数,用于调节sigmoid function的形状。
其中, sigmoid(x) = 1/(1+e^x)

1V1,获胜概率和分值更新

如果A获胜,B失败,那么A的分值必定增加,B的分值必定减少。

x-y越大,A增加的越少,B减少的越小;

x-y越小,A增加的越大,B减少的越大。

参考Elo rating system,保持群体总分值不变(除非有个体加入),那么A的增加的分值,必定等于B的减少的分值。

x_new = x_old + K * (1 - p)

y_new = y_old + K * (0 - (1-p))

K表示步长,1表示获胜,p表示A赢B的概率,该公式将预估值往真实值移动。

Group,Group Ranking和Total Ranking

– 待思考补充

冷启动

各自设置启动分值即可,比如codeforces上的1500分

不好的积分系统

王者荣耀的积分系统,是不好的。

积分分为几种:青铜,白银,黄金,铂金,钻石,王者。

这几种大的段位,每个段位里有N个小段位,满五颗星星晋级一段位,赢一场积攒1颗星。

但是王者有“经验机制”,即打满x盘之后,积累的经验,也可以获得一颗星。

所以其群体总积分是不断变大的,因此理论上,只要打的足够多,每个人都可以成为王者。

因此引入了赛季机制,新的赛季默认降低1-2个段位,即是在补“经验机制”的坑。

因此每到新赛季,连低端段位都很难打。

我猜测项目组这么做的意义在于,鼓励多打,多打游戏,技术一般也可以上王者。

参考资料

http://codeforces.com/blog/entry/102

https://en.wikipedia.org/wiki/Elo_rating_system