Bonjour,
j'aurais aimé avoir un avis exterieur sur la meilleur methode algorithmique à suivre pour faire ça:
J'ai un tirage aléatoire à faire avec x cas possible, sachant que le tirage n'est pas équiprobable, j'ai donc pour chaque x, une pondération exprimé en pourcentage qui exprime les chances de tirage de x.
Comme implémenter la chose?
J'avais pensé a deux choses:
la première et de faire un mt_rand(1, 100);
et de découper les pourcentages en tranche.
Exemple :
CAS_POSSIBLE = array(a, b ,c, d);
PONDERATION = array(40, 20, 30, 10);
je peux dire:
si le tirage < 40 j'obtiens a
si tirrage >= 40 && < 60 j'obtiens b
si tirrage >= 60 && < 90 j'obtiens c
et tirrage >= 90 j'obtiens d
mais ça implique donc un petit calcule pour que les if soit générique et pas en dur.
--------------------------------------------------------------------------------
La seconde methode pourait etre de faire des boucle pour remplir un tableau avec les CAS_POSSIBLE, qui apparaitrait PONDERATION fois chacun et de faire un array_rand sur le tout.
C'est plus rapidement expliquer que la première mais je pense que c'est plus couteux comme méthode non?
--------------------------------------------------------------------------------
EDIT: j'ai trouvé sur le net une autre methode très interessante:
$tirage = mt_rand(1,100);
$somme = 0;
$i=0;
while($somme <= $tirage)
{
$somme += $PONDERATION[$i];
if($somme <= $tirage) $i++;
}
et le resultat serait $CAS_POSSIBLE[$i];
Si vous avez d'autres idées je vous écoute, et dans tout les cas, quel methode vosu semble la meilleur dans celles évoquées?
Merci.
j'aurais aimé avoir un avis exterieur sur la meilleur methode algorithmique à suivre pour faire ça:
J'ai un tirage aléatoire à faire avec x cas possible, sachant que le tirage n'est pas équiprobable, j'ai donc pour chaque x, une pondération exprimé en pourcentage qui exprime les chances de tirage de x.
Comme implémenter la chose?
J'avais pensé a deux choses:
la première et de faire un mt_rand(1, 100);
et de découper les pourcentages en tranche.
Exemple :
CAS_POSSIBLE = array(a, b ,c, d);
PONDERATION = array(40, 20, 30, 10);
je peux dire:
si le tirage < 40 j'obtiens a
si tirrage >= 40 && < 60 j'obtiens b
si tirrage >= 60 && < 90 j'obtiens c
et tirrage >= 90 j'obtiens d
mais ça implique donc un petit calcule pour que les if soit générique et pas en dur.
--------------------------------------------------------------------------------
La seconde methode pourait etre de faire des boucle pour remplir un tableau avec les CAS_POSSIBLE, qui apparaitrait PONDERATION fois chacun et de faire un array_rand sur le tout.
C'est plus rapidement expliquer que la première mais je pense que c'est plus couteux comme méthode non?
--------------------------------------------------------------------------------
EDIT: j'ai trouvé sur le net une autre methode très interessante:
$tirage = mt_rand(1,100);
$somme = 0;
$i=0;
while($somme <= $tirage)
{
$somme += $PONDERATION[$i];
if($somme <= $tirage) $i++;
}
et le resultat serait $CAS_POSSIBLE[$i];
Si vous avez d'autres idées je vous écoute, et dans tout les cas, quel methode vosu semble la meilleur dans celles évoquées?
Merci.
Dévotion, jeu multijoueur gratuit par navigateur de stratégie et de conquête
The Magic Institute, le jeu de magie médieval fantastique gratuit en ligne
Rapture Studio : créateur de divertissement pour tous
JePolitique.fr - débattons ensemble
JécrisLaConstitution.fr - ne laissons pas les Hommes aux pouvoirs écrire les règles du pouvoir
Je Deviens Citoyen (Association à but non lucratif)
The Magic Institute, le jeu de magie médieval fantastique gratuit en ligne
Rapture Studio : créateur de divertissement pour tous
JePolitique.fr - débattons ensemble
JécrisLaConstitution.fr - ne laissons pas les Hommes aux pouvoirs écrire les règles du pouvoir
Je Deviens Citoyen (Association à but non lucratif)