我的PHP实现,ELO里有两个值比较关键,初始得分和每次操作的基础分($k),要根据你的具体情况决定。
ELO的基本思想就是原来得分高的人赢了得分低的人,两个人的加分减分幅度都很小,原来得分低的人赢了得分高的人,加分减分幅度都很大。由于有基础分的概念,所以受比赛场次的映像较小
这个算法的参数ra-a的旧分数;rb-b的旧分数;sa-a是否胜利
function ELO($ra, $rb, $sa) {
$sb = 1 - $sa;
$k = 20;
$t = ($ra - $rb) / 400 ;
$pow = pow(10, $t);
$ea = 1 / (1 + $pow);
$t = ($rb - $ra) / 400 ;
$pow = pow(10, $t);
$eb = 1 / (1 + $pow);
$raNew = $ra + $k * ($sa - $ea);
$rbNew = $rb + $k * ($sb - $eb);
return array($raNew, $rbNew);
}