Inscription / Connexion Nouveau Sujet
Niveau algorithmique
Partager :

Attribution de points selon un classement

Posté par
benthi
17-06-11 à 19:32

Bonjour à tous,

J'aimerai créer un système d'attribution de points en fonction du classement de la personne, sachant que le premier quart du classement reçoit des points. (="personnes payées") Chaque personne paye une certaine somme pour participer (appelée S), et je possède un nombre de points à répartir fixe, égal à 90% (par exemple) du nombre total de personnes multiplié par S.
Le modèle de la fonction inverse me convient, j'attribue à chacun un nombre N égal au nombre de personnes payées divisé par le rang, histoire d'avoir la fonction sur intervalle ]0;1]. J'attribue alors à chacun son pourcentage des gains en divisant son N par la somme de tout les N.
En appliquant ensuite ce pourcentage au nombre de points total à répartir, j'obtiens le gain de chacun.

Mais le problème c'est qu'il peut arriver que les derniers payés reçoivent moins de points que la somme qu'il ont dépensé au départ.
Je voudrais donc pouvoir fixer à S le nombre de points que gagne le dernier payé. Mais comment dans ce cas arriver à répartir le même nombre de points en respectant la fonction initiale ?

Voilà j'espère que je me suis fait comprendre, je réfléchi depuis longtemps sur ce problème sans trouver de solution.
J'espère pouvoir trouver un peu d'aide ici !

Merci

Posté par
verdurin
re : Attribution de points selon un classement 17-06-11 à 23:04

Bonsoir,
je comprend ton problème comme suit :
Tu as une somme T à répartir entre n personnes numérotés de 1 à n. Disons que la personne de rang k reçoit gk points.

On doit donc avoir g1+g2+...+gn=T.

De plus on souhaite avoir  gn=S.
Si j'ai bien interprété, la suite (gk) est arithmétique (c'est à dire que la différence de gain entre deux joueurs consécutifs est constante g1-g2=g2-g3=...).


Si c'est vrai en posant r=g_1-g_2=g_2-g_3=\cdots=g_{n-1}-g_n on a
T=g_1+g_2+\cdots+g_n= n g_n +r \dfrac{n(n-1)}2 somme des termes d'une suite arithmétique


En prenant g_n=S il vient :

n S + r \dfrac{n(n-1)}2= T
puis
r= \dfrac{2 T}{n(n-1)}-\dfrac{S}{n-1}

et le gain du joueur de rang k est alors g_k = S+(n-k)r


Il faut noter que, dans les trois dernières formules j'ai écrit S à la place de g_n, gain du dernier joueur classé. En modifiant légèrement cette valeur, ainsi que celle de T, il doit être possible d'avoir des valeurs arrondies correctes, pour éviter de donner des valeurs fractionnaires aux joueurs.

En espérant t'avoir été utile.

Posté par
benthi
re : Attribution de points selon un classement 18-06-11 à 15:09

Merci pour ta réponse.

Malheureusement la suite (gk) n'est pas arithmétique (ni géométrique d'ailleurs). Elle suit une courbe hyperbolique.
Par exemple pour 20 participants payant 30 l'inscription, voici le tableau des gains:
1. 236
2. 118
3. 79
4. 59
5. 47


La fonction actuelle est représentée par la courbe bleu (38 personnes payées). Mais je voudrais pouvoir en quelque sorte la "déformer" pour que le minimum corresponde au prix d'inscription. J'ai tracé à la main la courbe rouge qui correspond à peu près à ce que je veux, sachant que la somme des gains des personnes payées doit toujours être la même.

J'espère avoir été plus clair

Attribution de points selon un classement

Posté par
verdurin
re : Attribution de points selon un classement 18-06-11 à 16:14

Bonjour,
une possibilité serait d'enlever nS au total à redistribuer, de faire la répartition du reste suivant ta méthode, puis de donner à chacun S plus le reste. Ce qui fait que le dernier joueur classé gagne un peu plus que S.

Posté par
benthi
re : Attribution de points selon un classement 18-06-11 à 17:13

Merci de m'avoir mis sur la voie!

Je garde la même fonction mais je soustrait 1 au résultat pour que le dernier payé obtienne le nombre 0 (et non plus 1). Je redistribue ensuite en enlevant nS au total à distribuer, puis j'ajoute S à chacun, et donc le dernier payé gagne précisément S.
Plutôt simple donc !

Merci encore



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !