以预定义的频率生成一组随机事件

时间:2009-04-27 18:06:50

标签: algorithm language-agnostic random

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

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

6 个答案:

答案 0 :(得分:4)

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

你基本上想要一个能调用具有各种概率的其他函数的函数

Function RandomEvent

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

但是,如果您要求事情在任何时候完全按照这些比例出现(而不是真的可能),那么您必须采用不同的方式。请确认您要查找的含义,如果需要,我会进行编辑。

答案 3 :(得分:1)

对于每个事件,生成0到100之间的随机数。如果事件A应该出现10%的次数,则将值0-10映射到事件A,依此类推。

例如,对于2个事件:

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

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

答案 4 :(得分:1)

  1. 以您想要的确切比例生成一系列事件。
  2. 对于每个事件,在您的时间范围内随机生成每个事件的时间戳。
  3. 按时间戳排序
  4. 浏览列表,在适当的时间发送每个事件。

答案 5 :(得分:0)

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

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

像迈克尔说的那样,因为这些是随机数,所以没有办法保证所说的事件正好在10%的时间内发生,但从长远来看它应该......给出随机数的均匀分布。