From 8e07578d7ccf48c49abb13878b33a9129b20530f Mon Sep 17 00:00:00 2001 From: Eliah REBSTOCK <eliah.rebstock@ensiie.fr> Date: Fri, 1 Apr 2016 19:00:12 +0000 Subject: [PATCH] fonction de classement ELO --- ELO_function.php | 66 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 ELO_function.php diff --git a/ELO_function.php b/ELO_function.php new file mode 100644 index 0000000..98cdbfa --- /dev/null +++ b/ELO_function.php @@ -0,0 +1,66 @@ +<?php +/** + * Created by PhpStorm. + * User: phoenix + * Date: 01/04/16 + * Time: 18:32 + * + */ + +/* @param $tab array + * @param $j int + * @requires $j >= 0 and $j < count($tab) + * @returns float + * Renvoie la moyenne du tableau en passant l'indice $j + */ + +function avg_skip($tab, $j) +{ + + $i = 0; + $s = 0; + while ($i < count($tab)) + { + if ($i != $j) + { + $s = $s + $tab[$i]; + } + $i++; + } + + return $s/(count($tab)-1); +} + + +/* @param $scores_actuel array + * @param $scores_obtenus array + * @param $K int (Coefficient multiplicatif propre au jeu, plus il est élevé, plus le résultat est fin) + * @param $D int (nombre de points pour qu'un joueur soit 10x plus fort qu'un autre) + * @return int + * + * @requires count($scores_actuel) == count($scores_obtenus) + * @requires $K >= 1 and $D > 1 + * + * Renvoie le nombre de points obtenus (ou perdus, dans ce cas c'est négatif) dans un tableau + * correspondant aux indices de $scores_obtenus. + * + */ +function ELO($scores_actuel, $scores_obtenus, $K, $D) +{ + + $newS = array(); + $c = max($scores_obtenus)-min($scores_obtenus); + $d = min($scores_obtenus); + $j = 0; + foreach ($scores_actuel as $A) + { + $m = avg_skip($scores_actuel, $j); + $EA = 1/(1+10^(($m-$A)/$D)); + $EA = $c * $EA - $d; + $newS[$j] = floor($K * ($scores_actuel[$j]-$EA)); + $j++; + } + + return $newS; + +} \ No newline at end of file -- GitLab