распределение Пуассона всегда производит одни и те же экземпляры при каждом запуске

Я пытаюсь генерировать случайные поступления через распределение Пуассона для своего проекта. Часть кода:

#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;
}

Приведенный выше код всегда выдает одни и те же числа. что здесь не так?


person WhoCares    schedule 31.01.2015    source источник
comment
Вы должны вызывать srand(time(0)); только один раз в main.   -  person πάντα ῥεῖ    schedule 31.01.2015
comment
Я сделал это. все так же. Я вызвал его только один раз, тот же результат. Я только что попробовал свой шанс, добавив второй. Позвольте мне редактировать для других.   -  person WhoCares    schedule 31.01.2015
comment
Если вам нужно определить генератор, прежде чем вы хотите установить начальное значение, вы можете использовать...generator.seed(NEWseed);, которое сбросит начальное значение генератора на значение NEWseed.   -  person Kamil S Jaron    schedule 28.04.2015


Ответы (1)


srand семена rand, а не std::default_random_engine. Чтобы посеять это, используйте

std::default_random_engine generator(std::random_device{}());
                                     ^^^^^^^^^^^^^^^^^^^^^^
                                     e.g., any seed can go here
person Baum mit Augen    schedule 31.01.2015
comment
Я изменил его с вашим. но теперь он останавливается, когда компилятор пытается выполнить вашу строку в режиме отладки. - person WhoCares; 31.01.2015
comment
Ага. Я изменил std::random_device{}() на time(0) и все работает правильно. Спасибо приятель. - person WhoCares; 31.01.2015
comment
Код нормальный, похоже, ошибка в вашем компиляторе. (Это MinGw под Windows?) Вместо этого просто используйте другое семя. - person Baum mit Augen; 31.01.2015