我正在尝试像ESL门户网站那样实现ELO公式。 (http://cheater.esl.eu/uk/faq/rankmodules/)
第一个例子对应于ESL的例子,但第二个和第三个例子给出了疯狂的结果。哪里我错了?
function eloEsl($k1, $k2, $g1, $g2)
{
$per1 = $g1 / ($g1 + $g2);
$per2 = $g2 / ($g1 + $g2);
$E = 1/(1+ Pow(10, -($k1-$k2)/400));
$Pts1 = $k1 + 50 * ( $per1 - $E );
$Pts2 = $k2 + 50 * ( $per2 - $E );
$Pts1 = round($Pts1);
$Pts2 = round($Pts2);
return array($Pts1, $Pts2);
}
// first test is similar to ESL example
eloEsl(1000, 1000, 3, 6); // returns -8 / + 8
// This make crazy result !
eloEsl(1000, 1200, 5, 1); // returns +30 / -4
// and reverse
eloEsl(1000, 1200, 1, 5); // returns -4 / +30
答案 0 :(得分:0)
两个玩家的预期计算点数(变量$ E)并不相同。所以你应该有$ E1和$ E2。
$E1 = 1/(1+ Pow(10, -($k1-$k2)/400));
$E2 = 1/(1+ Pow(10, -($k2-$k1)/400));