贝博恩创新科技网

MATLAB SimEvents如何快速入门?

MATLAB SimEvents 完整入门教程

什么是 SimEvents?

SimEvents 是 MATLAB Simulink 中的一个事件驱动仿真工具箱,与 Simulink 主要基于时间步长(fixed-stepvariable-step)的连续或离散时间仿真不同,SimEvents 专注于对异步事件进行建模和仿真。

MATLAB SimEvents如何快速入门?-图1
(图片来源网络,侵删)

核心思想:

  • 事件驱动: 系统的状态变化是由特定事件(如“一个零件到达”、“一辆公交车进站”)触发的,而不是由时间的流逝触发。
  • 离散事件: 系统的状态在离散的时间点上发生改变,状态在事件之间保持不变。

SimEvents 能用来做什么? SimEvents 非常适合对以下系统进行建模和分析:

  • 排队系统: 银行窗口、呼叫中心、网络服务器、生产线。
  • 物流与运输: 仓库管理、港口装卸、公共交通系统。
  • 计算机与网络: 数据包路由、计算机网络协议、计算机系统性能分析。
  • 制造系统: 装配线、自动化设备调度。
  • 医疗系统: 急诊室病人流动、手术室调度。

核心概念

在开始建模之前,必须理解 SimEvents 的几个核心概念:

  1. 实体

    MATLAB SimEvents如何快速入门?-图2
    (图片来源网络,侵删)
    • 定义: 系统中流动的“对象”或“事物”,顾客、零件、数据包、公交车。
    • 特点: 实体可以拥有属性,这些属性是附加在实体上的数据,可以是数值、字符串等,一个零件实体可以有 ID类型加工时间 等属性,属性在仿真过程中可以被读取、修改和传递。
  2. 服务器

    • 定义: 对实体执行某种操作的“资源”,银行柜员、机器、处理器、路由器。
    • 特点: 服务器在同一时间只能处理一个实体(除非配置为多服务器),当服务器忙时,到达的实体需要排队等待。
  3. 队列

    • 定义: 存储等待服务的实体的“缓冲区”或“等候区”。
    • 特点: 队列有其容量,即最多能存放多少实体,队列可以有不同的排队规则,最常见的是 FIFO (First-In, First-Out),即先进先出。
  4. 事件

    • 定义: 驱动仿真进程的“瞬间发生的事情”。
    • 常见事件类型:
      • 实体生成事件: 创建一个新实体。
      • 实体到达事件: 实体到达一个队列或服务器。
      • 实体服务开始事件: 服务器开始为一个实体服务。
      • 实体服务结束事件: 服务器完成对一个实体的服务。
    • 仿真时钟: SimEvents 内部维护一个事件列表,并按时间顺序执行这些事件,仿真时钟会直接跳转到下一个事件的发生时间,而不是按固定步长推进。
  5. 路径

    MATLAB SimEvents如何快速入门?-图3
    (图片来源网络,侵删)
    • 定义: 实体在系统中流动的“路线”,实体在离开一个模块后,会通过路径连接到下一个模块。

SimEvents 界面与常用模块

SimEvents 模块库位于 Simulink 库浏览器的 Simulink / Discrete-Event Library 路径下。

最核心、最常用的模块:

模块名称 功能描述 类比
Signal Generator 实体生成器,按照设定的间隔(时间或基于概率)生成实体。 顾客到达银行门口
Entity Storage 实体存储/队列,存储等待的实体,可以设置容量和排队规则。 银行的等候区
Server 服务器,对实体进行“服务”,服务时间可以是固定的、随机的或基于实体属性的。 银行的柜员
Entity Departure 实体离开/信宿,作为实体流动路径的终点,表示实体离开系统。 顾客办完业务离开银行
Scope 示波器,用于查看信号(如队列长度、服务器利用率)随时间变化的图形。 监控银行等候区的人数变化
Display 显示,在仿真运行时直接在模块上显示数值(如当前队列长度)。 实时显示等候人数
Statistics Collector 统计收集器,收集实体的属性数据,用于后续分析(如平均等待时间)。 记录每位顾客的等待时间

动手实践:一个简单的银行排队系统模型

我们将构建一个最经典的模型:单队列单服务器系统。

目标: 模拟顾客到达银行、排队、接受服务并离开的全过程,并统计平均等待时间和服务器的利用率。

步骤 1:创建模型并打开库

  1. 打开 MATLAB,在命令窗口输入 simulink 并回车,新建一个模型。
  2. 在 Simulink 库浏览器中,找到 Simulink / Discrete-Event Library

步骤 2:拖入核心模块 从库中将以下模块拖拽到模型中:

  • Signal Generator (实体生成器)
  • Entity Storage (队列)
  • Server (服务器)
  • Entity Departure (实体离开)
  • Scope (示波器)
  • Display (显示)

