我想在Java中创建一个函数,在给定平均到达率(lambda)和平均服务率(mu)的情况下生成泊松到达。
在我的示例中,每天有 2.2 个请求,换句话说,每天有 2.2 个到达,平均服务时间为 108 小时。考虑到我的程序在 t=0 分钟开始,我想创建一个返回arrivals[]的函数,其中将包含t1、t2和可能的t3。 T1、t2 和 t3 是一天中到达事件发生的时刻(以分钟为单位)。我有以下限制:
t1 < t2 < t3 < 1440 minutes (24 hours*60 minutes/hour)
t2-t1 > 108 minutes
t3-t2 > 108 minutes
t3+ 108 minutes < 1440 minutes
有人可以帮帮我吗?
谢谢你,
Ana
您可以使用该算法由 D. Knuth 提出 http://en.wikipedia.org/wiki/Poisson_distribution#Generating_Poisson-distributed_random_variables:
private static int getPoissonRandom(double mean) {
Random r = new Random();
double L = Math.exp(-mean);
int k = 0;
double p = 1.0;
do {
p = p * r.nextDouble();
k++;
} while (p > L);
return k - 1;
}
要了解这是如何工作的,请注意之后k循环条件变为迭代
p1 * p2 * ... * pk > L
这相当于
-ln(p1)/mean -ln(p2)/mean ... -ln(pk)/mean > 1
请注意,如果p是均匀分布的,那么 -ln(p)/mean 具有给定均值的指数分布。当事件之间的间隔长度是指数分布的独立随机变量时,泊松分布的随机变量等于给定事件在固定间隔内发生的次数。由于我们使用泊松分布的平均值作为事件之间间隔的指数分布的平均值,因此我们计算出现次数的固定内部是单位长度。因此,循环条件对事件之间的间隔长度进行求和,并检查是否超出了单位间隔。如果我们在计算第 k 个事件时超出了单位间隔,则该间隔内发生了 k-1 个事件,因此我们返回 k-1。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)