基于马尔可夫过程的单服务排队系统(M/M/1)仿真分析程序
项目介绍
本项目是一个基于 MATLAB 开发的离散事件仿真工具,专门用于模拟和分析 M/M/1 排队系统。系统通过马尔可夫过程建模,模拟顾客到达符合泊松过程、服务时间符合指数分布的典型随机服务场景。该程序能够动态模拟顾客入队、排队等待及完成服务出队的完整生命周期,并以此计算系统的关键性能指标。
功能特性
- 随机序列生成:利用概率分布函数生成符合特定分布的顾客到达间隔和服务持续时间,确保仿真环境的随机性与真实性。
- 事件驱动仿真:程序核心采用基于事件的逻辑,精确计算每一位顾客的到达时刻、服务开始时刻、服务结束时刻以及在系统中的停留时间。
- 多维统计分析:系统能够自动计算并导出系统利用率、受时间加权影响的平均队列长度,以及平均等待时间等关键性能数据。
- 可视化展示:自动生成反映系统状态波动的动态阶梯图,以及顾客等待时间的概率密度分布图,并将其与马尔可夫链的理论值进行对比。
- 详细数据日志:控制台输出完整的仿真摘要以及系统状态变更的详细时间戳记录,便于精确追踪状态转移过程。
使用方法
- 环境准备:将仿真脚本导入 MATLAB 环境。
- 参数配置:根据实验需求,在程序脚本开头修改 lambda(到达率)、mu(服务率)以及 num_customers(仿真总人数)的值。
- 执行程序:直接运行仿真脚本。
- 结果查看:
* 在命令行窗口查看系统平均利用率、停留时间、队列长度等统计指标及详细日志。
* 查看生成的图形窗口,观察系统人数随时间的起伏波动及等待时间分布。
系统要求
- MATLAB R2016b 或更高版本。
- 需具备 Statistics and Machine Learning Toolbox(用于调用指数分布随机数生成函数)。
实现逻辑与算法分析
1. 随机变量采样逻辑
程序使用指数分布函数(参数为 1/lambda 和 1/mu)预先生成所有顾客的到达时间间隔和服务时间。通过对间隔时间序列进行累加(Cumulative Sum),精确确定每一位顾客进入系统的绝对时间轴。
2. 核心仿真状态引擎
系统遍历每一位顾客,采用逻辑判断来确定服务开始时间:
- 若顾客到达时系统为空或前一顾客已离开,则立即开始服务。
- 若顾客到达时前一顾客尚未完成服务,则需在队列中等待,服务开始时刻被设定为前一顾客的离开时刻。
通过这种方式,程序能够计算出每一位顾客的离开时刻(服务开始时刻加上其特定的服务持续时间)。
3. 时间轴事件重构
为了追踪系统内的实时人数,程序将所有的“到达事件”与“离开事件”合并到一个统一的时间轴记录中。
- 到达事件标记为 +1(系统状态加 1)。
- 离开事件标记为 -1(系统状态减 1)。
通过对按时间排序后的所有事件进行累加求和,即可得到任意时刻系统内(包括正在接受服务的和在队列中等待的)总人数。
4. 性能指标计算算法
- 系统利用率:通过所有顾客服务时间总和与总仿真时间的比值来获得实际利用率。
- 时间加权平均队列长度:这并非简单的离散平均值,而是采用积分思想,计算每个状态(系统人数)持续的时间跨度,然后通过人数乘以持续时间的总和除以总仿真时间。
- 平均等待时间:通过服务开始时间与到达时刻的差值,计算所有顾客的算术平均值。
5. 理论验证与可视化逻辑
程序不仅绘制了实际的队列长度变化阶梯图,还在等待时间分布图中通过 M/M/1 理论概率分布方程绘制了参考曲线。当到达率小于服务率时,程序展示了等待时间分布趋近于理论指数衰减的特性,从而验证仿真的准确性。