随机队列模拟器客户到达时间
Random Queue Simulator Customer Arrival Time
我在生成随机客户到达时遇到代码问题。因此,问题是假设一家商店每小时能接待15名顾客。(这是每分钟0.25个顾客)所以我的逻辑是,在那一分钟内有25%的机会得到顾客。
伪码:
generate a random float number 0.0 - 1.0 <= .25
Add customer to queue
我在这里的第一个问题是,假设一家商店预计每小时有60名顾客,那么(每分钟1名顾客)在0.0-1.0以上的代码中总是<=到1,因此60%的客户将被添加到队列中。
第二个问题是,假设商店预计每小时有15个客户,那么他们有可能在那一分钟得到一个或多个客户。我如何在我的代码中实现这一点。
在过去的两天里,我一直在研究队列理论(泊松,指数分布),但在找到解决方案方面并没有取得进展。
您可以解决这两个问题,而不是每分钟检查一次,而是在不到一分钟的时间内检查一次。例如,如果你把你的机会除以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)));
}
假设您想使用每小时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 << "nn AVG: " << arrivalNum/runThisManyTime;
相关文章:
- C++为构建时间获取QDateTime的可靠方法
- 从持续时间构造std::chrono::system_clock::time_point
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- while循环中while循环的时间复杂度是多少
- 使用简单类型列表实现的指数编译时间.为什么
- "unknown ca"自生成的 CA、证书和客户端/服务器
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- Kafka C++客户端需要很长时间才能收到消息
- gRPC C++我设置截止时间时客户端阻止
- 客户订单的最短平均等待时间
- C 的SNTP客户端的时间/日期
- 为什么我在一段时间后不断出现MySQL客户端内存不足错误.
- 自定义NTP客户端获取错误的时间戳
- 随机队列模拟器客户到达时间
- 如果我没有收到来自客户端的消息,如何每 20 秒打印一次日期时间
- 将服务器UTC时间转换为客户端本地时间
- TCP服务器为每个客户端设置超时时间
- 用AJAX请求从客户机终止用c++编写的长时间运行的CGI脚本
- 如何使用c++和PHP在客户端和云服务器之间正确存储时间戳和偏移量
- 服务器日期时间vs客户端日期时间