簡體   English   中英

PHP 中的加權隨機選擇

[英]Weighted Random Choice In PHP

我需要幫助以使我的概率賠率更接近低百分比的測試結果。 我所擁有的似乎適用於 1% 或更高的百分比,但我需要它以非常低的百分比工作,例如 0.02%(低至小數點后 4 位)。 在運行 1000-100000 次測試后,任何低於 1% 的結果往往最終有大約 1% 的概率,結果相似。

示例結果

ID  Odds    Test Total  Test Odds
1   60.0000 301773  60.3546%
2   30.0000 148360  29.672%
3   9.9800  44897   8.9794%
4   0.0200  4970    0.994%

Function

// $values = [1,2,3,4]
// $weights = [60.0000,30.0000,9.9800,.0200]
private function getRandom($values, $weights)
{
    $count = count($values); 
    $i = 0; 
    $n = 0; 
    $num = mt_rand(0, array_sum($weights)); 
    while($i < $count)
    {
        $n += $weights[$i]; 
        if($n >= $num)
            break; 
        $i++; 
    } 
    return $values[$i]; 
}

mt_rand返回一個 integer,因此將其與 0.02 進行比較實際上與將其與 1 進行比較相同。因此,對於小於 1% 的權重,您總是得到大約 1%。 嘗試像這樣計算$num

$num = mt_rand(0, array_sum($weights) * 100) / 100; 

3v4l.org 上的演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM