2

トランスポート ネットワークのシミュレーション プログラムを実行しています。ラムダ率の毒分布を持つバスステーションに乗客が到着することをシミュレートしたいと考えています。

実際、私のプログラムの構想では、到着日の 2 つのリストが必要です。1 つ目は乗客の到着予定日と見なされ、2 つ目は乗客の実際の到着日と見なされます。

到着時刻を生成するために、ブーストを使用して次のコードを使用しました。

<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 と同じリスト サイズの到着日を生成すると、常に同じ数値が生成されることです。

この世代で特定のバリエーションを作成して、生成された 2 つのリストが少し異なるようにするにはどうすればよいですか?

4

1 に答える 1

0

乱数発生器を使用するたびに、現在の時刻で再シードします。これにより、ほとんどの場合、異なるシーケンスが生成されます。あなたが知ったように:

rnd_gen(static_cast<unsigned int>(std::time(0)));
于 2012-10-26T22:35:33.190 に答える