【问题标题】:Controlling likelyhood of randomly generated numbers控制随机生成数字的可能性
【发布时间】:2014-08-09 11:42:55
【问题描述】:

如果我想要一个介于 1 和 3 之间的随机数,我可以使用 $n = mt_rand(1,3)

$n = 1 的概率为 33%,为 2 的概率为 33%,为 3 的概率为 33%。

如果我想让获得 3 比获得 1 更难怎么办?

假设我希望有 50% 的机会抽出 1,有 30% 的机会抽出 2,有 20% 的机会抽出 3?

我需要一个可扩展的解决方案,因为可能的范围会在 1-3 和 1-100 之间变化,但总的来说,我希望更频繁地绘制较小的数字而不是较高的数字。

我怎样才能做到这一点?

【问题讨论】:

    标签: php random dice


    【解决方案1】:

    有一个简单的解释,说明如何使用标准的均匀随机变量来生成分布与您想要的分布相似的随机变量:

    https://math.stackexchange.com/a/241543

    【讨论】:

    • +1 指出这个问题属于数学而不是 SO,但这是离简单解释最远的事情。
    【解决方案2】:

    这是数学。​​

    在您的示例中,刚刚选择了一个介于 0 和 99 之间的随机数。

    返回的值介于 0 到 49 之间 - 称之为 1 返回值介于 50 - 69 之间 - 称之为 2 返回值在 70 - 99 之间 - 称之为 3

    简单的 if 语句将执行此操作或填充所需分布的数组

    【讨论】:

      【解决方案3】:

      假设 1 - 10 的比例,您可以使用简单的 if 语句,并让数字代表百分比。并且只需让每个 if 语句将 $n 设置为特定的。只有失败,它不是普遍的。

      $dummy = mt_rand(1,10);
      
      // represents 50%
      if ($dummy <= 5) {
          $n = 1;
      } 
      // represents 40%
      if ($dummy >= 6 && $dummy <= 9) {
          $n = 2;
      } else {
      // represents 10%
          $n = 3;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-05-10
        • 2011-11-17
        • 2021-03-11
        • 2016-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多