Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.05.2009, 00:19   #1
sasha14486
Пользователь
 
Регистрация: 11.05.2009
Сообщений: 23
По умолчанию Расчёт рейтинга ELO

Помогите пожалуйста сделать вот такой рейтинг Ело как на етом сайте http://fifaleague.ru/addvs/

Порылся в инети нашол написаный скрипт ну он не полностью работает.

PHP код:
// $pl_1  id первого игрока, $pl_2 id второго  ,
// $score_home   счёт первого игрока,   $score_away счёт второго   ,  $koef = 20
function addRating($pl_1 $pl_2 $score_home $score_away $koef)
{
    global 
$db;
     
    
$rh $db->query("SELECT skill FROM ae_users WHERE id=".$pl_1);  //  тут получаю старый рейтинг для первого игрока
    
$ra $db->query("SELECT skill FROM ae_users WHERE id=".$pl_2); //  тут получаю старый рейтинг для второго игрока
    
$Ro_pl_1 $rh['skill'];
    
$Ro_pl_2 $ra['skill'];
    if(
$Ro_pl_1 >= $Ro_pl_2) { $difference $Ro_pl_1 $Ro_pl_2; } else { $difference $Ro_pl_2 $Ro_pl_1;  }  // высчитываю разницу в рейтинге

    
if($score_home $score_away)  //  если выиграл первый игрок
    
{
        
$g $score_home $score_away//  разница в забитых мячах
        
if($g <= 1) { $G '1'; }    if($g == 2) { $G '1.5'; } if($g == 3) { $G '1.6'; } if($g 3) { $G = (11+$g)/8; }
        
$We =  1/(pow(10, -$difference/400)+1);   //  тут сама формула
        
$do_pl_1 $koef*$G*($We); $do_pl_1 round($do_pl_1);
        
$do_pl_2 $koef*$G*(- (1-$We)); $do_pl_2 round($do_pl_2);
         
        
// вот новый рейтинг для игрока $do_pl_1  WHERE id=".$pl_1);
        // новый рейтинг для игрока 2  $do_pl_2  WHERE id=".$pl_2);
    
}
     
             
//  ниже тоже самое, но уже если выиграл игрок 2   может это лишнее, я запутался .

    
if($score_home $score_away)
    {
        
$g $score_away $score_home;
        if(
$g <= 1) { $G '1'; }    if($g == 2) { $G '1.5'; } if($g == 3) { $G '1.6'; } if($g 3) { $G = (11+$g)/8; }
        
$We =  1/(pow(10, -$difference/400)+1); 
        
$do_pl_1 $koef*$G*(- (1-$We)); $do_pl_1 round($do_pl_1);
        
$do_pl_2 $koef*$G*($We); $do_pl_2 round($do_pl_2);
         
        
$db->update("UPDATE ae_users SET skill=(skill+$do_pl_1)  WHERE id=".$pl_1);
        
$db->update("UPDATE ae_users SET skill=(skill+$do_pl_2)  WHERE id=".$pl_2);
         
         
    }
     
    if(
$score_home == $score_away)
    {
        
$g $score_away $score_home;
        if(
$g <= 1) { $G '1'; }    if($g == 2) { $G '1.5'; } if($g == 3) { $G '1.6'; } if($g 3) { $G = (11+$g)/8; }
        
$We =  1/(pow(10, -$difference/400)+1); 
        
$do_pl_1 $koef*$G*(0.5 $We); $do_pl_1 round($do_pl_1);
        
$do_pl_2 $koef*$G*(0.5 - (1-$We)); $do_pl_2 round($do_pl_2);
         
     
        
$db->update("UPDATE ae_users SET skill=(skill+$do_pl_1)  WHERE id=".$pl_1);
        
$db->update("UPDATE ae_users SET skill=(skill+$do_pl_2)  WHERE id=".$pl_2);
         
    }


Вообщем при каких то случаях это всё работает правильно, но если выигрывает игрок с малым рейтингом у игрока с большим, то всё равно ему дают мало, это неправильно.

Сама формула и суть рейтинга написано вот http://ru.wikipedia.org/wiki/Рейтинг_Эло
и вот http://www.eloratings.net/system.html
Помогите пожалуйста сделать вот такой рейтинг.Если не сложно напишите обьяснения еще.Спасибо всем кто поможет.Спасибо всегда скажу. :ay:
sasha14486 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Повышение рейтинга пользователя? spamer О форуме и сайтах клуба 5 13.03.2009 20:35
Задача - расчёт нагрузки по преподавателям с контролем Рада Фриланс 1 13.02.2009 02:16
Бесплатный серверный движок или PHP скрипт рейтинга сайтов Alar PHP 10 24.01.2009 23:05
Рассчет рейтинга с помощью Excel 2007 Python Microsoft Office Excel 11 19.06.2008 19:26