2

我正在开发一个网络模拟器,其中数据包到达和传输尝试的事件遵循泊松分布。我有一个 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);

据说模拟器运行了几次,每次都增加负载以测量性能。起初我认为到达率等于 λ,但 λ 越大,每秒收到的数据包越少。到达率和λ有什么关系?我很抱歉这篇很长的帖子,但我真的很沮丧,因为在没有有效的网络模拟来源的情况下搜索大量大学书籍和整个互联网......

预先感谢您的帮助。

4

2 回答 2

4

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

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

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

于 2011-10-05T00:41:24.037 回答
0

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

不,Ts 是一个时间。λ 是到达率,以每秒项目数为单位。参见William Stallings,排队分析。

于 2011-10-05T01:20:24.090 回答