【问题标题】:PHP Facemash ELO Rating Class/FunctionPHP Facemash ELO 评级类/功能
【发布时间】:2011-08-02 09:30:27
【问题描述】:

我从 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;
    }
} 
?>

我正在尝试将此应用到我的食品评级网站。

这是我的理解

  1. 要开始使用该系统,我们需要为所有菜肴分配一个基本分数。
  2. 我们有 4 个变量 S1、S2、R1、R2(S= 分数,R = 排名)
  3. 如果我按第一道菜在两道菜之间评分。 S1 和 S2 会是什么?会是 1-0 吗?
  4. 如果我在 10k 战斗后添加另一个菜怎么办?因为我会为它分配一个基本分数会更好吗?
  5. 如何让一道菜的分数不低于 0。

这是相同的 PHP 实现。你能帮我理解这 4 个变量以及我应该如何使用它吗?

【问题讨论】:

标签: php algorithm rating rating-system


【解决方案1】:

在 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);

【讨论】:

    【解决方案2】:

    1.S1 应该是您要比较的第一道菜的当前分数,而 S2 应该是您要比较的第二道菜的当前分数

    2.R1是当前菜品的排名,R2是第二道菜的当前排名

    2.如果不公平,该系统将不会用于全球游戏

    3.你可能会使用数据库来保存分数,所以假设它应该是这样的

    if($elo_calcualtor->rating(1,2,1,2)['p1'] < 0){$current_dish_score = 0;}
    

    终于 你应该让评分从十开始,所以它不会低于 0 并且很可能不会高于 20

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 2014-11-20
      • 1970-01-01
      • 1970-01-01
      • 2020-03-31
      • 2014-07-19
      • 2021-04-03
      • 1970-01-01
      • 2019-03-08
      • 1970-01-01
      相关资源
      最近更新 更多