JeuWeb - Crée ton jeu par navigateur
Tirage Aléatoire avec ponderation en %age - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Tirage Aléatoire avec ponderation en %age (/showthread.php?tid=5536)

Pages : 1 2


RE: Tirage Aléatoire avec ponderation en %age - Ter Rowan - 08-07-2011

c'est bizarre, même si je suis dans une démarche assez proche de la 3 comme tout le monde finalement, j'inverserais les clefs et les valeurs et je ne traiterais qu'un tableau

en reprenant le code de Roworll

// Définition du tableau
// La valeur de chaque entrée représente son poids
$Val=array(
'resultat 1' => 20,
'resultat 2' => 30,
'resultat 3' => 10,
'resultat 4' => 60
);


// tirage aléatoire basé sur le total des poids
$rnd=mt_rand(1,array_sum($Val));

$sum=0;
foreach ($Val as $result => $chance)
{
$sum += $chance;
if ($rnd <= $sum)
break;
}

//Affichage du résultat
echo 'résultat ('.$rnd.') : '.$result;



RE: Tirage Aléatoire avec ponderation en %age - Argorate - 08-07-2011

Au final j'ai fais la chose équivalante à Roworll.
Par contre c'est vrai que je pourais optimiser en metant les ponderations en indice, ça me ferait des manip en moins pour récup le resultat !

Sinon j'aime bien l'autre optimisation que tu fais Ter Rowan, a mon avis c'est un peu plus rapide que ce que j'avais implémenté, à tester...
l'idée d'utiliser le foreach pour récup la clé sans passé par des array_keys ou autre est pas mal en fait ^^


RE: Tirage Aléatoire avec ponderation en %age - Roworll - 08-07-2011

Ça dépends de ce que tu stockes dans ton tableau.
Dans un cas simple effectivement, utiliser le contenu en tant que clé et le poids en tant que valeur permet d'optimiser un poil.
Pour stocker des choses plus complexes (objets, sous tableaux), soit tu travailles avec un couple clé/objet dans un seul tableau, soit avec deux tableaux distincts (un pour les poids l'autre pour les valeurs/objets)