我正在做一个传输网络的仿真程序。我想模拟一个毒气分布为lambda的公交车站到达乘客。
实际上,在我的计划概念中,我需要两个到达日期列表:第一个被视为乘客的预计到达日期,第二个将被视为乘客的实际有效到达时间。
为了生成时间到达,我确实使用了以下代码进行boost:
<blink>
double lambda(Lambda1); //mean of Poisson distr
boost::mt19937 rnd_gen; //Mersenne Twister generator
typedef boost::variate_generator<
boost::mt19937, boost::poisson_distribution<>
> rnd_poisson_t;
rnd_poisson_t rnd_poisson( rnd_gen,
boost::poisson_distribution<>( lambda ) );
rnd_poisson = rnd_poisson_t( rnd_gen,
boost::poisson_distribution<>( lambda ));
for(int i = 0; i <size;i++)
{
value=rnd_poisson();
tab[i]= rnd_poisson();
i++;
}
</blink>
问题是,如果我将此代码用于不同的列表以生成相同Lambda和相同列表大小的到达日期,它将始终生成相同的数字。
如何在这一代中创建特定的变体,以使两个生成的列表有所不同?
最佳答案
每当使用随机生成器时,请使用当前时间重新设定其大小。大多数情况下,这将产生不同的顺序。如您所知:
rnd_gen(static_cast<unsigned int>(std::time(0)));
关于c++ - 使用C++生成泊松到达日期并 boost ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13093835/