【发布时间】:2009-04-27 18:06:50
【问题描述】:
我有一组必须随机发生的事件,但以预定义的频率发生。即在(完全)无限事件的过程中,事件 A 应该发生 10% 的时间,事件 B 应该发生 3%,依此类推......当然,事件列表的百分比总和将添加最多 100 个。
我想以编程方式实现这一目标。我该怎么做呢?
【问题讨论】:
标签: algorithm language-agnostic random
我有一组必须随机发生的事件,但以预定义的频率发生。即在(完全)无限事件的过程中,事件 A 应该发生 10% 的时间,事件 B 应该发生 3%,依此类推......当然,事件列表的百分比总和将添加最多 100 个。
我想以编程方式实现这一目标。我该怎么做呢?
【问题讨论】:
标签: algorithm language-agnostic random
你还没有指定语言,所以这里有一些伪代码
你基本上想要一个函数,它会以各种概率调用其他函数
Function RandomEvent
float roll = Random() -- Random number between 0 and 1
if roll < 0.1 then
EventA
else if roll < 0.13 then
EventB
....
【讨论】:
有趣的描述。如果没有限制实施的具体细节,我只能提供一个想法,您可以对其进行修改以适应您已经对实施做出的选择。如果您有一个文件,其中每一行都包含一个事件,则将该文件构造为具有 10% 的 A 行、3% 的 B 行等。然后在选择事件时,获取一个随机生成的整数以从文件。
【讨论】:
您必须详细说明您的意思。如果您只是希望概率与您描述的一样,只需选择 1-100 之间的随机数并将其映射到事件。即如果随机数是1-10,做事件A。如果是11-13,做事件B,等等
但是,如果您要求事物始终按照这些比例精确显示(并不是说这真的可能),您就必须采取不同的做法。请确认您要查找的含义,如果需要,我会进行编辑。
【讨论】:
对于每个事件,生成一个介于 0 和 100 之间的随机数。如果事件 A 应发生 10% 的时间,则将值 0 - 10 映射到事件 A,依此类推。
例如,对于 2 个事件:
n = 0 - 10 ==> Event A
n = 11 - 99 ==> Event B
如果你这样做,你可以让你的事件随机发生,如果运行时间足够长(并且你的 RNG 足够好),事件频率将加起来达到所需的百分比。
【讨论】:
【讨论】:
从 1 到 100(包括 1 到 100)中选择一个随机数。为每个事件分配一组唯一的整数,表示它应该发生的频率。如果您随机生成的数字落在特定选定的数字范围内,则会触发相关事件。
在上面的示例中,应该显示 10% 的时间的事件,您将为其分配一个长度为 10 个整数的整数范围(1-10、12-21 等...)。如何存储这些整数范围取决于您。
就像迈克尔说的那样,由于这些是随机数,因此无法保证所述事件在 10% 的时间内准确触发,但从长远来看,它应该...假设随机数分布均匀。
【讨论】: