【问题标题】:Generating a set of random events at a predefined frequency以预定义的频率生成一组随机事件
【发布时间】:2009-04-27 18:06:50
【问题描述】:

我有一组必须随机发生的事件,但以预定义的频率发生。即在(完全)无限事件的过程中,事件 A 应该发生 10% 的时间,事件 B 应该发生 3%,依此类推......当然,事件列表的百分比总和将添加最多 100 个。

我想以编程方式实现这一目标。我该怎么做呢?

【问题讨论】:

    标签: algorithm language-agnostic random


    【解决方案1】:

    你还没有指定语言,所以这里有一些伪代码

    你基本上想要一个函数,它会以各种概率调用其他函数

    Function RandomEvent
    
        float roll = Random() -- Random number between 0 and 1
        if roll < 0.1 then
            EventA
        else if roll < 0.13 then
            EventB
        ....
    

    【讨论】:

      【解决方案2】:

      有趣的描述。如果没有限制实施的具体细节,我只能提供一个想法,您可以对其进行修改以适应您已经对实施做出的选择。如果您有一个文件,其中每一行都包含一个事件,则将该文件构造为具有 10% 的 A 行、3% 的 B 行等。然后在选择事件时,获取一个随机生成的整数以从文件。

      【讨论】:

        【解决方案3】:

        您必须详细说明您的意思。如果您只是希望概率与您描述的一样,只需选择 1-100 之间的随机数并将其映射到事件。即如果随机数是1-10,做事件A。如果是11-13,做事件B,等等

        但是,如果您要求事物始终按照这些比例精确显示(并不是说这真的可能),您就必须采取不同的做法。请确认您要查找的含义,如果需要,我会进行编辑。

        【讨论】:

        • 是的,我知道概率只会在更长的时间内达到要求的值,所以我认为这对我来说已经足够了。我想这也取决于生成的伪随机数有多“随机”。
        【解决方案4】:

        对于每个事件,生成一个介于 0 和 100 之间的随机数。如果事件 A 应发生 10% 的时间,则将值 0 - 10 映射到事件 A,依此类推。

        例如,对于 2 个事件:

        n = 0 - 10 ==> Event A
        n = 11 - 99 ==> Event B
        

        如果你这样做,你可以让你的事件随机发生,如果运行时间足够长(并且你的 RNG 足够好),事件频率将加起来达到所需的百分比。

        【讨论】:

        • 0 - 10 将导致事件 A 发生 11% 的时间,这应该是 0 - 9
        【解决方案5】:
        1. 按照您想要的确切比例生成一系列事件。
        2. 对于每个事件,在您的时间范围内随机生成每个事件应交付的时间戳。
        3. 按该时间戳排序
        4. 遍历列表,在适当的时间传递每个事件。

        【讨论】:

          【解决方案6】:

          从 1 到 100(包括 1 到 100)中选择一个随机数。为每个事件分配一组唯一的整数,表示它应该发生的频率。如果您随机生成的数字落在特定选定的数字范围内,则会触发相关事件。

          在上面的示例中,应该显示 10% 的时间的事件,您将为其分配一个长度为 10 个整数的整数范围(1-10、12-21 等...)。如何存储这些整数范围取决于您。

          就像迈克尔说的那样,由于这些是随机数,因此无法保证所述事件在 10% 的时间内准确触发,但从长远来看,它应该...假设随机数分布均匀。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-02-05
            • 1970-01-01
            • 2017-03-24
            • 2016-01-06
            • 1970-01-01
            • 1970-01-01
            • 2014-06-02
            • 2015-07-31
            相关资源
            最近更新 更多