Who*_*res 1 c++ random poisson network-traffic
有件事我不明白。我使用 cpp 参考中给出的示例来生成数字:
const int nrolls = 10; // number of experiments
std::default_random_engine generator;
std::poisson_distribution<int> distribution(4.1);
for (int i=0; i<nrolls; ++i){
int number = distribution(generator);
cout<<number<<" "<<endl;
}
Run Code Online (Sandbox Code Playgroud)
(原始代码:http://www.cplusplus.com/reference/random/poisson_distribution/)
输出:2 3 1 4 3 4 4 3 2 3 等等...首先这些数字意味着什么?我的意思是我必须将它们相加才能创造时机吗?例如:2、(2+3)=5、(5+1)=6、(6+4)=10、……等等。
其次,我真正的问题是,我需要生成网络数据包的随机到达和数据包的大小。我的意思是,当数据包到来时,如果数据包到来,数据包的大小是多少?我怎样才能做到这一点?我需要这样的东西: http://i.hizliresim.com/dWmaGX.png
恐怕您通过泊松过程生成到达时间的方式不正确。泊松过程不是泊松分布。
通过泊松过程生成到达时间并不意味着像在代码中那样使用泊松分布。它是通过基于泊松到达率 lamda 创建指数分布来完成的。
简而言之,您需要生成平均值 = 1/lamda 的指数分布,请参见以下示例:
#include <iostream>
#include <iterator>
#include <random>
int
main ()
{
// seed the RNG
std::random_device rd; // uniformly-distributed integer random number generator
std::mt19937 rng (rd ()); // mt19937: Pseudo-random number generation
double averageArrival = 15;
double lamda = 1 / averageArrival;
std::exponential_distribution<double> exp (lamda);
double sumArrivalTimes=0;
double newArrivalTime;
for (int i = 0; i < 10; ++i)
{
newArrivalTime= exp.operator() (rng);// generates the next random number in the distribution
sumArrivalTimes = sumArrivalTimes + newArrivalTime;
std::cout << "newArrivalTime: " << newArrivalTime << " ,sumArrivalTimes: " << sumArrivalTimes << std::endl;
}
}
Run Code Online (Sandbox Code Playgroud)
运行这段代码的结果:
newArrivalTime: 21.6419 ,sumArrivalTimes: 21.6419
newArrivalTime: 1.64205 ,sumArrivalTimes: 23.2839
newArrivalTime: 8.35292 ,sumArrivalTimes: 31.6368
newArrivalTime: 1.82962 ,sumArrivalTimes: 33.4665
newArrivalTime: 34.7628 ,sumArrivalTimes: 68.2292
newArrivalTime: 26.0752 ,sumArrivalTimes: 94.3045
newArrivalTime: 63.4728 ,sumArrivalTimes: 157.777
newArrivalTime: 3.22149 ,sumArrivalTimes: 160.999
newArrivalTime: 1.64637 ,sumArrivalTimes: 162.645
newArrivalTime: 13.8235 ,sumArrivalTimes: 176.469
Run Code Online (Sandbox Code Playgroud)
因此,根据您的实验,您可以使用:newArrivalTime 或 sumArrivalTimes。
参考: http ://www.math.wsu.edu/faculty/genz/416/lect/l05-45.pdf
| 归档时间: |
|
| 查看次数: |
6129 次 |
| 最近记录: |