【问题标题】:Simulation: send packets according to exponential distribution模拟:按指数分布发送数据包
【发布时间】:2014-04-30 01:30:15
【问题描述】:

我正在尝试构建一个网络模拟(类似于阿罗哈),其中 n 个节点随时根据指数分布(指数分布的到达时间)决定它们是否必须发送。

到目前为止,我所做的是:我在 for 循环中设置了一个主时钟,该时钟滴答作响,只有当我为此从统一 [0,1] 中抽取样本时,任何节点才会在这一时刻(滴答声)开始发送瞬间大于 0.99999;即在任何时刻,节点都有 0.00001 的发送概率(根据指数分布要求非常接近于零)。

是否可以认为这些到达时间在每个节点上呈指数分布?如果可以,使用什么参数?

【问题讨论】:

    标签: simulation distribution exponential


    【解决方案1】:

    您正在执行的操作称为时间步长模拟,效率可能非常低。您的主时钟 for 循环中的每个滴答声都代表一个 delta-t 时间增量,并且在每个滴答声中,您都有一个“这件事发生了吗?”的洗衣清单。可能的更新。时间刻度越大,模型的分辨率就越低。小时间滴答将提供更好的分辨率,但确实会阻碍执行。

    要回答您的直接问题,您实际上是在生成一个geometric distribution。这将为指数分布提供离散时间近似。几何的期望值(以刻度数表示)是1/p,而具有速率 lambda 的指数的期望值是1/lambda,所以实际上p 对应于指数在任何时间单位的速率勾选对应。例如,使用您声明的值p = 0.00001,如果滴答是一毫秒,那么您将近似于一个指数,每 100 秒出现 1 次,或者两次出现之间的平均间隔为 100 秒。

    采用discrete-event 建模观点可能会做得更好。如果网络发送之间的时间遵循指数分布,则一旦发生发送事件,您可以安排下一次发生的时间。您维护未决事件的优先级队列,并在处理完当前事件的逻辑后轮询优先级队列以查看接下来会发生什么。将事件通知从队列中拉出,将模拟时钟更新为该事件的时间,并将控制分配给与该事件的状态更新逻辑对应的方法/函数。由于事件之间没有发生任何事情,因此您可以跳过大量时间。这使得离散事件范式比时间步方法更有效,除非模型状态几乎在每个时间步都需要更新。如果您想了解有关如何实现此类模型的更多信息,请查看this tutorial paper

    【讨论】:

    • 非常感谢您的完整回答,我现在从几何分布中采样并预先知道特定节点将在什么时间发送,不再需要设置主时钟(我猜想它可以被认为是离散事件版本)。
    猜你喜欢
    • 1970-01-01
    • 2015-02-26
    • 2018-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多