Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Matlab-离散事件系统仿真实验

Matlab-离散事件系统仿真实验

作者头像
用户9925864
发布于 2022-07-27 01:31:22
发布于 2022-07-27 01:31:22
71003
代码可运行
举报
运行总次数:3
代码可运行
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
分析一个单服务台排队系统

1、排队系统的一般理论

一般的排队系统都有三个基本组成部分:

(1) 到达模式:指动态实体(顾客)按怎样的规律到达,描写实体到达的统计特性。通常假定顾客总体是无限的。

(2) 服务机构:指同一时刻有多少服务设备可以接纳动态实体,它们的服务需要多少时间。它也具有一定的分布特性。通常,假定系统的容量(包括正在服务的人数加上在等待线等待的人数)是无限的。(3) 排队规则:指对下一个实体服务的选择原则。通用的排队规则包括先进先出(FIFO),后进先出(LIFO),随机服务(SIRO)等。

2、离散系统常用的仿真策略

(1)事件调度法(Event Scheduling):

基本思想:离散事件系统中最基本的概念是事件,事件发生引起系统状态的变化,用事件的观点来分析真实系统。通过定义事件或每个事件发生系统状态的变化,按时间顺序确定并执行每个事件发生时有关逻辑关系。

(2)活动扫描法:

基本思想:系统有成分组成,而成分又包含活动。活动的发生必须满足某些条件,且每一个主动成分均有一个相应的活动例程。仿真过程中,活动的发生时间也作为条件之一,而且较之其他条件具有更高的优先权。

(3)进程交互法:

基本思想:将模型中的主动成分历经系统所发生的事件及活动,按时间发生的顺序进行组合,从而形成进程表。系统仿真钟的推进采用两张进程表,一是当前事件表,二是将来事件表。

3、本实验采用单服务台模型

(1) 到达模式:顾客源是无限的,顾客单个到达,相互独立,一定时间的到达数服从指数分布。

(2) 排队规则:单队,且对队列长度没有限制,先到先服务的 FIFO规则。

(3) 服务机构:单服务台,各顾客的服务时间相互独立,服从相同的指数分布。

(4) 到达时间间隔和服务时间是相互独立的。

4、仿真运行方式

仿真运行方式可分为两大类:

(1)终止型仿真:仿真的运行长度是事先确定的由于仿真运行时间长度有限,系统的性能与运行长度有关,系统的初始状态对系统性能的影响是不能忽略的。为了消除由于初始状态对系统性能估计造成的影响,需要多次独立运行仿真模型。

(2)稳态型仿真:这类仿真研究仅运行一次,但运行长度却是足够长,仿真的目的是估计系统的稳态性能。

5、系统设计

采用事件调度法,事件调度法共有三种事件:即“顾客到达”、“服务开始”、“服务结束”。其中“服务开始”为条件事件,其条件是“顾客队列长度不为零且服务员空闲”。在用事件调度法时,不单独考虑条件事件,而将其并入非条件事件中。因此,需要考虑的事件例程有“顾客到达时间例程”和 “服务结束时间例程”。“顾客到达时间例程”和 “服务结束时间例程”如图

事件调度法的程序结构设计如下:

(1)初始化。

 设置仿真的开始时间 t0和结束时间 tf

 设置实体的初始化状态;

 设置初始事件及其发生时间 ts

(2)仿真时钟 TIME = ts

(3)确定在当前时钟 TIME 下发生的事件类型 Ei = 1,2,3,…,n),并按解结规则排序。

(4)如果 TIME <= tf执行。

{case E1:执行 E1 的事件例程;产生后续事件类型及发生时间;……case En:执行 En 的事件例程;产生后续事件类型及发生时间;

}

否则,转(6).

(5)将仿真时钟 TIME 推进到下一最早事件发生时刻;转(3)。(6)结束仿真。

6、思路分析

