首页 > 解决方案 > PHP:加权概率函数,返回不正确的结果

问题描述

我有 2 个数组,一个是奖品数组,另一个是获奖百分比/权重数组。

Prize Array: Prize 1, Prize 2, Prize 3, Prize 4, Prize 5
Prize Winning Percentage/Weights Array: 5, 5, 5, 70, 15

IE

以下是我的函数,我用它来根据获胜百分比/重量计算获胜奖金。

<?php
    $values = array(1, 2, 3, 4, 5);
    $weights = array(5, 5, 5, 70, 15);

    $res = weighted_random($values, $weights);
    echo $res; die;

    function weighted_random($values, $weights){ 
        $count = count($values); 
        $i = 0; 
        $n = 0; 
        if (array_sum($weights) <= 0 ) { return $values[$i] . ' - ' . $weights[$i]; }
        $num = mt_rand(1, array_sum($weights)); 
        while($i < $count){
            $n += $weights[$i]; 
            if($n >= $num){
                break; 
            }
            $i++; 
        } 
        return "Number: " . $num . " Value: " . $values[$i] . ' Weight: ' . $weights[$i]; 
    }

?>

现在,这个功能已经运行了 40 次,其中 4 次中奖了 2。如果你计算,那么 40 的 5% 是 2。所以 2 奖本应赢得 2 次,但事实并非如此。

功能有问题吗?或者我错过了什么?

长期以来,我一直在努力寻找解决方案。请帮忙。

标签: phprandomlogicprobabilityweighted

解决方案


推荐阅读