0
int[] r = new int[1000]; 

ExponentialDistribution exp = new ExponentialDistribution(4.0); 

for(int i = 1; i <r.length; i++){ 
    r[i] = (int)exp.sample() + 1 + r[i-1]; 
} 

上述代碼從r [0] = 0到r [999] = 4527填充array [r]。這是一次隨機運行。如果r.length增加到2000,最後一個元素r [1999]增加8963.我試圖找到解決方案來填充數組[r],範圍在0-5000之間。即使r.length增加,數組也應該在這種情況下,如果r [999] < = 5000,那麼r [1999]也應該是< = 5000。使用指數分佈在特定範圍內填充隨機數的陣列

說,r.length表示總數。的事件,數組r的每個元素表示事件發生的時間。總時間是5000單位。動機是,第一個事件發生在時間0和最後一個時間< = 5000,即使r.length增加或減少,兩個事件的發生時間應相應調整。

非常感謝

+2

請花些時間在下次提問 –

+0

@ScaryWombat有什麼不可理解的嗎? –

+0

你並不真正問一個問題。對於「ExponentialDistribution」類來自哪裏的記錄?一個簡單的解決方案是,如果該號碼不符合您的要求,那麼不要使用它,尋找另一個號碼。另外,如果你正在添加'i'(索引),那麼隨着索引的增長,數字 –

回答

0

我想你問的是:填寫任意長度的有代表在該事件發生的時間數字數組。上次事件的時間應該小於給定量。

如果你真的模擬事件到達,那麼這並沒有多大意義。有關詳情,請參閱https://en.wikipedia.org/wiki/Arrival_theorem。但是,總而言之,您通常會決定事件發生的頻率(平均)以及列表中需要的事件數量。爲了得到一個現實的分佈,恰好有一定數量的事件以給定的時間結束,您可能需要無限制地運行這一代,然後縮小所有的事件時間。但說實話,我不確定那會是什麼意思。

或者,如果你只是想一組按升序排序的兩個範圍之間的數字則是相當容易:

int[] events = random.ints(count, min, max).sorted().toArray(); 

這不會是一個泊松分佈,但沒有進一步的信息真實模擬關於你想要達到什麼(以及爲什麼你認爲需要指數分佈),那麼很難給出更具體的建議。

相關問題