项目介绍
本系统是一个基于事件调度法(Event Scheduling Method)的理发店离散事件模拟仿真平台。通过在 MATLAB 环境下构建数学模型,系统能够精确模拟理发店在日常经营中的动态演化过程。该仿真不采用固定步长的计时方式,而是由事件(如顾客到达、理发完成)驱动时间轴向前推进,从而高效地分析理发师的工作负荷、顾客排队情况以及系统的服务瓶颈。
功能特性
- 多概率分布建模:支持泊松分布(指数到达间隔)或均匀分布来模拟顾客到达的随机性,并利用正态分布模拟理发师服务的时长波动。
- 多服务台并发处理:支持配置多位理发师同时工作,系统能够自动协调空闲理发师资源或将顾客引导至排队区。
- 有限缓冲区管理:内置休息区容量限制逻辑。当排队人数超过预设的缓冲区大小时,系统会自动记录流失顾客数,模拟真实的商业损耗。
- 先进先出(FIFO)逻辑:严格遵循排队论中的先到先服务原则,通过动态维护等待队列确保服务的公平性。
- 动态事件链表调度:利用自动排序的事件记录表,实时管理“到达”与“完成”事件的触发顺序。
- 全方位指标统计:自动计算平均等待时间、理发师利用率、平均排队长度、顾客流失率等核心商业指标。
- 数据可视化看板:生成包含统计曲线、分布直方图、资源占用饼图及详细文字报告的综合分析界面。
使用方法
- 打开 MATLAB 软件。
- 将仿真程序的代码文件置于 MATLAB 当前工作目录下。
- 在命令行窗口直接运行仿真主程序。
- 程序将自动执行 480 分钟(模拟 8 小时营业时间)的仿真流程。
- 仿真结束后,系统将自动弹出可视化分析窗口,展示各项运营指标。
系统要求
- 软件环境:MATLAB R2016b 或更高版本。
- 工具箱需求:Statistics and Machine Learning Toolbox(用于生成随机分布数据)。
核心功能与实现逻辑
系统的运行逻辑严格围绕事件调度循环展开,主要包含以下步骤:
1. 初始化阶段
系统设定初始参数(如平均到达间隔 6 分钟、理发师 3 名、缓冲区容量 10 人)。初始化当前时间为零,并生成第一个顾客到达事件存入事件链表。
2. 事件提取与时间推移
系统始终从事件链表中提取发生时间最早的事件。将系统时钟(Current Time)直接跳跃至该事件发生的时间点,实现非连续的时间模拟。
3. 顾客到达事件处理
- 当一个到达事件触发时,系统立即预测并生成下一个顾客的到达时间,确保仿真持续。
- 状态检查:
* 若有理发师空闲:占用一名理发师,根据正态分布生成服务时长,并向事件链表插入一个“服务完成”事件。
* 若理发师全忙但缓冲区未满:顾客进入等待队列,记录其到达时间。
* 若缓冲区已满:增加流失顾客计数,顾客离开系统。
4. 服务完成事件处理
- 当理发师完成服务时,该次服务的各项指标(如在店停留时长)被记录。
- 队列检查:
* 若队列中有顾客:提取队首顾客,计算其等待时间,并为其生成“服务完成”事件。
* 若队列为空:释放理发师资源,将其状态置为空闲。
5. 状态记录与采样
在每个事件发生的时刻,系统都会捕捉当前的排队人数和忙碌理发师数量,形成随时间变化的演化序列,为后续的积分计算提供基础数据。
关键算法与细节分析
- 事件链表排序算法:系统在插入新事件后,利用排序机制确保链表始终按时间升序排列。这保证了仿真逻辑始终按因果顺序执行。
- 时间加权平均计算:
*
理发师利用率:并非简单的比例计算,而是通过对“忙碌人数-时间”曲线进行数值积分(利用复合梯形法则),再除以总服务能力(人数×总时间)得出,能准确反映全天的负荷波峰波谷。
*
平均排队长度:同样采用时间加权积分法,计算排队人数在整个仿真周期内的均值。
* 采用指数分布函数模拟泊松流,反映了顾客到达的不确定性和独立性。
* 采用带截断的正态分布处理服务时长,通过强制设定最小服务时间(1 分钟)避免了数学模型产生负数时长的逻辑错误。
- 统计数据采集:通过维护动态数组,实时追溯每位顾客从进入系统到离开系统的全生命周期数据,从而实现对等待时间和逗留时间的精确统计。
运行结果与可视化描述
仿真完成后,系统会输出包含四个维度的图形化报表:
- 系统状态演化波形图:以阶梯图形式展示排队人数与忙碌理发师数随时间波动的轨迹。
- 逗留时间分布图:通过直方图揭示大部分顾客在店内消耗的总时长区间。
- 利用率饼图:直观展示理发师处于工作状态与空闲状态的比例。
- 指标汇总表:列出完成服务总数、流失人数、最大排队长度等关键绩效指标(KPI)。