主要内容

模型基础排队系统

这个例子展示了如何在一个离散事件模拟中使用实体队列实体服务器块。

实体队列块存储实体的时间长度不能提前确定。队列的一个日常例子是人们排队等待商店注册。购物者无法预先确定他们必须等待购买的时间长度。您可以使用实体队列在不同的应用中,比如等待进入跑道的飞机或等待传输的消息。的实体队列块包含存储容量、实体排序策略和实体覆盖策略。根据这些参数,块将根据下游块是否接受新实体来尝试输出实体。

实体服务器块存储实体一段时间,称为服务时间,然后根据下游区块是否接受新实体,尝试发送实体。在服务期间,该块为服务它所存储的实体。服务器的一个日常示例是一个人(如银行出纳员或零售出纳员),您将与他执行预期持续时间的事务。

这个例子展示了基本的排队模型,展示了如何:

  • 模型FIFO队列,LIFO队列和优先级队列。

  • 指定队列达到容量时的实体覆盖策略。

  • 自定义并更改实体服务时间。

  • 根据事件分配和更改实体属性。

  • 了解模拟过程中的队列长度统计信息。

使用实体队列块排序实体

该模型展示了如何通过更改队列排序策略来对实体进行排序。Entity Queue块支持三种消息排序策略金宝app:

  • 后进先出(后进先出)-存储中最新的实体最先离开。

  • 先进先出(FIFO) - 储存中最古老的实体首先出发。

  • 优先实体根据其优先级进行排序。您只能使用优先级队列如果队列已满,则覆盖最老的元素复选框被清除。

下面的模型显示了四种不同的实体排序行为:FIFO,LIFO,按升序的优先级,以及下降顺序的优先级。

四个相同的实体生成器块每个生成10个实体。每个块使用重复序列模式进行实体互动时间dt

生成10个实体后,代间时间dt设置为无穷大以停止生成实体。在实体生成器块中相生的时间行动字段时,使用此代码。

持续的SEQ;持续的IDX;如果Isempty(SEQ)%以1秒的间隔生成10个实体。Seq = [1 1 1 1 1 1 1 1 1 1 1];idx = 1;结尾如果IDX> NUMEL(SEQ)%生成10个实体后停止生成实体。dt =正;别的dt = SEQ (idx);结尾

块生成一个实体,它指定属性Attribute1在每个实体。您可以使用属性来表示实体的特性或属性。在本例中,第一个实体携带值为1,每个生成的实体的属性值增加1。要实现此行为,请在Entity Generator块中事件动作选项卡,生成动作字段时,使用此代码。

%模式:重复序列持续的SEQ1;持续的idx1;如果isempty(SEQ1) SEQ1 = [1 2 3 4 5 6 7 8 9 10];idx1 = 1;结尾如果idx1 <= numel(SEQ1)实体。Attribute1 = SEQ1 (idx1);结尾Idx1 = Idx1 + 1;

生成的实体被转发到四个实体队列块。为了显示排序行为,实体队列块被连接到四个配置为释放门的相同实体门块。释放门允许一个实体通过,当它接收到一个正(大于0)值从其控制端口。栅格为第一个实体阻塞实体10并将它们存储在队列中。在前10秒之后,根据排序策略,门允许每秒钟通过一个实体。

模拟模型。打开Simulation Data Inspector并观察从每个Entity Queue块出发的实体是基于队列排序策略进行排序的。

  • 第一个图显示了使用FIFO策略离开队列的实体。第一个属性价值1,当大门打开时从队列出发11。随后的实体以同一代表的顺序离开队列,随着属性值的增加。

  • 第二个图显示了使用后进先出策略离开队列的实体。该策略从具有最大属性值的实体开始反转实体离开序列。

  • 第三块图显示了从优先级队列的实体根据其属性按升序排序,而不是它们的条目顺序排列到队列。携带最小的属性值的实体首先离开。后续实体遵循相同的政策。

  • 第四个图显示了从下降顺序中基于其属性排序实体的优先级队列的实体。具有最大属性值的实体首先出发,其余的实体遵循相同的策略。

队列实体覆盖策略

您可以通过设置实体覆盖策略来指定实体队列块在达到其容量时做什么。通过选择或清除策略如果队列已满,则覆盖最老的元素复选框。

  • 如果是如果队列已满,则覆盖最老的元素复选框被清除,则当队列已满时,块不接受新实体。这是一个阻塞队列行为。

  • 如果是如果队列已满,则覆盖最老的元素复选框,则块被设置为总是通过覆盖存储中最古老的实体来接受传入的实体。块覆盖最老的实体,但是离开块的实体是由队列排序策略决定的。

在该模型中,两个相同的实体生成器块每次生成实体1第二。这些实体被转发到两个实体队列块,每个块的容量为10和FIFO实体排序策略。但是,阻塞队列被配置为在其队列满时不接受新实体,而覆盖队列被配置为在其队列满时覆盖最老的实体。阻塞队列和覆盖队列连接到两个相同的实体服务器块,每个块的服务时间值为25秒。实体生成器块的实体生成率远高于实体服务器块的服务速率。此差异导致实体在实体队列块中累积。

