How do I generate discrete random events with a Poisson distribution?

前端 未结 2 1303
醉酒成梦
醉酒成梦 2021-02-15 18:12

I\'m aware of Knuth\'s algorithm for generating random Poisson distributed numbers (below in Java) but how do I translate that into calling a method, generateEvent()

相关标签:
2条回答
  • 2021-02-15 18:24

    If you are looking to simulate the inter-event arrival time, you want the exponential distribution.

    Take a look at Pseudorandom Number Generator - Exponential Distribution

    Your code would then look like this:

    // Note L == 1 / lambda
    public double poissonRandomInterarrivalDelay(double L) {
        return (Math.log(1.0-Math.random())/-L;
    }
    

    ...

    while (true){
        // Note -- lambda is 5 seconds, convert to milleseconds
        long interval= (long)poissonRandomInterarrivalDelay(5.0*1000.0);
        try {
            Thread.sleep(interval);
            fireEvent();
    }
    
    0 讨论(0)
  • 2021-02-15 18:24

    The Poisson random numbers you are generating, as Scott mentioned, represent the frequency of your events. Once you have the frequency, you can fit their occurrences over the interval using a second distribution, say Uniform.

    Suppose the number of events generated for an interval of N is k. Then you simply need to generate (k+1) random numbers that sum to N.

    |<----------------------- N ------------------------->|
    --r_0--(event)---r_1-..-(event_k)--r_(k+1)--

    To do so, simply generate (k+1) random numbers and divide them by their sum, divided by N. The first k of these numbers become the timestamps of your events.

    0 讨论(0)
提交回复
热议问题