当前位置:网站首页>Matlab-离散事件系统仿真实验
Matlab-离散事件系统仿真实验
2022-07-27 09:57:00 【用户9925864】
分析一个单服务台排队系统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 下发生的事件类型 E(i = 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 个顾客引起的三种事件先后发生的时刻,对获得的参数按照时间顺序进行整理和分析,可以得出平均队长、平均等待时间等重要参数,流程样例如下
单服务台排队系统的流程框架图如下:
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),' 人'])边栏推荐
- 超赞的卡尔曼滤波详解文章
- 使用 LSM-Tree 思想基于.NET 6.0 C# 写个 KV 数据库(案例版)
- Shell变量、系统预定义变量$HOME、$PWD、$SHELL、$USER、自定义变量、特殊变量$n、$#、$*、[email protected]、$?、env看所有的全局变量值、set看所有变量
- Cannot start after installing MySQL 5.7.27 in CentOS 7? (Language bash)
- Learn typescript (1)
- Text processing tool in shell, cut [option parameter] filename Description: the default separator is the built-in variable of tab, awk [option parameter] '/pattern1/{action1}filename and awk
- WGAN、WGAN-GP、BigGAN
- Anchor Free检测器:CenterNet
- Leetcode.565. array nesting____ Violent dfs- > pruning dfs- > in situ modification
- pytorch中对BatchNorm2d()函数的理解
猜你喜欢

Exercises --- quick arrangement, merging, floating point number dichotomy

Shell integrated application cases, archiving files, sending messages

省应急管理厅:广州可争取推广幼儿应急安全宣教经验
![Shell的正则表达式入门、常规匹配、特殊字符:^、$、.、*、字符区间(中括号):[ ]、特殊字符:\、匹配手机号](/img/31/ed0d8c1a5327059f2de7493bec1c6c.png)
Shell的正则表达式入门、常规匹配、特殊字符:^、$、.、*、字符区间(中括号):[ ]、特殊字符:\、匹配手机号

蚂蚁集团境外站点 Seata 实践与探索

LeetCode.814. 二叉树剪枝____DFS

Stylegan paper notes + modify code to try 3D point cloud generation

使用 LSM-Tree 思想基于.NET 6.0 C# 写个 KV 数据库(案例版)

Gbase 8A MPP cluster capacity expansion practice

Open3d library installation, CONDA common instructions, importing open3d times this error solving environment: failed with initial frozen solve Retrying w
随机推荐
Failure of CUDA installation nsight visual studio edition failed
女粉想要找男朋友,竟是为了...
Case of burr (bulge) notch (depression) detection of circular workpiece
并发之park与unpark说明
Summary of engineering material knowledge points (full)
文件上传漏洞绕过方法
Gbase 8A MPP cluster capacity expansion practice
Overview of PCL modules (1.6)
LeetCode.565. 数组嵌套____暴力dfs->剪枝dfs->原地修改
01_ Movie recommendation (contentbased)_ Object portrait
Stylegan paper notes + modify code to try 3D point cloud generation
Shell函数、系统函数、basename [string / pathname] [suffix] 可以理解为取路径里的文件名称 、dirname 文件绝对路径、自定义函数
SE(Squeeze and Excitation)模块的理解以及代码实现
食品安全 | 菜板环境很重要,这些使用细节你知道吗?
邮件服务器
去 OPPO 面试,被问麻了
安装CUDA失败的情况nsight visual studio edition失败
WGAN、WGAN-GP、BigGAN
Shell variables, system predefined variables $home, $pwd, $shell, $user, custom variables, special variables $n, $, $*, [email protected],
Brush the title "sword finger offer" day03