2011-10-04 22 views
2

我正在開發一個網絡模擬器,其中數據包到達和傳輸嘗試的事件遵循泊松分佈。我有Knuth的算法的改編:Poisson variates,λ和到達率連接,Java網絡模擬

的節點與泊松過程隨機重新安排樓層
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); 

該模擬器運行理應幾次,以增加負荷,每次測量性能。起初我認爲到達率等於λ,但λ越大,我得到的每秒包數就越少。到達率與λ之間的關係是什麼? 我很抱歉的很長的職位,但我真的很失望搜索大量的大學書籍和互聯網沒有一個有效的網絡仿真源...

在此先感謝您的幫助。

+6

並且有人說Java沒有lambda表達式。 –

回答

3

看起來很奇怪,但對於您的泊松過程,您不需要泊松分佈,而是需要指數分佈。看看wikipedia

您在代碼中模擬的到達間隔時間遵循參數lambda = 1/2.5(lambda是平均值的倒數)的exponential distribution。你可以很容易地用-Math.log(1.0 - rand.nextDouble())/ lambda獲得一個隨機的指數變量。

泊松過程有兩種觀點:上面描述的觀點保持固定的事件數量(1)和時間間隔的變化。另一個視圖保持固定的時間間隔,但該間隔內的事件數是隨機變量(並遵循泊松分佈)。

+0

非常感謝你的回答,你一直是最有幫助的。最後它是有意義的:) –

0

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

編號Ts是時間。λ是到達費率,每秒項目數。請參閱William Stallings, Queueing Analysis.

+0

非常感謝你的答案。 pdf也很棒,它回答了我提供的其他問題。 –