系统仿真实验报告
学院 机电学院 专业 工业工程 班级 2 学号 3111000649 姓名 彭元元 指导教师 樊昶明
2014年6 月 5 日
实验2排队系统仿真
一、
学习目的
1.了解仿真的特点 2.学习如何建构模型
3.熟悉eM-Plant基本的对象和操作 4.掌握排队系统的特点与仿真的实现方法 二、
问题描述
(1)、在一定时间内市民到达银行窗口的人数的概率服从泊松分布,则市民到达售票窗口的时间间隔服从指数分布,平均到达时间为5min。 (2)、售票窗口的服务时间服从指数分布,平均服务时间为4min。 (3)、采取先进先服务服务规则。 三、系统建模 3.1 仿真目标
通过对银行排队系统的仿真,研究银行系统的服务水平和改善银行服务水平的方法,为银行提高顾客满意度,优化顾客服务流程服务。 3.2.系统建模 3.2.1 系统调研
1. 系统结构: 银行服务大厅的布局, 涉及的服务设备 2. 系统的工艺参数: 到达-取号-等待-服务-离开
3. 系统的动态参数: 顾客的到达时间间隔, 工作人员的服务时间 4. 逻辑参数: 排队规则, 先到先服务
5. 系统的状态参数: 排队队列是否为空, 如果不为空队长是多少, 服务台是否为空
6. 系统的输入输出变量:输入变量确定其分布和特征值,顾客的到达时间间隔的概率分布表和每个顾客被服务时间的概率分布. 输出变量根据仿真目标设定. 包括队列的平均队长、最大队长、仿真结束时队长、总服务人员、每个顾客的平均服务时间、顾客平均排队等待服务时间、业务员利用率等。 3.2.2系统假设
1.取号机前无排队,取号时间为0 2. 顾客排队符合先进先出的排队规则
第 1 页 共 2 页
3.一个服务台一次只能对一个顾客服务 4.所有顾客只有一种单一服务 5.仿真时间为1个工作日(8小时) 6.等候区的长度为无限长 3.2.3系统建模 系统模型:
到达取号排队服务离开
3.2.4 仿真模型
1.实体:银行系统中的实体是人(主动体)
2.属性:到达时间间隔、接受服务的时间、接受服务类型
3.事件:顾客到达、开始取号、取号结束、进入队列、出队列、接受服务、服务完成、离开银行。
4.活动:到达、取号、排队、服务、离开 5.资源:取号机、排队的座椅、服务柜台 四、系统仿真
4.1针对本实验的单服务台系统则可以简单表示为:
4.2创建一个实体
选中MUs目录下的Entity,然后按住Ctrl,并拖到QueueSystem目录下,就复制过来了,右击改名为person。
第 2 页 共 3 页
4.3设置各控件属性
双击source,打开其属性对话框,修改Attributes选项卡里面的MU值,单击后面的
按钮,打开select object对话框,选择前面新建的person,单击OK。
4.4双击按钮,先设置Attributes选项卡中的Capacity属性值,将其改为-1,表示无限量,单击Apply,然后选择times选项卡,将processing time改为0,单击
第 3 页 共 4 页
OK。
4.5双击Drain,将times选项卡中的processing time值改为0,单击OK。
第 4 页 共 5 页
4.6双击Eventcontroller,选择settings选项卡,根据要求,设置Data为开始时间,End为结束时,单击OK。
4.7创建Method以及Tablefile
在tools工具栏中选择Method按钮和Tablefile按钮,然后在Frame中创建相应的Method和Tablefile,右击弹出快捷菜单,选择Rename进行改名,分别创建6个Method和3个Tablefile。
第 5 页 共 6 页
4.8创建两个全局变量 在tools工具栏里面选择
Variable按钮,SimulationTimes、创建两个全局变量:
QueueNumberCount,将两个全局变量中Value选项卡中的Data Type都改为integer,单击OK。
第 6 页 共 7 页
4.9修改person属性
在左边根目录下双击Person,弹出对话框,选择Custom Attributes选项卡。
4.10单击new按钮,新建一个属性变量,Name为arrivaltime,Data Type为time。
第 7 页 共 8 页
4.11单击OK,返回前面对话框,再新建两个类型为time的serverTime和waitTime的属性变量。
4.12编辑表格属性
第 8 页 共 9 页
设置QueueTab第1列的Data Type为integer,第2列的data type为integer,第3列的Data Type为real,第4列的Data Type为integer,第5列的Data Type为integer。
设置CustomsTab第1列的Data Type为integer,第2列的Data Type为integer,第3列的Data Type为time,第4列的Data Type为time,第5列的Data Type为real。
设置customs20Tab的第1列的Data Type为integer,第2列的Data Type为time,第3列的Data Type为time,第4列的Data Type为time,第5列的Data Type为time。选中第一列,单击format >format,出现list format对话框,将Data Type改为integer,单击OK。
其他表格按同样方法设置。 4.13编写代码
双击Method,在里面编写相应的代码,具体见后面代码。 控制
4.14编写完代码后需要把method放到相应的位置,来控制仿真的运行,双击gukedaoda,选择
controls选项卡,将
第 9 页 共 10 页
Entrance属性值设为
QueueSystem.QueueFrame. ArrivalIntervalTime。
4.15双击quhao,选择controls选项卡,将Entrance属性值设为 .Models.QueueSystem. QueueFrame.CustomServerTime
第 10 页 共 11 页
4.16同样设置drain中entrance属性值为.Models.QueueSystem.QueueFrame. ComputeQueueLength
第 11 页 共 12 页
4.17仿真结果分析
仿真结果如下图。平均等待时间为16:19.3328,与理论值的16min很相近;平均队长为3.84,与理论值的3.2很接近。
第 12 页 共 13 页
4.18代码 Reset代码:
is do
deleteMovables;
QueueNumberCount:=0; end; Init代码
is do
QueueNumberCount:=0; end;
Endsim代码
第 13 页 共 14 页
is
tab:table; do
tab.create;
Buffer.statistics(tab); buffer.statistics;
QueueTab[1,SimulationTimes]:=SimulationTimes; QueueTab[2,SimulationTimes]:=tab[4,1]; QueueTab[4,SimulationTimes]:=tab[9,1]; QueueTab[5,SimulationTimes]:=tab[6,1];
tab.delete;
singleProc.statistics(tab);
CustomsTab[1,SimulationTimes]:=SimulationTimes; CustomsTab[2,SimulationTimes]:=tab[5,1]; CustomsTab[3,SimulationTimes]:=tab[20,1]; CustomsTab[4,SimulationTimes]:=tab[15,1]; CustomsTab[5,SimulationTimes]:=tab[17,1];
if SimulationTimes<30 then .models.queuesystem.queueframe.EventController.reset; SimulationTimes:=SimulationTimes+1; .models.queuesystem.queueframe.EventController.start; else SimulationTimes:=1; end; end;
ArrivalIntervalTime代码
is
rand:real; do
rand:=Z_uniform(SimulationTimes,0,1); if rand>0.0 and rand<=0.125 then Source.interval:=60*1;
elseif rand>0.125 and rand<=0.250 then Source.interval:=60*2;
elseif rand>0.250 and rand<=0.375 then Source.interval:=60*3;
elseif rand>0.375 and rand<=0.5 then Source.interval:=60*4;
第 14 页 共 15 页
elseif rand>0.5 and rand<=0.625 then Source.interval:=60*5;
elseif rand>0.625 and rand<=0.75 then Source.interval:=60*6;
elseif rand>0.75 and rand<=0.875 then Source.interval:=60*7;
elseif rand>0.875 and rand<=1.0 then Source.interval:=60*8; end;
@.arrivalTime:=eventcontroller.simtime; end;
CustomServerTime代码
is
rand:real; do
@.serverTime:=SingleProc.ProcTime; rand:=Z_uniform(1,0,1);
if rand>0.0 and rand<=0.1 then SingleProc.ProcTime:=60*1; elseif rand>0.1 and rand<=0.3 then SingleProc.ProcTime:=60*2; elseif rand>0.3 and rand<=0.6 then SingleProc.ProcTime:=60*3; elseif rand>0.6 and rand<=0.85 then SingleProc.ProcTime:=60*4;
elseif rand>0.85 and rand<=0.95 then SingleProc.ProcTime:=60*5; elseif rand>0.95 and rand<=1.0 then SingleProc.ProcTime:=60*6; end; end;
ComputeQueueLength代码
is do
QueueNumberCount:=QueueNumberCount+1;
QueueTab[3,SimulationTimes]:=(QueueTab[3,SimulationTimes]*(QueueNumberCount-1)+Buffer.numMU)/QueueNumberCount;
第 15 页 共 16 页
if simulationTimes=1 and QueueNumberCount=1 then Customs20Tab[1,QueueNumberCount]:=QueueNumberCount; Customs20Tab[2,QueueNumberCount]:=@.arrivalTime; Customs20Tab[3,QueueNumberCount]:=0; Customs20Tab[4,QueueNumberCount]:=@.serverTime; Customs20Tab[5,QueueNumberCount]:=@.statAvgLifeSpan-@.serverTime;
elseif simulationTimes=1 and QueueNumberCount<=20 then Customs20Tab[1,QueueNumberCount]:=QueueNumberCount; Customs20Tab[2,QueueNumberCount]:=@.arrivalTime;
Customs20Tab[3,QueueNumberCount]:=@.arrivalTime-Customs20Tab[2,QueueNumberCount-1]; Customs20Tab[4,QueueNumberCount]:=@.serverTime; Customs20Tab[5,QueueNumberCount]:=@.statavglifespan-@.serverTime; end; end;
第 16 页 共 17 页
实验三 单队多服务台排队系统仿真建模与分析
一、假设条件: (1)、在一定时间内游人到达售票窗口的人数的概率服从泊松分布,则游人到达售票窗口的时间间隔服从指数分布,平均到达时间为5min。 (2)、售票窗口的服务时间服从指数分布,平均服务时间为4min。 (3)、采取先进先服务服务规则。 (4)多服务台排队系统 二、仿真建模 (1)、在Frame中放入source、buffer、singleproc、drain、variable、method、display等对象,如下图。然后改名,把相应的对象链接起来。
(2)、各个对象的参数设置 1)variable对象设置
zongduiliushijian、zongdengdaishijian、pingjundouliushijian、pingjundengdaishijian的date type设置成time;pingjunduichang、a、r、t的date type设置成real。如下图。
第 17 页 共 18 页
2)代码的编写 Reset is do
deletemovables;
zongdouliushijian:=0; zongdengdaishijian:=0; pingjundouliushijian:=0; pingjundengdaishijian:=0; pingjunduichang:=0; r:=0; end;
Kaishi is
do @.kaishitime:=eventcontroller.simtime;
第 18 页 共 19 页
end;
Kaishipaidui is
do @.kaishipaiduitime:=eventcontroller.simtime; end;
Jieshupaidui is
do @.jieshupaiduitime:=eventcontroller.simtime;
zongdengdaishijian:=zongdengdaishijian+@.jieshupaiduitime-@.kaishipaiduitime;
pingjundengdaishijian:=zongdengdaishijian/Buffer.statnumout; end;
Jieshu is
do @.jieshutime:=eventcontroller.simtime;
zongdouliushijian:=zongdouliushijian+@.jieshutime-@.kaishitime; pingjundouliushijian:=zongdouliushijian/fuwutai.statnumout; end;
Jieshuduichang is do
a:=Buffer.nummu; r:=r+a*60;
t:=eventcontroller.simtime; pingjunduichang:=r/t; end;
3)source参数设置
第 19 页 共 20 页
Buffer参数设置
Fuwutai和fuwutai2参数设置
第 20 页 共 21 页
Drain参数设置
第 21 页 共 22 页
Display参数设置如下
第 22 页 共 23 页
Entity设置
第 23 页 共 24 页
3、仿真结果分析
从下图可以看出,平均逗留时间是7分43秒,平均等待时间是1分钟,相对于单服务台的等待时间大大缩短了。说明增加一个服务台是有效的。
第 24 页 共 25 页
第 25 页 共 26 页
因篇幅问题不能全部显示,请点此查看更多更全内容