【问题标题】:generating random numbers with different probabilities生成具有不同概率的随机数
【发布时间】:2014-04-30 08:07:15
【问题描述】:

是否可以在 PHP 中生成随机数,例如从 1 到 10,并让它更可能生成较小的数字而不是较大的数字?

【问题讨论】:

  • 你需要为你的随机数定义一个分布函数。有了这个函数,你就可以编写你的自定义随机生成器了。
  • 没有 rand(1,10) 以相同的概率生成 1 到 10 的数字,我希望它更有可能生成 1,2,3.. 而不是 7,8,9 .
  • 或者快速而肮脏的概率转移:echo (rand(1,12)%10); 导致不均匀分布,因为 0 和 1 现在具有更高的概率。
  • 来自一个非常古老的问题 - generate random numbers with probabilistic distribution
  • 第一条评论给出了问题的正确解决方案,但OP显然不明白。也许他应该更加努力。

标签: php random


【解决方案1】:

当然。只是做更多的随机性:

//80% chance that it's going to be a number that's smaller or equal to 5
if (rand(0, 10) <= 8) { 
    $number = rand(0, 5);
} else {
    $number = rand(6, 10);
}

演示代码

<?php

$numbers = array();

for ($i = 0; $i < 1000; $i++) {
    if (rand(0, 10) <= 8) { 
        $number = rand(0, 5);
    } else {
        $number = rand(6, 10);
    }

    $numbers[$number] = (isset($numbers[$number]) ? $numbers[$number] + 1 : 1);
}

print_r($numbers);

输出

Array
(
    [0] => 141
    [1] => 147
    [2] => 135
    [3] => 137
    [4] => 131
    [5] => 148
    [6] => 34
    [7] => 27
    [8] => 36
    [9] => 33
    [10] => 31
)

DEMO

【讨论】:

    猜你喜欢
    • 2012-02-11
    • 1970-01-01
    • 1970-01-01
    • 2011-03-07
    • 1970-01-01
    • 2012-12-04
    • 1970-01-01
    相关资源
    最近更新 更多