泊松变量,λ和到达率连接,Java网络模拟

时间:2011-10-04 23:14:59

标签: java networking simulation poisson

我正在开发一个网络模拟器,其中数据包到达和传输尝试的事件遵循泊松分布。我改编了Knuth的算法:

public class Poisson {

    private double λ;
    private Random rand;

    /** Creates a variable with a given mean. */
    public Poisson(double λ) {
        this.λ = λ;
        rand = new Random();
    }

    public int next() {
        double L = Math.exp(-λ);
        double p = 1.0;
        int k = 0;

        do {
            k++;
            p *= rand.nextDouble();
        } while (p > L);

        return k - 1;

    }
}

我的规范声明节点使用泊松过程随机重新安排楼层。平均到达时间是指数分布的,平均值为Ts = 2.5ms。我使用λ= 2.5是否正确?

当我想要新来的活动时,我会做类似的事情:

Event evt = new Event(EventType.ARRIVAL_EVENT,
    MasterClock.getTime + poisson.next());
eventList.add(evt);

模拟器应该运行几次,每次都会增加负载来测量性能。起初我认为到达率等于λ但是λ越大我得到的每秒数据包越少。到达率和λ之间的关系是什么? 对于很长的帖子我感到很遗憾,但是如果没有有效的网络模拟资源,我会在很多大学图书和互联网上搜索我感到非常沮丧......

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

这可能看起来很奇怪,但对于泊松过程,您不需要泊松分布而是指数分布。查看wikipedia

您在代码中模拟的到达间隔时间遵循exponential distribution参数lambda = 1 / 2.5(lambda是均值的倒数)。您可以使用-Math.log(1.0 - rand.nextDouble())/ lambda轻松获得随机指数变量。

泊松过程有两种视图:上述视图保持事件数固定(1)并且时间间隔变化。另一个视图保持时间间隔固定,但该间隔中的事件数是随机变量(并遵循泊松分布)。

答案 1 :(得分:0)

  

Ts = 2.5ms。我是否正确使用λ= 2.5

没有。 Ts是时间。λ是每秒项目中的到达。见William Stallings, Queueing Analysis.