Maison > développement back-end > tutoriel php > Comment générer des nombres aléatoires pondérés en PHP ?

Comment générer des nombres aléatoires pondérés en PHP ?

Mary-Kate Olsen
Libérer: 2025-01-03 08:40:08
original
259 Les gens l'ont consulté

How to Generate Weighted Random Numbers in 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;
        }
    }
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal