为了账号安全,请及时绑定邮箱和手机立即绑定

PHP中的加权随机选择

PHP中的加权随机选择

PHP
明月笑刀无情 2022-01-23 10:32:24
我需要帮助以使我的概率赔率更接近低百分比的测试结果。我所拥有的似乎适用于 1% 或更高的百分比,但我需要它适用于非常低的百分比,例如 0.02%(低至小数点后 4 位)。在运行 1000-100000 次测试后,任何低于 1% 的结果往往最终有大约 1% 的概率,结果相似。示例结果ID  Odds    Test Total  Test Odds1   60.0000 301773  60.3546%2   30.0000 148360  29.672%3   9.9800  44897   8.9794%4   0.0200  4970    0.994%功能// $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]; }
查看完整描述

1 回答

?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

mt_rand返回一个整数,因此将其与 0.02 进行比较实际上与将其与 1 进行比较是相同的。因此,对于小于 1% 的权重,您总是得到大约 1%。尝试$num像这样计算:

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


查看完整回答
反对 回复 2022-01-23
  • 1 回答
  • 0 关注
  • 163 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信