排队论——随机时间概率
排队论中在模拟时顾客到达时间,服务时间时,有两个结论:
1. 单位时间内平均到达的顾客数如果为 n ,那么到每两个顾客的达时间的时间间隔这个随机变量是服从参数为 1/n 的泊松分布;
2. 每个顾客平均需要的服务时间如果为 t,那么 t 应该服从 参数为 1/t 的指数分布。
泊松分布:
,
lambda是单位时间内的平均数,是2.71828...(Euler's number)。
三种实现,首先第一种是一个产生随机柏松分布数的简单算法(伪随机数抽样),由Knuth提出。
第二种,有一些微小的差别。
第三种,
实现如下:
static double poisson(double lambda) { int x = 0; double p = exp(-lambda); double s = p; double u = std::rand() * 0.1 / RAND_MAX; while (u > s) { x++; p = p*lambda / x; s += p; } return x; }
指数分布:
当时,;否则,
lambda是单位时间内的数目。
实现:
static double exponentail(double lambda) { return -log(1 - (std::rand() * 0.1 / RAND_MAX)) / lambda; }