2013-05-30 25 views
1

我想生成一個文件,其中包含時間戳(0和邊界值x之間的整數,以遞增順序),它代表事件的到達。 「事件到達率」應該是「正態分佈」,這意味着,在數據集的「中間」不知何故,到達率應該在開始和結束時更頻繁。 如何使用java生成這樣的值列表?生成一個範圍內的正態分佈式時間戳[0,x]

問候

回答

0

Java有一個Random類和它的方法之一是nextGaussian,這將給你從0-1.0正態分佈(高斯分佈和正態分佈是同義詞)。

從那裏你只需要乘以你的範圍來獲得該範圍內的值。

Random random = new Random(); 
public int nextNormalTime(int upperTimeBound){ 
    return (int)(random.nextGaussian()*upperTimeBound); 
} 

如果你想創建的這些有序列表,你可以添加次進入名單和排序,或爲類似的PriorityQueue。

List<Integer> list = new ArrayList<Integer>(nTimes); 
for (int i=0;i<nTimes;i++){ 
    list.add(nextNormalTime(upperTimeBound)); 
} 
Collections.sort(list); 
1

我greedybuddha同意,高斯函數是你想要的這裏,但你也說,你希望你的事件下單 - Random.nextGaussian()不會給你的是,它會給你正態分佈的隨機數。相反,使用高斯函數的時間來計算在每個點事件的發生頻率:

for (int t = 0; t < max; t++) 
{ 
    f = Math.exp(-Math.pow(t - CENTER, 2.0)/(2.0 * Math.pow(WIDTH, 2.0))); 
    for (int j = 0; j < f; j++) 
    { 
     writeEvent(t); 
    } 
} 

中心是您想要的曲線的「峯值」是(可能是最大/ 2),寬度爲控制分佈傳播的參數。

相關問題