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(); 

这不会是一个泊松分布,但没有进一步的信息真实模拟关于你想要达到什么(以及为什么你认为需要指数分布),那么很难给出更具体的建议。

相关问题