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

Comment puis-je générer des nombres aléatoires en PHP avec des probabilités pondérées ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-08 21:32:11784parcourir

How Can I Generate Random Numbers in PHP with Weighted Probabilities?

Génération de résultats aléatoires avec des probabilités pondérées en PHP

La génération de nombres aléatoires en PHP est bien documentée. Cependant, parvenir à une randomisation avec des probabilités prédéfinies nécessite une approche supplémentaire. Cette question se concentre sur la génération de valeurs aléatoires comprises entre 1 et 10 avec une probabilité plus élevée d'obtenir 3, 4 et 5 que 8, 9 et 10.

En s'inspirant de la suggestion de @Allain, une fonction personnalisée a été développée pour faciliter cette randomisation pondérée en PHP :

/**
 * 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;
        }
    }
}

Dans cette fonction, l'entrée est un tableau associatif où les clés représentent les résultats souhaités, et les valeurs sont leurs probabilités correspondantes. Ces probabilités ne doivent pas nécessairement être des pourcentages mais plutôt relatives les unes aux autres.

En utilisant une combinaison du générateur de nombres aléatoires de PHP (mt_rand()) et une approche de probabilité cumulative, la fonction sélectionne une valeur aléatoire dans le tableau. en fonction des probabilités assignées. Cela permet de générer des résultats aléatoires avec des biais définis par l'utilisateur, ce qui en fait un outil polyvalent et efficace pour diverses applications.

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!

Déclaration:
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