2015-01-31 6 views
1

프로젝트에 대한 포아송 분포를 통해 임의의 도착을 생성하려고합니다. 코드 부분 :poisson 분포는 항상 각 실행마다 동일한 인스턴스를 생성합니다.

#include <iostream> 
#include <fstream> 
#include <cstdlib> 
#include <cmath> 
#include <random> 
#include <ctime> 
int nextTime(double lambda,int timeslots,int PU_number); 

int main() 
{ 
    srand(time(0)); 
    //some code 
    nextTime(4,time_slots,PU_number); 
} 
int nextTime(double lambda,int timeslots,int PU_number) 
{ 
    int mat[PU_number][timeslots]; 
    std::default_random_engine generator; 
    std::poisson_distribution<int> distribution(lambda); 
    int number; 
    int total=0; 
    for(int i=0; i< PU_number;i++) 
    { 
     total=0; 
     for(int j=0;j<timeslots;j++) 
     { 
      number = distribution(generator); 
      total+=number; 
      mat[i][j]=total;//another matrix, not relevant here 
      cout<<number<<" "; 
     } 
     cout<<endl; 
    } 
    return 0; 
} 

위 코드는 항상 동일한 숫자를 생성합니다. 여기서 뭐가 잘못 됐니?

+1

main에서'srand (time (0));을 한 번만 호출해야합니다. –

+0

나는 그것을했다. 여전히 같은. 나는 그것을 한 번만, 같은 결과로 불렀다. 방금 두 번째 기회를 추가하여 기회를 보았습니다. 다른 사람들을 위해 편집하겠습니다. –

+0

시드를 설정하기 전에 발전기를 정의해야하는 경우 ... generator.seed (NEWseed);를 사용하면 발전기 시드를 NEWseed 값으로 재설정 할 수 있습니다. –

답변

2

srand 시드 이 아닌 rand입니다. 이것을 뿌리려면

std::default_random_engine generator(std::random_device{}()); 
            ^^^^^^^^^^^^^^^^^^^^^^ 
            e.g., any seed can go here 
+0

나는 당신과 그것을 바 꾸었습니다. 하지만 지금은 컴파일러가 디버그 모드에서 라인을 실행하려고 할 때 멈춘다. –

+0

아하. 나는'std :: random_device {}()'를'time (0)'으로 바꿨고 올바르게 동작합니다. 고마워 친구. –

+0

코드는 [괜찮습니다.] (http://coliru.stacked-crooked.com/a/4ea388acb07857ad), 컴파일러의 버그 인 것 같습니다. (Windows에서 MinGw입니까?) 대신 다른 시드를 사용하십시오. –