采用事件调度法来研究单服务台排队系统。顾客逐个到达服务台,且相邻两个顾客到达服务台的时间间隔服从参数为 3 min 的指数分布。到达服务台后,若这时服务员空闲,则为其提供服务,若此时服务员正在为其他顾客服务,则刚到的顾客排队等待。服务员为每位顾客服务的时间长度服从参数为 4 min 的指数分布。使用 Matlab 软件进行建模仿真,用 exprnd 函数生成符合指数分布的随机数。用三个空白数组分别存储第 i 个顾客引起的三种事件先后发生的时刻,对获得的参数按照时间顺序进行整理和分析,可以得出平均队长、平均等待时间等重要参数,流程样例如下

单服务台排队系统的流程框架图如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
clc
close all
clear
rng default
T = 1000; % T-仿真长度(min)
mu1=3; %顾客到达时间间隔(指数分布)的均值
mu2=4; %服务时间(指数分布)均值

arriveGap = []; % 到达时间间隔
serveGap = [];  % 服务时间
Arrive=[]; %顾客到达时间
Serve=[]; %服务开始时间
Leave=[]; %服务结束时间
%===========初始化============%
i=0;  % 第几个顾客抵达
t0=0;  % 仿真开始时间
TIME=0; % 系统时间
arriveGap = [arriveGap, exprnd(mu1)];
Tarrv=t0+arriveGap(i+1); % 第i个抵达时间
serveGap = [serveGap, exprnd(mu2)];
Tleave=Tarrv+serveGap(i+1);  % 第i个服务结束时间
Arrive=[Arrive,Tarrv];
Serve=[Serve,Tarrv]; 
Leave=[Leave,Tleave];
% 开始仿真
while TIME < T
    i=i+1;
    arriveGap = [arriveGap, exprnd(mu1)];
    Tarrv=Tarrv+arriveGap(i+1); %确定下一顾客到达时刻
    % 留个空白思考 
    if Leave(i)<=Arrive(i+1) %服务员空闲,无需排队
        % 留个空白思考 
    else %服务员忙碌,需要排队
        % 留个空白思考 
    end
    % 留个空白思考 
    Leave=[Leave,Tleave];
    
end
%%

Twait=[]; %每个顾客的等待时间
Nwait=[]; %每个顾客接受服务时的队长
WaitNum=0;  % 平均等待人数
WaitTime=0;  % 平均等待时间
%平均等待时间
for j=1:i
    Twait(j)=Serve(j)-Arrive(j);
    WaitTime=WaitTime+Twait(j);
end
WaitTime=WaitTime/i;
%平均队长
for m=1:i
    k=0;
    for n=m+1:i
        if Leave(m)>Arrive(n)
            k=k+1;
        else
            break;
        end
    end
    Nwait(m)=k;
    WaitNum=WaitNum+Nwait(m); 
