2012-05-10 40 views
0

我試圖實現ELO公式像ESL門戶網站都有。 (http://cheater.esl.eu/uk/faq/rankmodules/ESL的Elo公式(不對勁)

第一個例子對應於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

預期的計算點數(變量$ E)對於兩個玩家來說都不相同。所以,你應該有$ E1和E2 $。

$E1 = 1/(1+ Pow(10, -($k1-$k2)/400)); 

$E2 = 1/(1+ Pow(10, -($k2-$k1)/400));