我想要一个函数,它接受自上次调用以来经过的秒数作为输入,并返回true或false,表示事件是否应该在该时间段内发生。我希望它平均每X次超过一次,比如5秒。我也感兴趣,如果没有任何状态可以做到,this question的回答是用的。
我想要完全准确,它必须返回一个应该发生的事件数量的整数,如果它每10 * X次调用一次或类似的事情,那么奖励积分!
答案 0 :(得分:2)
听起来你正在描述一个Poisson process,给定时间间隔内的平均事件数由Poisson distribution给出,参数lambda = 1 / X.
对于给定的lambda值和t的参数值,在后一页上使用表达式的方法如下:
exp(-lambda*t) * (lambda*t)**0 / factorial(0)
)请注意,是的,如果t与1 / lambda(即X)相比较大,则在一段时间内最终会出现多个事件。如果t总是比1 / lambda小,那么你不太可能在这段时间内获得多个事件,因此算法大大简化了(如果p 注2:无法保证每个X区间至少会有一个事件。只是它会平均到那个。 (上面的内容相当于我的头脑;仔细测试你的实现)
答案 1 :(得分:0)
假设某个事件类型平均每10秒发生一次,并且您希望打印事件发生的模拟时间戳列表。
一种好的方法是每1秒产生一个[0,9]范围内的随机整数。如果它为0 - 触发该事件的第二个。当然你可以控制分辨率:你可以生成一个每0.1秒范围[0,99]的随机整数,如果它是0,则触发该DeciSecond的事件。
假设事件之间没有依赖关系,则无需保持状态。
根据所需的分辨率,找出事件在给定时间片内发生的次数 - 只生成足够的随机整数。
修改强>
您应该使用高分辨率(每个事件的每个周期至少20个randoms)才能使模拟有效。