我正在尝试构建网络模拟(aloha like),其中n个节点在任何时刻决定是否必须根据指数分布(指数分布的到达时间)发送。
到目前为止我所做的是:我在一个for循环中设置一个主时钟,这个时钟只有当我从统一[0,1]中抽取一个样本时,任何节点才会开始发送(勾选)瞬间大于0.99999;即,在节点具有0.00001发送概率的任何时刻(如指数分布所要求的那样非常接近零)。
这些到达时间是否可以在每个节点处以指数方式分布,如果是,则使用什么参数?
答案 0 :(得分:1)
您正在做的事情被称为时间步骤模拟,并且可能非常低效。你的主时钟for循环中的每个刻度表示一个delta-t时间增量,并且在每个刻度中你有一个洗衣清单"这是否发生了?"可能的更新。时间刻度越大,模型的分辨率越低。小时间滴答会提供更好的分辨率,但实际上会使执行陷入困境。
要回答您的直接问题,您实际上正在生成geometric distribution。这将提供指数分布的离散时间近似。几何的期望值(以刻度数表示)为1/p
,而具有速率lambda的指数的期望值为1/lambda
,因此有效p
对应于指数&# 39;每个时间单位的速率,蜱对应。例如,使用您声明的值p = 0.00001
,如果刻度是毫秒,那么您将以每100秒1次出现的速率逼近指数,或者出现次数之间的平均值为100秒。
您可能会采用discrete-event建模观点做得更好。如果网络发送之间的时间遵循指数分布,则一旦发生发送事件,您可以安排下一个发生的时间。您维护待处理事件的优先级队列,并在处理当前事件的逻辑后,轮询优先级队列以查看接下来发生的情况。将事件通知从队列中拉出,将模拟时钟更新为该事件的时间,并将控制权分派给与该事件的状态更新逻辑对应的方法/功能。由于事件之间没有任何事情发生,您可以跳过大量的时间。这使得离散事件范例比时间步长方法更有效,除非模型状态几乎每个时间步都需要更新。如果您想了解有关如何实施此类模型的更多信息,请查看this tutorial paper。