两阶段串联排队系统——Python仿真
在数字化制造与智能供应链快速发展的背景下,生产与订单处理系统正从经验驱动走向数据驱动。面对多订单、多工序、多服务台的复杂流程,仅凭人工排程与简单规则已难以兼顾交期、成本与设备利用率。排队论与仿真技术为我们提供了一种理解与优化系统运行机制的有效工具。通过构建串联排队模型、模拟订单流动过程,并结合优化算法探索资源配置方案,企业能够识别瓶颈、预测产能、制定更科学的调度策略。
关键词:串联排队系统、订单处理仿真、生产调度优化、服务台配置、SimPy建模、智能供应链
串联排队系统是一种典型的多阶段服务系统结构,由若干单服务台或多服务台节点按照既定顺序连接而成。顾客或订单必须依次经过各个服务节点,前一阶段的完成即成为后一阶段的输入,因此系统整体呈现出明显的“流程型”或“流水线型”特征。在供应链环境中,这种结构广泛存在于订单确认、库存分配、生产加工、质检包装、物流配送等连续环节之中。
在供应链流水线模式下,每一个节点都可以被抽象为一个服务台,每一道工序对应一个排队子系统。当某一环节处理能力不足或服务时间波动较大时,就会形成瓶颈,导致后续环节出现积压或资源闲置。通过构建串联排队模型,可以分析系统的到达率、服务率、队长分布以及等待时间,从而识别关键瓶颈工序,优化人员配置与设备布局,提高整体吞吐量与订单履行效率。
一、 两阶段串联系统模型
设顾客按照强度函数为 \(\lambda(t),, t>0\) 的非齐次泊松过程到达服务系统。系统由两个按顺序排列的服务阶段组成,分别记为阶段 1 和阶段 2,每个阶段包含一个服务台及其等待队列,顾客必须依次接受两个阶段的服务后才离开系统。系统运行规则如下:
-
到达与阶段 1 服务
顾客到达系统后首先进入阶段 1。
- 若阶段 1 服务台空闲,则顾客立即开始接受服务;
- 若服务台忙碌,则进入等待队列 \(Q_1\) 排队;
- 队列采用先到先服务(FCFS)规则。
-
阶段间转移
顾客在阶段 1 服务完成后立即进入阶段 2。
- 若阶段 2 服务台空闲,则立即接受服务;
- 若服务台忙碌,则进入等待队列 \(Q_2\) 等候。
-
阶段 2 服务与离开
阶段 2 同样按照 FCFS 原则服务。
顾客完成阶段 2 服务后离开系统。 -
空闲状态
若某阶段的服务台及其等待队列均为空,则该阶段处于空闲状态,直至新的顾客到达或上游阶段完成服务。
-
服务时间
设阶段 1 和阶段 2 的服务时间分别为随机变量 \(S_1\) 与 \(S_2\),其分布函数为 \(G_1(\cdot)\) 与 \(G_2(\cdot)\),且相互独立。
该模型属于典型的两阶段串联排队系统(Two-Stage Tandem Queueing System),其排队系统模型结构参看下图。
一般地,假设服务台1和2对一名顾客服务的时间为随机变量且分布为\(G_1,G_2\)。假设 \(T\)为一个固定时间,\(T\)时刻后不再接受顾客进入系统,但对系统中剩余顾客仍进行服务,直到对所有顾客服务完为止。
二、供应链订单排队系统
排队论在供应链订单仿真分析中的应用可以帮助评估和改进供应链的订单处理流程、服务水平和效率。通过建立排队模型和进行仿真分析,可以揭示订单处理过程中的瓶颈和拥堵问题,并提供优化策略。
供应链订单仿真分析中排队论的应用示例:
- 评估订单处理时间:排队论可以用于评估订单在供应链中的处理时间。通过模拟订单的到达率、处理时间和服务能力,可以分析订单处理过程中的等待时间、延误和效率。这有助于确定订单处理的瓶颈环节,优化资源分配和提高订单处理速度。
- 预测订单满足率:排队论可以应用于预测订单满足率。通过模拟订单到达率和处理能力,可以评估不同情况下的订单满足率和交付时间。这有助于制定合理的订单接受和处理策略,以提高供应链的客户满意度和交付准时率。
- 优化订单处理策略:排队论可以帮助优化订单处理策略。通过仿真分析不同的订单处理策略,如先进先出、优先级排序等,可以评估它们对订单处理时间、等待时间和服务水平的影响。这有助于制定最佳的订单处理策略,以提高供应链的效率和客户体验。
- 评估订单处理能力:排队论可以用于评估供应链中的订单处理能力。通过仿真分析不同的订单到达率和处理能力,可以确定供应链在不同负荷条件下的性能和瓶颈。这有助于决策者评估供应链的承载能力,制定资源投入和扩展计划。
- 模拟供应链变化和改进效果:排队论可以用于模拟供应链的变化和改进效果。通过建立基准模型和改进方案模型,可以比较不同方案对订单处理时间、等待时间和服务水平的影响。这有助于决策者评估改进措施的可行性和效果,以做出有根据的决策。
三、两阶段串联排队系统仿真
仿真是在纯数学建模和实际系统的优缺点之间的⼀个折中。相对数学模型来说,仿真不需要⾼深的数学技巧,也不需要作过多的简化和假设,并且在求解复杂系统时,不会⾯对状态和空间爆炸的问题。仿真可以⽤来验证数学模型的正确性,而相比实际系统,仿真的成本要⼩得多,并且容易取得更多的统计信息。这里着重考虑两个等待制服务台的串联排队系统模型。针对输入过程为泊松分布,两个服务台的服务时间都服从指数分布的特殊模型,前人已经根据生灭过程理论得到了队长的平稳概率分布。
供应链订单处理涵盖了从订单生成到交付的全过程,包括订单确认、库存管理、生产调度、物流配送等环节,如下图所示。这个流程能确保订单能够高效、准确地处理,满足客户需求,提升供应链的运作效率和响应能力。通过有效的供应链订单流处理,企业可以减少库存积压、降低运营成本、提升客户满意度。
其中订单确认和订单履行是两个核心的处理环节,订单验证通过后,系统会向客户发送订单确认信息,包括订单号、总价和预计交付时间等,客户需要确认订单信息并进行支付;订单履行涉及到分拣和打包产品以备发货的工作。现某网上商城订单处理的主要流程如下:网上支付成功后的顾客订单列到达的时间间隔服从均值为0.5分钟的负指数分布,订单确认时间服从均值为1分钟的负指数分析;商城采用单一订单分配存货,安排拣货及发货等采用公司软件辅助处理,拣选中心根据实时传送的拣货单进行拣货,订单履行时间平均每单大约4.5分钟。现商城共有工作人员5位,如何安排能使商城处理订单的效率最高?该商城4小时工作时间最多可处理多少订单?
3.1 系统结构(两阶段串联)
在电商订单处理系统中,订单确认与订单履行构成典型的两阶段串联排队结构。订单按照泊松过程到达,平均到达间隔为0.5分钟;随后进入订单确认环节,平均处理时间为1分钟;确认完成后进入拣货与打包的订单履行阶段,平均耗时约4.5分钟。系统共有5名工作人员,需要在两个环节之间进行合理分配,以平衡服务能力并减少排队拥堵。若前后阶段处理能力不匹配,容易产生瓶颈,导致订单积压和客户等待时间增加。因此,本研究通过建立串联排队仿真模型,对不同人员配置方案进行对比分析,以寻找在4小时工作时间内能够实现最大订单处理量、最小平均等待时间和较高资源利用率的最优分配策略,从而为供应链运营决策提供量化依据。
订单流程: 👉 订单到达 → 订单确认 → 订单履行(拣货+打包) → 发货
| 参数类别 | 数学表示 | 数值说明 |
|---|---|---|
| 到达间隔分布 | Exp(0.5 分钟) | λ = 2 单 / 分钟 |
| 确认服务时间 | Exp(1 分钟) | μ₁ = 1 单 / 分钟 |
| 履行服务时间 | Exp(4.5 分钟) | μ₂ = 1 / 4.5 单 / 分钟 |
| 总员工人数 | — | 5 人 |
| 工作时间 | — | 240 分钟(4 小时) |
3.2 仿真思路
本仿真采用枚举法对5名员工在两阶段串联系统中的不同分配方案进行系统比较。具体而言,将员工在“订单确认”和“订单履行”两个环节之间进行四种组合分配:1-4、2-3、3-2、4-1,即分别设置确认人数与履行人数的不同配置。在每一种人员结构下,利用 SimPy 构建离散事件仿真模型,模拟4小时工作时间内订单的到达、排队与服务全过程。通过对每个方案运行多次仿真,统计系统关键绩效指标,包括完成订单数(衡量产能)、平均等待时间(衡量客户体验)、平均系统时间(反映流程效率)以及吞吐率(单位时间处理能力)。通过横向对比不同方案的运行结果,识别系统瓶颈环节,进而确定在给定资源约束下的最优人员配置方案。
| 配置类型 | 方案1 | 方案2 | 方案3 | 方案4 |
|---|---|---|---|---|
| 确认人数 | 1 | 2 | 3 | 4 |
| 履行人数 | 4 | 3 | 2 | 1 |
3.3 完整 Python 程序
import simpy
import random
import pandas as pd
import matplotlib.pyplot as plt
# ===============================
# 中文显示支持(新增2行)
# ===============================
plt.rcParams['font.sans-serif'] = ['SimHei'] # 中文字体
plt.rcParams['axes.unicode_minus'] = False # 负号正常显示
# ===============================
# 参数设置
# ===============================
SIM_TIME = 240
ARRIVAL_RATE = 2 # lambda
SERVICE_RATE_1 = 1 # 确认
SERVICE_RATE_2 = 1/4.5 # 履行
RANDOM_SEED = 42
# ===============================
# 顾客流程
# ===============================
def customer(env, system, stats):
arrival = env.now
# 第一阶段
with system.server1.request() as req:
start_wait1 = env.now
yield req
wait1 = env.now - start_wait1
yield env.timeout(random.expovariate(system.mu1))
# 第二阶段
with system.server2.request() as req:
start_wait2 = env.now
yield req
wait2 = env.now - start_wait2
yield env.timeout(random.expovariate(system.mu2))
depart = env.now
stats.append({
"wait1": wait1,
"wait2": wait2,
"system": depart - arrival
})
# ===============================
# 系统类
# ===============================
class QueueSystem:
def __init__(self, env, n1, n2, mu1, mu2):
self.server1 = simpy.Resource(env, n1)
self.server2 = simpy.Resource(env, n2)
self.mu1 = mu1
self.mu2 = mu2
# ===============================
# 到达过程
# ===============================
def arrival(env, system, stats):
while True:
yield env.timeout(random.expovariate(ARRIVAL_RATE))
env.process(customer(env, system, stats))
# ===============================
# 单次仿真
# ===============================
def simulate(n1, n2):
random.seed(RANDOM_SEED)
env = simpy.Environment()
stats = []
system = QueueSystem(env, n1, n2, SERVICE_RATE_1, SERVICE_RATE_2)
env.process(arrival(env, system, stats))
env.run(until=SIM_TIME)
if len(stats)==0:
return None
df = pd.DataFrame(stats)
return {
"确认人数": n1,
"履行人数": n2,
"完成订单": len(df),
"平均等待": df["wait1"].mean() + df["wait2"].mean(),
"平均系统时间": df["system"].mean()
}
# ===============================
# 枚举所有方案
# ===============================
results = []
for n1 in range(1,5):
n2 = 5 - n1
results.append(simulate(n1,n2))
df = pd.DataFrame(results)
print(df)
# ===============================
# 可视化
# ===============================
plt.figure()
plt.bar(df["确认人数"].astype(str)+"-"+df["履行人数"].astype(str),
df["完成订单"])
plt.title("不同人员分配的订单完成量")
plt.xlabel("确认-履行 人数")
plt.ylabel("完成订单数")
plt.show()
plt.figure()
plt.bar(df["确认人数"].astype(str)+"-"+df["履行人数"].astype(str),
df["平均系统时间"])
plt.title("不同方案的平均系统时间")
plt.xlabel("确认-履行 人数")
plt.ylabel("时间")
plt.show()
3.4 结果解析
确认人数 履行人数 完成订单 平均等待 平均系统时间
0 1 4 207 65.216783 70.453171
1 2 3 130 90.714466 96.943393
2 3 2 108 77.321830 82.670769
3 4 1 52 86.574642 91.674818
根据仿真结果,对不同人员分配方案进行了系统比较,得到如下结论:在 5 名员工条件下,将 1 人安排在订单确认、4 人安排在订单履行 时系统表现最佳,共完成 207 单,明显高于其他方案(2-3 为 130 单,3-2 为 108 单,4-1 仅 52 单)。同时,该方案的 平均等待时间为 65.22 分钟、平均系统时间为 70.45 分钟,也均为所有配置中最优或接近最优水平,说明系统瓶颈主要位于订单履行阶段,增加履行人员能够显著提高整体处理能力。总之,5个工作人员最优分配为第一站1人、第二站4人工作效率最高。通过模拟排队仿真解决了订单子系统的工作分配问题,当然所有数据都是模拟的,其精度还要测试和调整,不过已可管中窥豹了。
| 订单完成量 | 平均系统时间 |
|---|---|
![]() |
![]() |
总结
在仿真过程中,我们基于 SimPy 构建两阶段串联排队模型,设定仿真时间 240 分钟、到达率 λ=2、确认服务率 μ₁=1、履行服务时间均值 4.5 分钟,并跟踪记录每个订单的到达时间、服务开始与结束时间、等待时间以及系统停留时间,同时统计系统顾客数量的动态变化。通过多方案对比分析发现,不同阶段服务能力不匹配会导致订单积压和等待时间增加,而合理配置资源可以显著提升吞吐率和交付效率。
综上,本次仿真验证了串联排队模型在供应链订单处理优化中的有效性,为企业在有限人力条件下进行科学排班与资源配置提供了量化依据,也展示了利用数据驱动方法识别瓶颈、提升系统效率的实践价值。



浙公网安备 33010602011771号