2012-10-26 3 views
2

전송 네트워크의 시뮬레이션 프로그램을하고 있습니다. 나는 속도 람다의 포이즌 분포를 가진 버스 정류장에서 승객의 도착을 시뮬레이션하고 싶다.포아송 생성 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> 
항상 같은 번호를 생성합니다.

생성 된 두 개의 목록이 약간 다르도록이 세대에서 특정 유사 콘텐츠를 만드는 방법은 무엇입니까?

+1

목록을 만들기 전에 매번 랜덤 제네레이터 ('rnd_gen')를 다시 시드하는 방법은 어떻습니까? 그것은 다른 순서를주는 원인이되지 않을까요? –

+0

팁 주셔서 감사합니다. 실제로 선언에 다음 코드 줄을 추가하십시오. boost :: mt19937 rnd_gen (static_cast (std :: time (0))); 그리고이 함수를 호출 할 때마다 아주 잘 작동합니다. 다시 한번 감사드립니다. – Shiniga

+0

완전성을 위해, 나는 aswer로서 당신의 결론을 올렸다. –

답변

0

랜덤 생성기를 사용할 때마다 현재 시간으로 재분할하십시오. 이것은 대부분 다른 시간 순서를 낳을 것입니다. 발견 한대로 :

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