8

PHPClasses Web サイトから次の 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. 最初の料理を押すと、2 つの料理の間で評価するとき。S1とS2は何になりますか?それは1-0になりますか?
  4. 10,000 戦後に別の料理を追加するとどうなりますか? 私はそれに基本スコアを割り当てるので、それはより良いですか?
  5. ディッシュのスコアが 0 を下回らないようにするにはどうすればよいですか。

これが同じPHP実装です。4 つの変数と、それをどのように使用すればよいかを理解するのを手伝ってもらえますか?

4

2 に答える 2

6

ここ 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);
于 2012-02-12T13:50:51.220 に答える
1

1.S1 は最初の料理の現在のスコア、S2 は比較対象の 2 番目の料理の現在のスコアである必要があります。

2.R1 は現在の料理のランク、R2 は 2 番目の料理の現在のランクです。

2.公平でなければ、このシステムはグローバルゲームで使用されないでしょう

3.おそらくデータベースを使用してスコアを保存するので、次のようにする必要があります

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

最後に、評価を 10 から開始して、0 を下回ったり、20 を超えたりしないようにする必要があります。

お役に立てれば

于 2011-05-20T15:34:26.513 に答える