我有一个模拟事件发生的程序。我有以下限制:用刻度线模拟模拟泊松分布的随机因子
- 分布应该近似为Poisson distribution,即以固定速率发生的独立事件。
- 在1000时刻,事件应该发生了100次(平均)。 (1000和100是占位符,真正的数字来自真实世界的系统我试图模拟实验确定。)
我目前使用以下形式的代码:
def tick():
doMaintenance()
while random() < 0.1:
eventHappens()
我使用while
而不是if
来模拟这些事件是独立的想法。否则,在同一个勾号中不会有两个事件发生。但是,我怀疑这意味着random() < 0.1
(其中random
返回半开范围内的数字[0.0, 1.0)
)稍微不准确。 (这没关系,我正在量化的事件发生时间。)
有人可以建议正确random() < f
不变,如果我想使用(一般情况下)的泊松分布,使得在时间t
会有事件计数e
?我相信存在这样一个恒定的f
,但它的推导对我来说并不明显。
我把这个放在stackoverflow.com
中,所以我可以方便地用编码术语说话,因为我使用的数字模拟程序员比数学家更熟悉的刻度线刻度模拟。如果这在math.stackexchange.com
中更合适,请告诉我。
语言偏好?因为泊松分布很容易获得,所以有很多语言,例如, [C++](http://en.cppreference.com/w/cpp/numeric/random/poisson_distribution)。也就是说,我看到的最大问题是,你完全忽略了**两个**事件的可能性,当然这很可能(〜1%)。 – MSalters
您是否考虑过放弃固定增量时间提前量并转到事件调度机制?然后,您可以使用指数事件间时间,事件发生时会发生。固定增量时间提前量[已知会产生建模伪像](http://www.informs-sim.org/wsc11papers/218.pdf),即模型中偏离现实世界行为的行为。 – pjs
@pjs不是我的泊松过程吗?所以@Piquan必须首先通过泊松分布以100/1000的时间间隔抽样事件数量,然后将事件统一放置 –