我从PHPClasses网站获得了以下ELO类。

<?php
class elo_calculator {
    public function rating($S1, $S2, $R1, $R2) {
        if(empty($S1) or empty($S2) or empty($R1) or empty($R2))
            return null;
        if($S1 != $S2) {
            if($S1 > $S2) {
                $E = 120 - round(1 / (1 + pow(10, (($R2 - $R1) / 400))) * 120);
                $R['R3'] = $R1 + $E;
                $R['R4'] = $R2 - $E;
            } else {
                $E = 120 - round(1 / (1 + pow(10, (($R1 - $R2) / 400))) * 120);
                $R['R3'] = $R1 - $E;
                $R['R4'] = $R2 + $E;
            }
        } else {
            if($R1 == $R2) {
                $R['R3'] = $R1;
                $R['R4'] = $R2;
            } else {
                if($R1 > $R2) {
                    $E = (120 - round(1 / (1 + pow(10, (($R1 - $R2) / 400))) * 120)) - (120 - round(1 / (1 + pow(10, (($R2 - $R1) / 400))) * 120));
                    $R['R3'] = $R1 - $E;
                    $R['R4'] = $R2 + $E;
                } else {
                    $E = (120 - round(1 / (1 + pow(10, (($R2 - $R1) / 400))) * 120)) - (120 - round(1 / (1 + pow(10, (($R1 - $R2) / 400))) * 120));
                    $R['R3'] = $R1 + $E;
                    $R['R4'] = $R2 - $E;
                }
            }
        }
        $R['S1'] = $S1;
        $R['S2'] = $S2;
        $R['R1'] = $R1;
        $R['R2'] = $R2;
        $R['P1'] = ((($R['R3'] - $R['R1']) > 0)?"+" . ($R['R3'] - $R['R1']) : ($R['R3'] - $R['R1']));
        $R['P2'] = ((($R['R4'] - $R['R2']) > 0)?"+" . ($R['R4'] - $R['R2']) : ($R['R4'] - $R['R2']));
        return $R;
    }
}
?>

我正在尝试将其应用于我的食品评估网站。

这是我的理解
  • 要从系统开始,我们需要为所有菜肴分配基本得分。
  • 我们有4个变量S1,S2,R1,R2(S =得分,R =等级)
  • 如果我按第一个菜,则在两个菜之间进行评分时。 S1和S2是什么?会是1-0吗?
  • 如果我在10k战斗后再添加一道菜,该怎么办?因为我将为其分配基本分数,它会更好吗?
  • 我如何才能停止菜式的得分不低于0。

  • 这与PHP的实现相同。您能帮助我理解这四个变量吗,我应该如何使用它?

    最佳答案

    在GitHub上,这是我找到的ELO评级系统的最佳php类:https://github.com/Chovanec/elo-rating

    用法:

    // player A elo = 1000
    // player B elo = 2000
    // player A lost
    // player B win
    $raging = new Rating(1000, 2000, 0, 1);
    
    // player A elo = 1000
    // player B elo = 2000
    // player A draw
    // player B draw
    $raging = new Rating(1000, 2000, .5, .5);
    

    10-04 20:51