语境
我需要在 NetLogo(基于代理的模拟)和 Go(并行化概率计算)中开发的基于代理/基于个人的模拟模型中结合数百万个人(树)发生数千个事件的概率。对于那些感兴趣的人,概率是针对森林景观中的单个树木由多个其他事件引起的感染事件,例如暴露、传播,每个事件都有自己的概率。
每个人都可能被周围成千上万的其他人感染。完整的模型包括数以百万计的个体,因此我正在设计模型以尽可能快速有效地计算、修改和更新概率,因为模拟中的条件发生变化。
基于概率数学,如果和
是独立且不相互排斥的事件,并且以不同的概率
和发生
,总概率
计算为:
要么
此外,每个事件概率都是其他两个概率的乘积,其中 , 其中在事件之间是常数,但在事件之间不同)。
因此,我的模型中用于计算每棵树被任何其他个体感染的概率 (即,许多此类感染事件的组合概率)的整体方程如下:
要么
要么
在模拟中随着时间的推移,给定的单个树的值将发生变化(取决于单个树的状态变量的变化),而 的值
保持不变。因此,随着
时间步长之间值的变化,
需要修改 的值以反映这种变化。
然而,考虑到计算中涉及的值的数量(对数百万棵树中的每一棵树进行数千次计算),一旦存储每个个体(树)的每个值(考虑到我正在使用的软件和计算资源)。此外,我想限制在 NetLogo(存储每个人的状态和概率)和 Go(计算但不存储概率)之间来回传递的信息量,以避免超出内存限制?
我不想从头开始重新计算总体概率,这需要大量时间和计算资源,我希望能够
根据 的值的变化来修改给定单个树的总体概率
。
题
在给定上述标准的情况下,给定 N 个具有不同概率的独立事件,计算至少一个事件发生的概率的通用形式是什么?
如何有效地修改每个人的感染概率,而无需从头开始重新计算?