模拟模型并打开序列观看者块。观察Entity Generator 1和Entity Generator 2块最初生成的实体的数据值为0.8147,实体被转发到实体服务器1和实体服务器2。两个实体生成器块都生成数据值为的第二组实体0.9058,它们存储在阻塞队列和覆盖队列中,因为两个实体服务器块都已满。其余生成的实体也存储在Entity Queue块中。

观察实体队列1块停止接受新的实体到它的存储的时间11。但是,实体队列2允许具有属性的新实体0.9706存储和覆盖最旧的现有实体,其具有数据值0.9058

自定义实体服务时间

在基本排队系统中,您可以使用实体服务器块根据系统中的进程来模拟延迟。您可以确定通过更改延迟的源服务时间源Entity Server块的参数。

此示例显示您可以根据您的应用程序使用的四种不同源:

  • 对话框—可以定义固定的服务时间值。在第一个建模模式中,实体被延迟2秒。然后,该块尝试将实体转发到下一个块。

  • 信号端口-进入的Simulink®信金宝app号决定服务时间。在第二种建模模式中,块使用斜坡信号值作为服务时源。

  • 属性—服务时间由实体属性值决定。在第三种建模模式中,每个实体携带Attribute1与价值4这是服务时间源。

  • MATLAB的行动- 您可以输入Matlab™代码服务时间措施字段并将变量赋给dt,它是模型用作服务时间的参数。在第四种建模模式中,随机服务时间dt =兰德(1,1);,代码设置一个随机服务时间值,该服务时间值均匀分布在01

模拟模型并评审结果

模拟模型并观察仿真数据检查器,该检查器显示实体服务器块转发的实体。

构建一个简单的排队系统来更改实体属性

可以将属性附加到实体以表示它们的特性。在排队系统中,您可以使用操作作为对事件和更改实体属性的响应。例如,当实体进入和退出实体队列块时,您可以更改实体属性的值。在实体队列块中,在事件动作选项卡中,可以看到可以为其创建操作的事件集。

假设您想在银行分支机构中建模一个客户服务系统。该分行有两个银行出纳员,每个人都分配了特定的事务类型。顾客到达分行。他们为自己的交易选择一个号码,然后被引导到正确的银行出纳员那里。客户在交易完成后离开分行。

在此示例中,客户到达由实体生成器块建模。假设客户随着时间的连​​续时间而抵达1。每个生成的实体都附加一个属性TransactionType.表示客户的请求。的transactiontype |被初始化为| 0因为在客户输入分支之前,事务未知。

等候室由实体队列块表示。当顾客进入等候室时,他们会得到相应的银行出纳员的号码。此操作通过更改entity Queue块的事件操作中的实体属性来表示。下面是实体条目事件对实体队列块调用的操作。

使用统计和逻辑队列分析队列长度

您可以使用队列统计信息来分析和理解队列中队列的行为。具体来说,您可以测量:

  • 从队列中离开到下游块的实体数量。

  • 在特定的模拟时间内的实体数目。

  • 在离开块之前队列中的实体的平均等待。

  • 对象从队列中提取的平均队列长度或实体数量实体找到块。

了解这些统计数据可以介绍您的模型的行为。有关队列统计信息的更多信息,请参阅使用统计分析解释SimEvents模型

此示例呈现了两种不同的方法可视化和了解队列长度。

要确定队列是否存储任何实体,可以输出与存储在块中的实体数量对应的统计信息。

要输出统计信息,请遵循以下简单步骤。

  1. 启用n队列块的输出信号。在块对话框中,在统计数据选项卡,选择块中的实体数,n复选框。

  2. 从Simulink中的水槽库金宝app®标准库设置,插入一个范围块到模型中。连接n队列块的输出端口到输入端口范围块。

    作用域显示队列是否为空。

有关可视化队列统计信息的详细信息,请参阅探索统计和可视化模拟结果

对队列进行分区以了解队列长度

您可以对队列进行分区,以了解模拟期间队列长度和行为的更多细节。

假设您要确定队列长度超过的时间比例10对于容量的队列One hundred.。您可以通过使用一对串联的队列来研究这一点。队列的长度为90.10。它们一起表示一个容量为的队列One hundred.

将原始队列划分为两个较小的队列,可以收集与其中一个较小队列相关的统计信息。例如,可以查看容量为的实体队列块的队列长度统计信息90.。如果队列中存在具有容量的队列中的实体90.,表示容量为的队列10已经满了。因此,确定具有容量的队列所占用的时间的比例One hundred.至少有10个实体相当于确​​定队列的队列长度以容量的比例90.大于0

模拟模型。观察实体队列容量90.块输出块中的实体数,n。观察,在特定的时间间隔内,实体被存储在块中,这表明队列的容量为10已经满了。

可视化具有容量的队列所占用的时间比例10时,统计信号被进一步处理并与零进行比较。

也可以看看

|

相关的话题