### SimEvents 中 M/M/1 排队模型的 MATLAB 实现
#### 创建 M/M/1 排队系统仿真环境
为了创建一个基于 Simulink 和 SimEvents 的 M/M/1 排队系统,在MATLAB环境中需先启动Simulink并新建空白模型文件。随后通过添加必要的模块来构建该排队系统的逻辑结构。
```matlab
% 打开新的Simulink模型
new_system('MM1QueueModel');
open_system('MM1QueueModel');
```
#### 添加实体生成器 (Entity Generator)
此组件用于模拟客户按照泊松过程到达的情况,设置其属性使得可以调整平均到达率λ。
```matlab
add_block('simulink/SimEvents/User-Defined Blocks/Entity Generator',...
'MM1QueueModel/Arrival','Position',[70,80,90,120]);
set_param('MM1QueueModel/Arrival', ...
'EventAction','disp("Customer arrives")',...
'InterGenerationTime','exprnd(1/lambda)',...
'InitialDelay','0',...
'StopWhenNoOutputs','off')
```
#### 设定服务站 (Server Block)
配置服务器以处理到来的任务,这里假设服务时间为指数分布,均值为μ^-1秒。
```matlab
add_block('simulink/SimEvents/User-Defined Blocks/Single Server',...
'MM1QueueModel/ServiceStation','Position',[200,80,230,120]);
set_param('MM1QueueModel/ServiceStation',...
'ServiceTime','exprnd(1/mu)')
```
#### 连接路径与终止节点
连接上述两个主要部分,并增加终点以便收集离开系统的数据记录。
```matlab
add_line('MM1QueueModel',['Arrival/:' 'ServiceStation/in']);
add_block('simulink/Commonly Used Blocks/Terminator',...
'MM1QueueModel/Departure','Position',[330,80,360,120]);
add_line('MM1QueueModel',['ServiceStation/out' ': Departure/in']);
```
#### 数据采集与性能评估
引入探针(Probe)监测队列长度变化;同时利用统计工具箱中的函数计算所需指标如平均等待时间和平均队长等。
```matlab
add_block('simulink/SimEvents/User-Defined Blocks/Queue Length Probe',...
'MM1QueueModel/QueueLengthMonitor','Position',[140,50,170,90]);
% 设置参数 lambda 和 mu 值
lambda = 0.8; % 到达速率
mu = 1.0 ; % 服务速率
% 计算理论上的期望值作为比较基准
expected_queue_length_theory = rho / (1-rho);
rho = lambda / mu;
average_wait_time_theory = expected_queue_length_theory * mean_service_time;
% 获取实际测量的数据
queue_lengths = get_param(gcb,'OutputSignals');
% 对比实测结果同理论预测之间的差异
actual_average_queue_length = mean(queue_lengths);
mean_service_time = 1/mu;
actual_avg_waiting_time = actual_average_queue_length*mean_service_time;
```
以上代码片段展示了如何在MATLAB中使用SimEvents库建立简单的M/M/1排队模型[^1]。这不仅有助于理解此类随机服务系统的动态特性,也为进一步研究更复杂的多级或多类别的排队网络提供了基础框架。