diff --git a/ELO_function_progress.php b/ELO_function_progress.php deleted file mode 100644 index 90ff28f6a5c9ea22c54dfa8b694f461af146e802..0000000000000000000000000000000000000000 --- a/ELO_function_progress.php +++ /dev/null @@ -1,138 +0,0 @@ -<?php -/** - * Created by PhpStorm. - * User: phoenix - * Date: 01/04/16 - * Time: 18:32 - * - */ - -/** - * Fonction qui calcule les différentiels de scores obtenus après une partie d'un jeu à deux joueurs - * où l'on peut perdre (0) ou gagner (1). - * @param int $SA : score actuel du premier joueur - * @param int $RA : score (valant 0 ou 1) du premier joueur - * @param int $SB : score actuel du second joueur - * @param int $RB : score (valant 0 ou 1) du second joueur - * @param int $K : la quantité max de points gagnable ou perdable sur une partie - * @param int $nmax : le nombre de parties pour considérer "qu'un joueur est aguerri". Vaut 20 par défaut. - * @param int $nA : le nombre de parties effectués par le premier joueur sur le jeu. - * @param int $nB : le nombre de parties effectués par le second joueur sur le jeu. - * @return array : le différentiel de score du premier joueur et du second joueur - */ -srand(); - -function ELO_duel($SA, $RA, $SB, $RB, $K, $nmax=20, $nA=20, $nB=20) -{ - if ($nA > $nmax) - $nA = $nmax; - if ($nB > $nmax) - $nB = $nmax; - - $EA = 1/(1+10**(($SB-$SA)/400)); - $EB = 1/(1+10**(($SA-$SB)/400)); - $newRA = ($K*$nB)/$nmax * ($RA-$EA); - $newRB = ($K*$nA)/$nmax * ($RB-$EB); - - if ($newRA>0) - $newRA = floor($newRA); - else - $newRA = ceil($newRA); - - if ($newRB>0) - $newRB = floor($newRB); - else - $newRB = ceil($newRB); - - return array($newRA, $newRB); -} - -/** - * Fonction qui calcule les différentiels de scores obtenus après une partie à count($S) joueurs - * en considérant que $R correspond au classement des joueurs dans ce jeu (du type array(1,3,4,2) pour - * le premier joueur est 1er, le second est 2e, etc). - * On suppose qu'il y a correpondance entre les indices de $S et les indices de $R. - * @param array $S : scores actuels des joueurs - * @param array $R : classement des joueurs - * @param int $nmax : le nombre de parties pour considérer "qu'un joueur est aguerri". Vaut 20 par défaut. - * @param array $n : nombre de parties de chaque joueurs - * @param int $K : la quantité max de points gagnable ou perdable sur une partie - * @return array : le différentiel de score de chaque joueur - * @throws DomainException - */ -function ELO_classement($S, $R, $n, $K, $nmax=20) -{ - - $m = count($S); - if (count($R) != $m) - throw new DomainException; - - $count = array_fill(0, $m, 0); - $res = array_fill(0, $m, 0); - for ($i = 0; $i<$m; $i++) - { - for($j=$i+1; $j<$m; $j++) - { - if ($R[$i]<$R[$j]) - $newSAB = ELO_duel($S[$i], 1, $S[$j], 0, $K, $nmax, $n[$i], $n[$j]); - else - $newSAB = ELO_duel($S[$i], 0, $S[$j], 1, $K, $nmax, $n[$i], $n[$j]); - $res[$i] = 1/($count[$i] + 1) * ($count[$i] * $res[$i] + $newSAB[0]); - $count[$i]++; - $res[$j] = 1/($count[$j] + 1) * ($count[$j] * $res[$j] + $newSAB[1]); - $count[$j]++; - } - } - for ($i = 0; $i<$m; $i++) - { - if ($res[$i]>0) - $res[$i] = floor($res[$i]); - else - $res[$i] = ceil($res[$i]); - - } - return $res; -} - - -function random_classement($n) -{ - $r = array(); - for ($j=0; $j<$n; $j++) - { - array_push($r, $j+1); - } - shuffle($r); - return $r; -} - -/* Test */ - -print("<html><body><table><th>Itération</th><th>Joueur 1</th><th>Joueur 2</th><th>Joueur 3</th><th>Joueur 4</th><th>Joueur 5</th><th>Somme</th></tr>"); -$DS = array(1000,1000,1000,1000,1000); -$n = array(0,0,0,0,0); - -print("<tr><td>0</td>"); -foreach ($DS as $value) { - print("<td>$value</td>"); -} -$p = array_sum($DS); -print("<td>$p</td></tr>"); - -for($j=1;$j<100;$j++){ - $sa = random_classement(5); - $res = ELO_classement($DS, $sa, $n, 32); - print("<tr><td>$j</td>"); - - for ($i=0;$i<count($DS);$i++) { - $DS[$i] = $DS[$i] + $res[$i]; - $k1 = $DS[$i]; - $k2 = $res[$i]; - $k3 = $sa[$i]; - $n[$i]++; - print("<td>$k1 ($k2) ($k3)</td>"); - } - $p = array_sum($DS); - print("<td>$p</td></tr>"); -} -print("</table></body></html>");