排队论单服务台定长服务时间排队模型 C++代码
时间: 2024-05-04 19:21:43 浏览: 15
以下是排队论单服务台定长服务时间排队模型的C++代码实现:
```c++
#include <iostream>
#include <queue>
using namespace std;
int main() {
// 输入参数
int n, m;
double lambda, mu;
cout << "请输入顾客到达率lambda:";
cin >> lambda;
cout << "请输入服务率mu:";
cin >> mu;
cout << "请输入系统容量n:";
cin >> n;
cout << "请输入队列容量m:";
cin >> m;
// 计算参数
double rho = lambda / mu;
double p0 = 1.0, pn = 0.0;
for (int i = 1; i <= n; i++) {
p0 += pow(rho, i) / factorial(i);
}
p0 += pow(rho, n + 1) / (factorial(n) * (1 - rho / (n + 1)));
for (int i = 1; i <= n; i++) {
pn += pow(rho, i) / factorial(i);
}
pn += pow(rho, n + 1) / (factorial(n) * (1 - rho / (n + 1)));
double Lq = pow(rho, n + 1) * rho / (factorial(n) * pow(1 - rho / (n + 1), 2));
double Ls = Lq + lambda / mu;
double Wq = Lq / lambda;
double Ws = Wq + 1 / mu;
double p[m + 1] = { 0.0 };
for (int i = 0; i <= n; i++) {
p[i] = pow(rho, i) / factorial(i) * p0;
}
for (int i = n + 1; i <= m; i++) {
p[i] = pow(rho, i) / (factorial(n) * pow(n, i - n)) * p0;
}
// 输出结果
cout << "rho = " << rho << endl;
cout << "p0 = " << p0 << endl;
cout << "Lq = " << Lq << endl;
cout << "Ls = " << Ls << endl;
cout << "Wq = " << Wq << endl;
cout << "Ws = " << Ws << endl;
cout << "概率分布:" << endl;
for (int i = 0; i <= m; i++) {
cout << "p[" << i << "] = " << p[i] << endl;
}
// 模拟队列系统
int total = 1000000;
int arrived = 0, served = 0, rejected = 0;
queue<double> q;
for (int i = 0; i < total; i++) {
// 顾客到达
if ((double)rand() / RAND_MAX < lambda / 60) {
arrived++;
if (q.size() < m) {
q.push((double)rand() / RAND_MAX);
} else {
rejected++;
}
}
// 服务结束
if (!q.empty()) {
if ((double)rand() / RAND_MAX < mu / 60) {
served++;
q.pop();
}
}
}
// 输出模拟结果
cout << "模拟结果:" << endl;
cout << "到达顾客数:" << arrived << endl;
cout << "服务顾客数:" << served << endl;
cout << "拒绝顾客数:" << rejected << endl;
cout << "队列长度期望:" << q.size() << endl;
cout << "等待时间期望:" << (arrived - served - rejected == 0 ? 0 : (double)q.size() / (arrived - served - rejected) * 60) << "分钟" << endl;
return 0;
}
```
其中,`factorial` 函数用于计算阶乘,模拟部分使用了标准库中的队列和随机数生成器。