我正在做一个传输网络的仿真程序。我想模拟一个毒气分布为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/

10-10 18:24