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

fanom

Новичок
Расчёт рейтинга ELO

не могу победить эту формулу, может поможет кто.
сама формула тут http://ru.wikipedia.org/wiki/Футбольный_рейтинг_Эло
и ещё тут http://www.eloratings.net/system.html

Что смог сделать
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*(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);
		
	}

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