Heim >Backend-Entwicklung >PHP-Tutorial >Wie kann ich in PHP Zufallszahlen mit gewichteten Wahrscheinlichkeiten generieren?

Wie kann ich in PHP Zufallszahlen mit gewichteten Wahrscheinlichkeiten generieren?

Susan Sarandon
Susan SarandonOriginal
2024-12-08 21:32:11784Durchsuche

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

Generieren von Zufallsergebnissen mit gewichteten Wahrscheinlichkeiten in PHP

Die Generierung von Zufallszahlen in PHP ist gut dokumentiert. Um eine Randomisierung mit vordefinierten Wahrscheinlichkeiten zu erreichen, ist jedoch ein zusätzlicher Ansatz erforderlich. Diese Frage konzentriert sich auf die Generierung zufälliger Werte zwischen 1 und 10 mit einer höheren Wahrscheinlichkeit, 3, 4 und 5 zu erhalten als 8, 9 und 10.

Inspiriert durch den Vorschlag von @Allain wurde eine benutzerdefinierte Funktion entwickelt Erleichtern Sie diese gewichtete Randomisierung in 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;
        }
    }
}

In dieser Funktion ist die Eingabe ein assoziatives Array, in dem die Schlüssel das Gewünschte darstellen Ergebnisse, und die Werte sind ihre entsprechenden Wahrscheinlichkeiten. Diese Wahrscheinlichkeiten müssen keine Prozentsätze sein, sondern relativ zueinander.

Durch die Verwendung einer Kombination aus PHPs Zufallszahlengenerator (mt_rand()) und einem kumulativen Wahrscheinlichkeitsansatz wählt die Funktion einen Zufallswert aus dem Array aus basierend auf den zugewiesenen Wahrscheinlichkeiten. Dies ermöglicht die Generierung zufälliger Ergebnisse mit benutzerdefinierten Abweichungen, was es zu einem vielseitigen und effektiven Werkzeug für verschiedene Anwendungen macht.

Das obige ist der detaillierte Inhalt vonWie kann ich in PHP Zufallszahlen mit gewichteten Wahrscheinlichkeiten generieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn