2012-10-26 34 views
2

我做了交通網絡的模擬程序生成泊松到達日期。我想模擬乘客在有lambda的毒物分佈的公共汽車站到達。使用C++和提高

事實上,在我的節目的概念,我需要到達日期的兩份清單:第一個被認爲是預期的到貨日期爲乘客和第二個會被認爲是乘客的實際有效的到來。

爲了生成時間的到來我沒有使用升壓使用下面的代碼:

<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和同一列表它的大小將始終生成相同的數字。

如何創建在這一代一定的變化,這樣當兩個生成的列表會有點不同?

+1

如何在創建列表之前每次重新生成隨機生成器('rnd_gen')?這不會導致它給出不同的順序嗎? –

+0

感謝您的提示。我實際添加這行代碼中的聲明: 升壓:: mt19937 rnd_gen(的static_cast <無符號整數>(標準::時間(0))); 每當我調用這個函數時,它都會很好地工作。 再次感謝。 – Shiniga

+0

爲了完整,我發佈了你的結論。 –

回答

0

與補種每當你使用它的當前時間的隨機數發生器。大部分時間這將產生不同的序列。當你發現:

rnd_gen(static_cast<unsigned int>(std::time(0)));