步骤 3:连接模块 按照实体流动的顺序,用信号线连接这些模块: Signal Generator -> Entity Storage -> Server -> Entity Departure

步骤 4:配置模块参数

  1. 配置 Signal Generator (实体生成器)

    • 双击 Signal Generator 模块。
    • Time source: 选择 Interarrival time (到达间隔时间),表示实体生成的时间间隔。
    • Interarrival time data: 设置为 3 (表示每3秒生成一个顾客),也可以设置为 exprnd(3) 来模拟泊松到达过程(指数分布间隔)。
    • Entity name: 可以设置为 'Customer'
    • Entity type: 保持默认或设置为 1
  2. 配置 Entity Storage (队列)

    • 双击 Entity Storage
    • Capacity: 设置为 10 (表示最多等候10人)。
    • Queue discipline: 选择 FIFO (先进先出)。
    • Output signal: 勾选 Queue length (队列长度),这样我们就可以用示波器观察队列变化。
  3. 配置 Server (服务器)

    • 双击 Server
    • Service time data: 设置为 2 (表示每个顾客需要2秒的服务时间),也可以设置为 exprnd(2) 来模拟随机服务时间。
    • Number of servers: 保持 1 (单服务器)。
    • Output signal: 勾选 Utilization (服务器利用率) 和 Number of entities in service (正在服务的实体数)。
  4. 配置 Entity Departure (实体离开)

    • 双击 Entity Departure
    • Record data: 勾选 Time in system (在系统中的总时间),这个数据对我们分析至关重要。

步骤 5:连接信号到示波器和显示

  • Entity Storageq 端口(Queue length)拖出一条线,连接到 Scope 的一个输入端口。
  • Serveru 端口(Utilization)拖出一条线,连接到 Scope 的另一个输入端口。
  • Servern 端口(Number of entities in service)拖出一条线,连接到 Display 模块。
  • Entity Departuret 端口(Time in system)拖出一条线,连接到另一个 Display 模块,用于显示平均在系统时间。

步骤 6:运行仿真

  1. 设置仿真时间,在模型窗口顶部,将 Stop time 设置为 100 (仿真运行100秒)。
  2. 点击工具栏的 Run 按钮。

步骤 7:查看结果

  1. 双击 Scope:你会看到两条曲线,一条是队列长度随时间的变化,另一条是服务器利用率(0或1)随时间的变化。
  2. 查看 Display:一个显示器会显示 Number of entities in service (0或1),另一个显示器会显示 Average time in system (顾客在系统中的平均时间)。

模型截图示例:


高级主题

  1. 实体属性

    • Signal Generator 中,可以创建实体属性,添加一个 priority 属性。
    • Entity StorageQueue discipline 中,可以选择 Highest attribute value firstLowest attribute value first,实现优先级队列。
  2. 基于条件的事件

    • 使用 Decision 模块,当一个实体到达时,可以根据其属性或系统状态(如队列长度)来决定其下一步路径,VIP顾客直接进入服务,普通顾客进入排队。
  3. 资源

    • ResourceResource Acquirer / Resource Releaser 模块用于管理更复杂的共享资源,一个系统有3名医生,病人需要“获取”一个医生资源才能看病,看完后“释放”该资源。
  4. 数据导出与分析

    • Statistics Collector 模块可以收集实体属性(如等待时间、服务时间)到 MATLAB 工作区。
    • 仿真结束后,可以使用 MATLAB 命令进行更深入的分析,如计算标准差、绘制直方图等。
    • simout 模块可以将整个仿真数据导出到工作区。

学习资源推荐

  1. 官方文档(最重要!)

    • MathWorks 官网有最权威、最全面的文档和示例。
    • 入口: 在 MATLAB 命令窗口输入 doc simevents 或访问 SimEvents Documentation
    • 推荐查看: Getting Started (入门指南) 和 Examples (示例库)。
  2. 视频教程

    • MathWorks 官方 YouTube 频道 搜索 "SimEvents Tutorial",有很多入门和进阶的视频。
    • Bilibili 等视频网站搜索 "MATLAB SimEvents",也有许多国内用户分享的教程。
  3. 书籍

    《Discrete-Event System Simulation》 by Jerry Banks, John S. Carson II 等,这是离散事件仿真的经典教材,理论扎实,虽然不专门讲 SimEvents,但其所有理论都适用于 SimEvents 建模。

希望这份教程能帮助你顺利入门 SimEvents!多动手实践,从简单模型开始,逐步尝试更复杂的系统,你会很快掌握它的强大功能。

分享:
扫描分享到社交APP
上一篇
下一篇