首頁 >後端開發 >php教程 >如何在 PHP 中產生帶有加權機率的隨機數?

如何在 PHP 中產生帶有加權機率的隨機數?

Susan Sarandon
Susan Sarandon原創
2024-12-08 21:32:11784瀏覽

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

在 PHP 中使用加權機率產生隨機結果

PHP 中隨機數的產生已有詳細記錄。然而,以預先定義的機率實現隨機化需要額外的方法。本題重點在於產生 1-10 之間的隨機值,與 8、9 和 10 相比,獲得 3、4 和 5 的機率更高。

從@Allin 的建議中汲取靈感,開發了一個自訂函數來在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;
        }
    }
}

在此函數中,輸入是一個關聯數組,其中鍵代表所需的值結果,值是它們相應的機率。這些機率不一定是百分比,而是彼此相關的。

透過利用 PHP 的隨機數產生器 (mt_rand()) 和累積機率方法的組合,該函數從數組中選取一個隨機值基於分配的機率。這允許產生具有用戶定義偏差的隨機結果,使其成為適用於各種應用程式的多功能且有效的工具。

以上是如何在 PHP 中產生帶有加權機率的隨機數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn