我有一组事件必须随机,但是以预定义的频率发生。即,在(完全)无限事件的过程中,事件A应该发生10%的时间,事件B应该发生3%,等等...当然事件列表的百分比总和将添加最多100个。
我想以编程方式实现此目标。我该怎么做呢?
答案 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)
答案 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)
答案 5 :(得分:0)
选择1到100(包括1和100)的随机数。为每个事件分配一组唯一的整数,表示它应该发生的频率。如果您随机生成的数字落在该特定选定数字范围内,则会触发相关事件。
在上面的示例中,应该显示10%的时间事件,您将为其分配10个整数长整数(1-10,12-21等等)。你如何存储这些整数范围取决于你。
像迈克尔说的那样,因为这些是随机数,所以没有办法保证所说的事件正好在10%的时间内发生,但从长远来看它应该......给出随机数的均匀分布。