Skip to content
GitLab
Explorer
Connexion
Navigation principale
Rechercher ou aller à…
Projet
P
projet-web-2016
Gestion
Activité
Membres
Labels
Programmation
Tickets
Tableaux des tickets
Jalons
Wiki externe
Code
Requêtes de fusion
Dépôt
Branches
Validations
Étiquettes
Graphe du dépôt
Comparer les révisions
Compilation
Pipelines
Jobs
Planifications de pipeline
Artéfacts
Déploiement
Releases
Registre de modèles
Opération
Environnements
Surveillance
Incidents
Analyse
Données d'analyse des chaînes de valeur
Analyse des contributeurs
Données d'analyse CI/CD
Données d'analyse du dépôt
Expériences du modèle
Aide
Aide
Support
Documentation de GitLab
Comparer les forfaits GitLab
Forum de la communauté GitLab
Contribuer à GitLab
Donner votre avis
Raccourcis clavier
?
Extraits de code
Groupes
Projets
Afficher davantage de fils d'Ariane
Eliah REBSTOCK
projet-web-2016
Validations
d9a9c9b8
Valider
d9a9c9b8
rédigé
Il y a 9 ans
par
Eliah REBSTOCK
Parcourir les fichiers
Options
Téléchargements
Correctifs
Plain Diff
Fonction ELO_duel et ELO_classements plus propres et plus justes.
parent
f961805a
Aucune branche associée trouvée
Aucune étiquette associée trouvée
2 requêtes de fusion
!21
Merge de Dev dans Master
,
!2
Dev phoenix
Modifications
1
Afficher les modifications d'espaces
En ligne
Côte à côte
Affichage de
1 fichier modifié
ELO_function.php
+60
-49
60 ajouts, 49 suppressions
ELO_function.php
avec
60 ajouts
et
49 suppressions
ELO_function.php
+
60
−
49
Voir le fichier @
d9a9c9b8
...
...
@@ -7,66 +7,76 @@
*
*/
/* @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
/**
* 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
avg_skip
(
$tab
,
$j
)
{
$s
=
0
;
$n
=
count
(
$tab
);
for
(
$i
=
0
;
$i
<
$n
;
$i
++
)
{
if
(
$i
!=
$j
)
function
ELO_duel
(
$SA
,
$RA
,
$SB
,
$RB
,
$K
,
$nmax
=
20
,
$nA
=
20
,
$nB
=
20
)
{
$s
=
$s
+
$tab
[
$i
];
}
}
if
(
$nA
>
$nmax
)
$nA
=
$nmax
;
if
(
$nB
>
$nmax
)
$nB
=
$nmax
;
return
$s
/
(
$n
-
1
);
}
$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
);
return
array
(
$newRA
,
$newRB
);
}
/*
@param $scores_actuel array
*
@param $
scores
_
obtenus a
rray
*
@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
$
score
s_obtenus.
*
/*
*
*
Fonction qui calcule les différentiels de
scores
obtenus a
prè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
(
$scores_actuel
,
$scores_obtenus
,
$K
,
$D
)
function
ELO
_classement
(
$S
,
$R
,
$n
,
$K
,
$nmax
=
20
)
{
$newS
=
array
();
$c
=
max
(
$scores_obtenus
)
-
min
(
$scores_obtenus
);
$d
=
min
(
$scores_obtenus
);
for
(
$j
=
0
;
$j
<
count
(
$scores_obtenus
);
$j
++
)
{
$m
=
avg_skip
(
$scores_actuel
,
$j
);
$EA
=
1
/
(
1
+
10
**
((
$m
-
$scores_actuel
[
$j
])
/
$D
));
$EA
=
$c
*
$EA
+
$d
;
$s
=
$K
*
(
$scores_obtenus
[
$j
]
-
$EA
);
$m
=
count
(
$S
);
if
(
count
(
$R
)
!=
$m
)
throw
new
DomainException
;
if
(
$s
>=
0
)
$newS
[
$j
]
=
floor
(
$s
);
$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
$newS
[
$j
]
=
ceil
(
$s
);
$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
[
1
]);
$count
[
$i
]
++
;
$res
[
$j
]
=
1
/
(
$count
[
$j
]
+
1
)
*
(
$count
[
$j
]
*
$res
[
$j
]
+
$newSAB
[
2
]);
$count
[
$j
]
++
;
}
return
$
newS
;
}
return
$
res
;
}
/*
function random_scores($n, $min, $max)
{
$r = array();
...
...
@@ -77,8 +87,9 @@ function random_scores($n, $min, $max)
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);
...
...
@@ -107,4 +118,4 @@ for($j=1;$j<20;$j++){
}
print("</table></body></html>");
*/
\ No newline at end of file
Ce diff est replié.
Cliquez pour l'agrandir.
Aperçu
0%
Chargement en cours
Veuillez réessayer
ou
joindre un nouveau fichier
.
Annuler
You are about to add
0
people
to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Enregistrer le commentaire
Annuler
Veuillez vous
inscrire
ou vous
se connecter
pour commenter