Расчёт рейтинга ELO

Snoopik
На сайте с 20.02.2009
Offline
29
954

не могу победить эту формулу, может поможет кто.

сама формула тут http://ru.wikipedia.org/wiki/Футбольный_рейтинг_Эло

и ещё тут http://www.eloratings.net/system.html


// $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*(1 - $We); $do_pl_1 = round($do_pl_1);
$do_pl_2 = $koef*$G*(0 - (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*(0 - (1-$We)); $do_pl_1 = round($do_pl_1);
$do_pl_2 = $koef*$G*(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);


}

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

}

}

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

public class SearchEngines
[Удален]
#1

вы видимо привыкли говнокодить .... форматируйте код и будете меньше вопросов задавать

Snoopik
На сайте с 20.02.2009
Offline
29
#2
bearman:
вы видимо привыкли говнокодить .... форматируйте код и будете меньше вопросов задавать

Вы мне никто и я вам никто, так-что придержите свой язык.

[Удален]
#3
Snoopik:
Вы мне никто и я вам никто, так-что придержите свой язык.

я бы вам того же посоветовал.

Snoopik
На сайте с 20.02.2009
Offline
29
#4
bearman:
я бы вам того же посоветовал.

😂 Вы смешной.

[Удален]
#5
Snoopik:
😂 Вы смешной.

да смешной, но правда часто трагисмешной. а говнокод я ненавижу

bearman добавил 18.06.2009 в 13:16

и это уже не смешно

Snoopik
На сайте с 20.02.2009
Offline
29
#6
bearman:
да смешной, но правда часто трагисмешной. а говнокод я ненавижу

bearman добавил 18.06.2009 в 13:16
и это уже не смешно

Ха-ха.

Серьезный мужчина.

Опасный..ха-ха.

Люди в чёрном.

ах-ха

[Удален]
#7
Snoopik:
Ха-ха.
Серьезный мужчина.
Опасный..ха-ха.
Люди в чёрном.
ах-ха

foreach( INTERNET as $url ) if( $url == "forum.searchengines.ru" ) echo("Yes, you're right!"); 
ничего смешного, у вас даже тут ошибка ;)
Snoopik
На сайте с 20.02.2009
Offline
29
#8
bearman:
foreach( INTERNET as $url ) if( $url == "forum.searchengines.ru" ) echo("Yes, you're right!"); 
ничего смешного, у вас даже тут ошибка ;)

я подпись взял.) и просто адресс сайта сменил. не вглядывался.);)

[Удален]
#9
Snoopik:
я подпись взял.) и просто адресс сайта сменил. не вглядывался.);)

россия уже не та ....

Snoopik
На сайте с 20.02.2009
Offline
29
#10
bearman:
россия уже не та ....

Ну да, а Вы что думали в 70-80 попали?)

Ладно, хватит флудить.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий