Maison >développement back-end >tutoriel php >Comment générer des nombres aléatoires pondérés en PHP ?
Génération de nombres aléatoires pondérés en PHP
Question :
Comment pouvez-vous générer des nombres aléatoires entre 1 et 10, mais avec une probabilité plus élevée de sélectionner les nombres 3, 4 et 5 par rapport à 8, 9 et 10 en PHP ?
Réponse :
Pour obtenir ce caractère aléatoire pondéré, vous pouvez utiliser un tableau associatif qui mappe chaque résultat souhaité à son poids. Dans ce cas, vous pouvez créer un tableau dans lequel 3, 4 et 5 ont des poids plus élevés (par exemple, 3 à 50 %, 4 à 30 %, 5 à 20 %) que 8, 9 et 10 (par exemple, 8 à 10). %, 9 - 5%, 10 - 5%).
En fonction des poids attribués, vous pouvez générer un nombre aléatoire en utilisant mt_rand dans la plage de la somme totale des poids. Ensuite, parcourez le tableau et soustrayez chaque valeur de poids du nombre aléatoire jusqu'à ce qu'il devienne négatif. La clé du tableau correspondant au poids qui rend le nombre aléatoire négatif est le résultat souhaité.
Voici une fonction PHP qui implémente ce caractère aléatoire pondéré :
/** * getRandomWeightedElement() * Utility function for getting random values with weighting. * Pass in an associative array, such as array('A'=>5, 'B'=>45, 'C'=>50) * An array like this means that "A" has a 5% chance of being selected, "B" 45%, and "C" 50%. * The return value is the array key, A, B, or C in this case. Note that the values assigned * do not have to be percentages. The values are simply relative to each other. If one value * weight was 2, and the other weight of 1, the value with the weight of 2 has about a 66% * chance of being selected. Also note that weights should be integers. * * @param array $weightedValues */ function getRandomWeightedElement(array $weightedValues) { $rand = mt_rand(1, (int) array_sum($weightedValues)); foreach ($weightedValues as $key => $value) { $rand -= $value; if ($rand <= 0) { return $key; } } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!