C++ 随机队列模拟器客户到达时间

C++ 随机队列模拟器客户到达时间,c++,data-structures,queue,C++,Data Structures,Queue,我在生成随机客户到达时遇到代码问题。因此,问题是假设一家商店预计每小时接待15名顾客。(即每分钟0.25个客户)因此,我的逻辑是,在这一分钟内有25%的机会获得客户 伪代码: generate a random float number 0.0 - 1.0 <= .25 Add customer to queue 生成一个随机浮点数0.0-1.0您可以通过以下方式解决这两个问题,即不必每分钟检查一次,而是每不到一分钟检查一次。例如,如果你只是将你的机会除以60,然后每秒钟检查一

我在生成随机客户到达时遇到代码问题。因此,问题是假设一家商店预计每小时接待15名顾客。(即每分钟0.25个客户)因此,我的逻辑是,在这一分钟内有25%的机会获得客户

伪代码:

generate a random float number 0.0 - 1.0 <= .25
     Add customer to queue

生成一个随机浮点数0.0-1.0您可以通过以下方式解决这两个问题,即不必每分钟检查一次,而是每不到一分钟检查一次。例如,如果你只是将你的机会除以60,然后每秒钟检查一次,那么它会更加准确

对于这样一个问题,要得到100%准确的答案是不可能的,所以试着寻找一个足够好的解决方案


祝你好运

我找到了解决问题的方法,所以只想与大家分享

int ModelArrivalTimeGenerator::generateTime(double rate)
{
    std::random_device rd;
    std::mt19937_64 mt(rd());
    std::uniform_real_distribution<double> distribution(0, 1);

    return floor(-1/rate * log(distribution(mt)));
}
int-ModelArrivalTimeGenerator::generateTime(双倍速率)
{
std::随机_装置rd;
标准:mt19937_64 mt(rd());
标准:均匀实分布(0,1);
返回层(-1/费率*对数(分配(mt));
}
假设您想使用每小时40的到达率运行模拟。传入(40.00/60.00)作为参数。我做了一些测试,发现它在随机到达平均值上相当不错

这是一个代码,你可以用它来检查什么是平均值,如果你运行n次

double lamda = (15.00/60.00);   //(15customer/60min) gets you Arrival Rate per minute

    std::random_device rd;
    std::mt19937_64 mt(rd());
    std::uniform_real_distribution<double> distribution(0, 1);

    int CustomerArrivedAtTime = 0;

    int runThisManyTime = 20;
    int arrivalNum =0; 

    for(int i=0; i<runThisManyTime; i++)
    {
        while(CustomerArrivedAtTime < 60)
        {
            arrivalNum++;
            CustomerArrivedAtTime +=  floor(-1/lamda * log(distribution(mt)));
            cout << "Arrival#" << arrivalNum << " " << CustomerArrivedAtTime << "\n";
        }

        CustomerArrivedAtTime = 0;  // this is complete of first run 60 min is past in sim time so we reset for other run
    }

    cout << "\n\n AVG: " << arrivalNum/runThisManyTime;
double lamda=(15.00/60.00)//(15位顾客/60分钟)获得每分钟的到达率
std::随机_装置rd;
标准:mt19937_64 mt(rd());
标准:均匀实分布(0,1);
int CustomerArrivedAtTime=0;
int runThisManyTime=20;
int-arrivalNum=0;
对于(int i=0;i