Après plusieurs jours à me rendre quasi malade si cette question (et même plusieurs semaines à penser avoir résolu le problème et puis ben non), je me tourne vers vous en espérant que quelqu'un aura la possibilité de m'aider
Le problème de base est simple : je dois répartir une valeur entre plusieurs joueurs en fonction de deux critères
exemple : je dois répartir 200 pièces en fonction des deux colonnes ci dessous.
Ce qui me pose problème c'est qu'à l'instant du calcul, je n'ai pas encore accès à toutes les valeurs individuelles (l'algo se positionne dans une boucle qui liste les joueurs donc par exemple au moment où je vérifie johnny, je n'ai pas les résultats de tous les autres).
Les seules données auxquelles j'ai accès à tout instant : le total à répartir, la somme de la colonne jets et la somme de la colonne puissance (en %) et le total de joueurs. Je peux également obtenir les mêmes totaux en excluant par exemple Florent qui est à 0% de puissance.
j'obtiens bien évidemment les valeurs individuelles de chaque joueur chaque fois que le moment pour l'algo de leur donner leur part du butin.
Je comprends que ce n'est pas optimal mais c'est une contrainte que je ne peux pas changer donc la solution n'est pas là (si il y'en a une)
Jets
puissance/100
johnny
10
10
eddy
20
10
jacques
17
10
michel
20
80
claude
20
100
florent
15
0
102
210
selon cet exemple et l'idée que j'ai en tête je désire que Florent ait 0 pièces, que claude ait sensiblement plus de pièces que johnny, que eddy ait également sensiblement plus que johnny et michel moins que claude mais dans une moindre proportion.
j'étais parti sur l'idée suivante :
trésor * (jets/totalJets) * puissance/100
Ce qui me donne effectivement un résultat individuel intéressant mais dont la somme par définition ne vaut pas la valeur du trésor (200)
j'ai donc eu l'idée d'essayer de calculer le manquant (ou reste) total avant la répartition mais je ne tombe pas sur le bon résultat quoi que je fasse (des variations sur le thème :
reste = trésor - (trésor * 210/600)
avec 210 somme des puissance et 500 : total des joueurs * 100
Mon algo fonctionnait plus ou moins correctement mais j'ai du introduire la possibilité pour la puissance (ou les jets) d'être faible voir = 0 et ça a tout déréglé
Je vous remercie d'avance pour l'aide que vous pourrez m'apporter, ce problème me bloque depuis un temps incalculable
La solution me semble assez simple. Prenons Ji et Pi comme les variables de jets et de puissance du joueur i.
Et appelons PJ la somme des Pi*Ji. C'est simple à calculer, cela peut même se faire directement avec une requête sql. Avec une boucle également.
Appelons maintenant T le trésor, il suffit donc de donner à chaque joueur le montant T */(PJ*Pi*Ji => la somme est bien égale à T et chaque joueur a bien un montant = constante * Pi * Ji, la constante vaut en l'occurrence T/ PJ qui ne dépend pas de i.
non ils ne sont pas dans la même table donc j'ai juste imbriqué la deuxième requête dans la boucle de la première valeur et ça fonctionne nickel encore une fois un grand merci pour ton aide !
bonne soirée
aide algorithme Répartition par deux clés
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Site les mathématiques amusantes pour vous détendre
Site les mathématiques amusantes pour vous détendre