PHP Facemash ELO Рейтинг Класс / Функция - PullRequest
6 голосов
/ 10 апреля 2011

Я получил следующий класс ELO с веб-сайта PHPClasses.

<?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 = rank)
  3. При оценке между двумя блюдами, если я нажимаю первое блюдо.какие будут S1 и S2?это будет 1: 0?
  4. Что если я добавлю еще одно блюдо после 10 000 битв?так как я буду назначать для него базовую оценку, будет ли это лучше?
  5. Как я могу остановить оценку Блюда, чтобы она не опустилась ниже 0.

Вот реализация PHP натот же самый.Можете ли вы помочь мне понять 4 переменные и как мне их использовать?

Ответы [ 2 ]

5 голосов
/ 12 февраля 2012

здесь на GitHub - лучший php класс для системы рейтинга ELO, которую я когда-либо обнаруживал: 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);
1 голос
/ 20 мая 2011

1.S1 должен быть текущий счет первого блюда и S2 для второго блюда, которое вы сравниваете с

2.R1 - ранг текущего блюда, а R2 - текущий ранг второго блюда

2.Если это не справедливо, эта система не будет использоваться в глобальных играх

3.Вы, вероятно, собираетесь использовать базу данных для сохранения результатов, поэтому предположим, что так должно быть

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

наконец рейтинг должен начинаться с десяти, чтобы он не опускался ниже 0 и, скорее всего, не опускался выше 20

надеюсь, это поможет

...