name: queuing-analyzer description: 排队系统分析技能,用于对等待线系统进行解析评估。 allowed-tools: Bash(*) Read Write Edit Glob Grep WebFetch metadata: author: babysitter-sdk version: “1.0.0” category: simulation backlog-id: SK-IE-007
排队分析器
您是 排队分析器 - 一个使用排队论对等待线系统进行解析评估的专门技能。
概述
此技能支持AI驱动的排队分析,包括:
- M/M/1、M/M/c、M/G/1 模型计算
- 稳态性能指标计算(Lq, Wq, L, W)
- 服务器利用率分析
- 概率计算(等待时间 > 阈值)
- 呼叫中心人员配置的埃尔朗C公式
- 有限总体模型
- 排队网络分析
前提条件
- Python 3.8+ 及 scipy, numpy
- 理解排队论符号
能力
1. M/M/1 队列分析
def mm1_queue(arrival_rate, service_rate):
"""
M/M/1 队列性能指标
- 泊松到达,指数服务,单服务器
"""
lambda_ = arrival_rate
mu = service_rate
# 利用率
rho = lambda_ / mu
if rho >= 1:
return {"error": "系统不稳定 (rho >= 1)"}
# 性能指标
L = rho / (1 - rho) # 系统中期望数量
Lq = rho**2 / (1 - rho) # 队列中期望数量
W = 1 / (mu - lambda_) # 系统中期望时间
Wq = rho / (mu - lambda_) # 队列中期望时间
# 概率
P0 = 1 - rho # 系统空闲概率
Pn = lambda n: (1 - rho) * rho**n # 系统中有n个的概率
return {
"model": "M/M/1",
"arrival_rate": lambda_,
"service_rate": mu,
"utilization": rho,
"L": L,
"Lq": Lq,
"W": W,
"Wq": Wq,
"P0": P0,
"P_wait": rho,
"stable": rho < 1
}
2. M/M/c 队列分析
from scipy.special import factorial
import numpy as np
def mmc_queue(arrival_rate, service_rate, num_servers):
"""
M/M/c 队列性能指标
- 多个并行服务器
"""
lambda_ = arrival_rate
mu = service_rate
c = num_servers
rho = lambda_ / (c * mu)
if rho >= 1:
return {"error": "系统不稳定 (rho >= 1)"}
# 计算 P0
sum_term = sum((c * rho)**n / factorial(n) for n in range(c))
last_term = (c * rho)**c / (factorial(c) * (1 - rho))
P0 = 1 / (sum_term + last_term)
# 埃尔朗C公式(等待概率)
C = ((c * rho)**c / factorial(c)) * (1 / (1 - rho)) * P0
# 性能指标
Lq = C * rho / (1 - rho)
L = Lq + lambda_ / mu
Wq = Lq / lambda_
W = Wq + 1 / mu
return {
"model": "M/M/c",
"arrival_rate": lambda_,
"service_rate": mu,
"servers": c,
"utilization": rho,
"L": L,
"Lq": Lq,
"W": W,
"Wq": Wq,
"P0": P0,
"P_wait": C,
"stable": rho < 1
}
3. M/G/1 队列(Pollaczek-Khinchin)
def mg1_queue(arrival_rate, service_mean, service_variance):
"""
使用Pollaczek-Khinchin公式的M/G/1队列
- 一般服务时间分布
"""
lambda_ = arrival_rate
Es = service_mean
Var_s = service_variance
# 服务时间的二阶矩
Es2 = Var_s + Es**2
rho = lambda_ * Es
if rho >= 1:
return {"error": "系统不稳定 (rho >= 1)"}
# Pollaczek-Khinchin公式
Lq = (lambda_**2 * Es2) / (2 * (1 - rho))
L = Lq + rho
Wq = Lq / lambda_
W = Wq + Es
return {
"model": "M/G/1",
"arrival_rate": lambda_,
"service_mean": Es,
"service_variance": Var_s,
"utilization": rho,
"L": L,
"Lq": Lq,
"W": W,
"Wq": Wq,
"stable": rho < 1
}
4. 呼叫中心人员配置的埃尔朗C公式
def erlang_c_staffing(arrival_rate, service_rate, target_service_level,
target_wait_time):
"""
确定达到服务水平目标所需的最少服务器数量
"""
lambda_ = arrival_rate
mu = service_rate
# 稳定所需的最少服务器
min_servers = int(np.ceil(lambda_ / mu))
for c in range(min_servers, min_servers + 100):
result = mmc_queue(lambda_, mu, c)
if result.get('error'):
continue
# 服务水平:P(等待 <= 目标)
# SL = 1 - C * exp(-(c*mu - lambda) * target_wait)
C = result['P_wait']
exp_term = np.exp(-(c * mu - lambda_) * target_wait_time)
service_level = 1 - C * exp_term
if service_level >= target_service_level:
return {
"recommended_servers": c,
"achieved_service_level": service_level,
"target_service_level": target_service_level,
"P_wait": C,
"utilization": result['utilization'],
"avg_wait": result['Wq']
}
return {"error": "无法达到目标服务水平"}
5. 有限总体(M/M/c/K/K)
def finite_population_queue(arrival_rate, service_rate, num_servers,
population_size):
"""
有限总体队列(机器维修模型)
"""
lambda_ = arrival_rate # 每个客户的到达率
mu = service_rate
c = num_servers
K = population_size
# 使用递归的状态概率
P = np.zeros(K + 1)
P[0] = 1 # 临时值
for n in range(1, K + 1):
if n <= c:
P[n] = P[n-1] * (K - n + 1) * lambda_ / (n * mu)
else:
P[n] = P[n-1] * (K - n + 1) * lambda_ / (c * mu)
# 归一化
P = P / P.sum()
# 性能指标
L = sum(n * P[n] for n in range(K + 1))
Lq = sum((n - c) * P[n] for n in range(c + 1, K + 1))
# 有效到达率
lambda_eff = sum((K - n) * lambda_ * P[n] for n in range(K))
W = L / lambda_eff if lambda_eff > 0 else 0
Wq = Lq / lambda_eff if lambda_eff > 0 else 0
return {
"model": "M/M/c/K/K",
"servers": c,
"population": K,
"L": L,
"Lq": Lq,
"W": W,
"Wq": Wq,
"effective_arrival_rate": lambda_eff,
"state_probabilities": P.tolist()
}
6. 排队网络(Jackson网络)
def jackson_network(arrival_rates, service_rates, routing_matrix):
"""
开放Jackson网络分析
arrival_rates: 每个节点的外部到达率
service_rates: 每个节点的服务率
routing_matrix: 从i路由到j的概率
"""
n_nodes = len(service_rates)
# 求解有效到达率
# lambda_i = gamma_i + sum_j(lambda_j * r_ji)
R = np.array(routing_matrix)
gamma = np.array(arrival_rates)
# lambda = gamma + lambda * R => lambda = gamma * (I - R)^-1
I = np.eye(n_nodes)
lambdas = np.linalg.solve((I - R.T), gamma)
# 将每个队列分析为M/M/1
results = []
for i in range(n_nodes):
result = mm1_queue(lambdas[i], service_rates[i])
result['node'] = i
result['effective_arrival_rate'] = lambdas[i]
results.append(result)
# 网络总计
L_total = sum(r['L'] for r in results if 'L' in r)
return {
"model": "Jackson_Network",
"effective_arrival_rates": lambdas.tolist(),
"node_results": results,
"total_L": L_total
}
流程集成
此技能与以下流程集成:
queuing-system-analysis.jscapacity-planning-analysis.jsdiscrete-event-simulation-modeling.js
输出格式
{
"model": "M/M/c",
"parameters": {
"arrival_rate": 10,
"service_rate": 4,
"servers": 3
},
"performance_measures": {
"utilization": 0.833,
"L": 6.01,
"Lq": 3.51,
"W": 0.601,
"Wq": 0.351
},
"probabilities": {
"P0": 0.045,
"P_wait": 0.702
},
"service_level": {
"P_wait_less_5min": 0.82
},
"recommendations": [
"高利用率 - 考虑增加服务器"
]
}
工具/库
| 库 | 描述 | 使用场景 |
|---|---|---|
| scipy | 科学计算 | 核心计算 |
| queueing | Python包 | 队列分析 |
| queuecomputer ® | R包 | 高级模型 |
| Custom | 手写代码 | 特定需求 |
最佳实践
- 验证稳定性 - 在计算前检查 rho < 1
- 验证假设 - 测试泊松到达
- 考虑有限总体 - 当适用时
- 与仿真比较 - 对于复杂系统
- 敏感性分析 - 测试参数变化
- 记录符号 - 使用Kendall符号
约束
- 明确报告所有假设
- 标记不稳定系统
- 记录解析模型的局限性
- 对于复杂情况推荐仿真