end 
WaitNum=WaitNum/i;
%绘图
figure
plot(arriveGap)
xlabel 顾客序号
ylabel 到达间隔时间/min
figure
plot(serveGap)
xlabel 顾客序号
ylabel 服务时间/min
figure
plot(Twait);
xlabel 顾客序号
ylabel 等待时间/min
figure
plot(Nwait);
xlabel 顾客序号
ylabel 队伍长度/disp(['平均到达间隔时间:', num2str(mean(arriveGap)),' min'])
disp(['平均服务时间:', num2str(mean(serveGap)),' min'])
disp(['平均等待时间:', num2str(WaitTime),' min'])
disp(['平均队长指标:', num2str(WaitNum),' 人'])
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法工程师的学习日志 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【操作系统、数学】什么是排队论?如何理解排队论?排队论有什么用处?Queueing Theory?什么是 Little’s Law?
排队论(Queueing Theory)是研究系统中排队现象的数学理论,旨在分析资源分配、服务效率及等待时间等问题。它广泛应用于计算机科学、通信网络、交通规划、工业工程等领域。
Lokinli
2025/07/20
950
【操作系统、数学】什么是排队论?如何理解排队论?排队论有什么用处?Queueing Theory?什么是 Little’s Law?
matlab计算机仿真与蒙特卡洛法【数学建模】
前言:在计算机出现之前,我们对数学模型的研究只能通过数学推导和实验研究两种方法。在此之后,我们可以通过在计算机上对实际问题的模拟、仿真求解模型。计算机仿真在数学建模中具有很重要的作用,而蒙特卡洛法则是计算机仿真中的一个重要方法。
巴山学长
2021/07/09
2.4K0
matlab计算机仿真与蒙特卡洛法【数学建模】
排队论[通俗易懂]
**µ代表单位时间服务人的个数 ** 判断模型是否稳定,一般用比较λ和µ的大小(下图的系统服务强度)
全栈程序员站长
2022/09/20
1.6K0
排队论[通俗易懂]
数学建模暑期集训17:蒙特卡洛法
蒙特卡罗⽅法⼜称统计模拟法,是⼀种随机模拟⽅法,将所求解的问题同⼀定的概率模型相联系,⽤电⼦计算机实现统计模拟或抽样,以获得问题的近似解。为象征性地表明这⼀⽅法的概率统计特征,故借⽤赌城蒙特卡罗命名。
zstar
2022/06/14
6480
数学建模暑期集训17:蒙特卡洛法
PTA 银行排队问题之单队列多窗口服务
该文介绍了在银行排队问题中,使用单队列多窗口系统进行服务的实现方法。通过统计每个窗口的平均等待时间、最长等待时间、最后完成时间,以及每个窗口服务了多少名顾客,来评估系统的性能。最后,返回了平均等待时间、最长等待时间和最后完成时间,以及每个窗口服务了多少名顾客。
Kindear
2017/12/29
2.7K0
Python|数学建模|排队论仿真
数模准备过程中,写了这种运筹学仿真的代码,虽然自己选了C题没有用到,但考虑到市面上存在的仿真代码较少,聊以为分享。
朝闻君
2021/11/22
1.4K0
公交车总迟到?你大概掉进了“等待时间悖论&quot;
你到了车站,准备搭乘声称每10分钟一班的公交车。你盯着你的手表留意着时间,结果公交车终于在11分钟后到来。
磐创AI
2018/12/18
4130
干货 | AnyLogic建模仿真介绍+武汉疫情案例实战
别急,今天就让小玮陪你一起走进一款多方法仿真软件AnyLogic,来了解了解多方法仿真是什么以及简单的使用AnyLogic这样的多方法仿真软件。
短短的路走走停停
2020/03/06
7.4K0
干货 | AnyLogic建模仿真介绍+武汉疫情案例实战
随机过程(F)——习题课(连续时间马尔科夫链-布朗运动)
这是《随机过程》系列习题课的第二部分。这一部分我们会介绍从连续时间马尔科夫链到布朗运动的一些习题。这一部分的难度相对大一些,当然了,我们提供的习题也会稍微少一些。
学弱猹
2021/08/10
9580
​常见的8个概率分布公式和可视化
来源:Deephub Imba本文约2800字,建议阅读8分钟本文我们将介绍一些常见的分布并通过Python 代码进行可视化以直观地显示它们。 概率和统计知识是数据科学和机器学习的核心;我们需要统计和概率知识来有效地收集、审查、分析数据。 现实世界中有几个现象实例被认为是统计性质的(即天气数据、销售数据、财务数据等)。这意味着在某些情况下,我们已经能够开发出方法来帮助我们通过可以描述数据特征的数学函数来模拟自然。 “概率分布是一个数学函数,它给出了实验中不同可能结果的发生概率。” 了解数据的分布有助于更好
数据派THU
2022/04/29
1.2K0
​常见的8个概率分布公式和可视化
原创 | 有趣的等待时间悖论
以上场景发生时,我们通常不得不选择等一会,那关于这个等待时间的平均值,其实有一个有趣的悖论,本文中作者会对其做一个通俗且深入的介绍。
数据派THU
2023/12/11
3640
原创 | 有趣的等待时间悖论
详谈排队论模型的始末
一般而言,排队问题相当常见,比如等待银行柜台服务、加油站加油或者多个进程等待cpu处理都会出现排队,为叙述方便,将排队者称为顾客,提供服务的一方称为服务员。常识都知道我们不希望排队(为了享受排队的另说),排队意味着是时间成本的消耗,如果是物资等待被处理的排队则说明物资出现积压,不管哪种都会对生产效率产生重要负面影响,但往往这个排队现象是无法完全消失的,这是一种随即现象,排队与很多因素相关,其中最重要的两部分是顾客到达时间间隔的随机时间和服务过程的服务随机时间两部分,而排队论的宗旨也是系统在不同场景下利用以上两种过程规律对实际的排队系统做出最优的决策以提高效益。
用户7506105
2021/08/09
1.7K0
MySQL内置数据库performance_schema详解(五):监控文件系统层调用的表介绍
performance_schema 是 MySQL 数据库中的一个内置的系统数据库,最早从MySQL5.5版本产生,这个数据库主要用于收集和存储与数据库性能相关的统计信息和指标。
小明互联网技术分享社区
2023/12/26
4220
MySQL内置数据库performance_schema详解(五):监控文件系统层调用的表介绍
MySQL内置数据库performance_schema详解(二):等待事件记录表介绍
performance_schema 是 MySQL 数据库中的一个内置的系统数据库,最早从MySQL5.5版本产生,这个数据库主要用于收集和存储与数据库性能相关的统计信息和指标。
小明互联网技术分享社区
2023/12/22
1.9K0
MySQL内置数据库performance_schema详解(二):等待事件记录表介绍
DFC:控制 ~~到达率~~ 最小化等待时间
在这个到达率下的等待时间(到达越多等待时间越长)和服务器成本(到达越多等待能耗越高)
zhangjiqun
2024/12/14
1950
DFC:控制 ~~到达率~~ 最小化等待时间
PAT 1017 Queueing at Bank (25分) prioriry_queue
Suppose a bank has K windows open for service. There is a yellow line in front of the windows which devides the waiting area into two parts. All the customers have to wait in line behind the yellow line, until it is his/her turn to be served and there is a window available. It is assumed that no window can be occupied by a single customer for more than 1 hour.
vivi
2020/07/14
4520
python协程3:用仿真实验学习协程
前两篇我们已经介绍了python 协程的使用和yield from 的原理,这一篇,我们用一个例子来揭示如何使用协程在单线程中管理并发活动。
goodspeed
2020/12/25
1.1K0
python的高性能web应用的开发与测试实验
python的高性能web应用的开发与测试实验 tornado“同步和异步”网络IO模型实验 引言 python语言一直以开发效率高著称,被广泛地应用于自动化领域: 测试自动化 运维自动化 构建发布自
用户1170933
2018/01/05
1.8K0
python的高性能web应用的开发与测试实验
排队论模型
我们使用六个符号表示排队模型,在符号之间用斜线隔开,记为 X/Y/Z/A/B/C 。第一个符号 X 表示顾客到达流或顾客到达间隔时间的分布;第二个符号 Y 表示服务时间的分布;第三个符号 Z 表示服务台数目;第四个符号 A 是系统容量限制;第五个符号 B 是顾客源数目;第六个符号 C 表示的是服务规则,例如先到先服务 FCFS, 后到先服务 LCFS 等。
hotarugali
2022/03/01
1.5K0
随机过程(7)——更新奖赏过程:交替更新过程,生存与濒死时间,观察悖论
本节我们开始介绍更新过程中的更新奖赏过程,这是一个很有趣的更新过程的应用,也会占据很大的篇幅。
学弱猹
2021/08/10
1.5K0
随机过程(7)——更新奖赏过程:交替更新过程,生存与濒死时间,观察悖论
推荐阅读
相关推荐
【操作系统、数学】什么是排队论?如何理解排队论?排队论有什么用处?Queueing Theory?什么是 Little’s Law?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验