Presentation is loading. Please wait.

Presentation is loading. Please wait.

第04讲 仿真模型设计与实现.

Similar presentations


Presentation on theme: "第04讲 仿真模型设计与实现."— Presentation transcript:

1 第04讲 仿真模型设计与实现

2 第04讲 仿真模型设计与实现 提纲 一、排队系统概述 三、排队系统事件例程分析 四、仿真模型的EXCEL实现 五、仿真模型的MATLAB实现
第04讲 仿真模型设计与实现 提纲 一、排队系统概述 二、事件调度法 三、排队系统事件例程分析 单队列单服务台SQSS系统事件例程 单队列多服务台SQMS系统事件例程 四、仿真模型的EXCEL实现 SQSS系统手工仿真的Excel实现 SQSS系统仿真的Excel实现 五、仿真模型的MATLAB实现 SQSS系统仿真的Matlab实现 SQMS系统仿真的Matlab实现

3 一、 排队系统概述 Where the Time Goes 停在红灯前 6个月 打开邮寄广告 8个月 寻找放置不当的物品 1年 回电话不成功
人一生中平均要花费-- 停在红灯前 6个月 打开邮寄广告 8个月 寻找放置不当的物品 1年 回电话不成功 2年 做家务 4年 排队等待 5年 6年

4 1 排队系统 排队系统:商业服务系统 系统类型 顾客 服务台 理发店 人 理发师 银行出纳服务 人 出纳 ATM机服务 人 ATM机
系统类型 顾客 服务台 理发店 人 理发师 银行出纳服务 人 出纳 ATM机服务 人 ATM机 商店收银台 人 收银员 管道服务 阻塞的管道 管道工 电影院售票窗口 人 售票员 机场检票处 人 航空公司代理人 经纪人服务 人 股票经纪人

5 1 排队系统 排队系统:内部服务系统 系统类型 顾客 服务台 秘书服务 雇员 秘书 复印服务 雇员 复印机 计算机编程服务 雇员 程序员
系统类型 顾客 服务台 秘书服务 雇员 秘书 复印服务 雇员 复印机 计算机编程服务 雇员 程序员 大型计算机 雇员 计算机 急救中心 雇员 护士 传真服务 雇员 传真机 物料处理系统 货物 物料处理单元 维护系统 设备 维修工人 质检站 物件 质检员

6 1 排队系统 排队系统:运输服务系统 系统类型 顾客 服务台 公路收费站 汽车 收费员 卡车装货地 卡车 装货工人
系统类型 顾客 服务台 公路收费站 汽车 收费员 卡车装货地 卡车 装货工人 港口卸货区 轮船 卸货工人 等待起飞的飞机 飞机 跑道 航班服务 人 飞机 出租车服务 人 出租车 电梯服务 人 电梯 消防部门 火灾 消防车 停车场 汽车 停车空间 急救车服务 人 急救车

7 1 排队系统 一般排队系统的基本特征 7

8 1 排队系统 排队系统主要绩效指标 服务台利用率 系统中平均顾客数 平均队长 顾客在系统内 平均停留时间 平均等待时间
出现大于n个顾客的概率

9 到达模式、服务模式、服务台数量、系统容量、排队规则以及相关时间参数。
1 排队系统 影响排队系统绩效指标的主要因素: 到达模式、服务模式、服务台数量、系统容量、排队规则以及相关时间参数。 到达模式:指接受服务的顾客到达系统的模式,常用实体到达时间间隔的概率分布表示。排队系统中比较常用的是泊松(possion)到达模式,用来描述排队系统中实体到达的泊松过程。 服务模式:一般用提供服务所需时间的概率分布表示。 系统容量指系统可提供服务的能力。 当有顾客到达而服务台正处于“忙”状态时,顾客需进入“队列”等待服务。顾客在“队列”中是按一定的规则得到服务的。常见的排队规则有:先到先服务(FIFO),后到先服务(LIFO)、优先级服务及随机服务等。

10 二、 事件调度法 事件:顾客到达、顾客离去(服务完毕) 状态:队列长度、服务机构状态 绩效指标:顾客平均等待时长、服务台忙率、服务顾客数量…

11 二、 事件调度法 通过如下排队系统,了解决策变量、反应变量、状态变量以及随机过程。 顾客到达等间隔5分钟;服务时间等长4分钟;
单队列单服务台排队系统仿真(参看:第04章 排队系统演示图例.doc) 顾客到达等间隔5分钟;服务时间等长4分钟; 顾客到达等间隔5分钟;服务时间随机数[ ],即服务时间均值4分钟; 顾客到达等间隔5分钟;服务时间随机数[ ],即服务时间均值4分钟; 顾客到达间隔随机[ ];服务时间随机数[ ]; 顾客到达间隔随机[ ];服务时间随机数[ ]; 求每种情况下服务6位顾客的完工时间,顾客平均等待时间,以及服务员忙率?

12 二、 事件调度法

13 二、 事件调度法

14 顾客到达间隔5分钟,服务时长平均为4分钟,第一个顾客0时刻到达
二、 事件调度法 顾客到达间隔5分钟,服务时长平均为4分钟,第一个顾客0时刻到达 顾客 服务时间 时间 队列人数 服务台状态 事件 1 6 初始化 2 3 4 5 完工时间 顾客平均等待时间 服务员忙率

15 二、 事件调度法 顾客到达间隔随机[3 3 3 7 7];服务时间随机数[6 6 6 2 2 2];
顾客到达间隔随机[ ];服务时间随机数[ ]; IE

16 二、 事件调度法 事件调度法 事件调度法最早出现在1963年兰德公司的Markowtz等人推出的SIMSCRIPT语言的早期版本中。它的基本思想是: 将事件例程作为仿真模型的基本模型单元,按照事件发生的先后顺序不断执行相应的事件例程。 每一事先可预知其发生时间的确定事件都带有一个事件例程,用以处理事件发生后对实体状态所产生的影响,并安排后续事件;条件事件不具有事件例程,对它的处理隐含在某一确定事件的例程中。 IE

17 二、事件调度法总控程序的算法结构 扫描事件表,确定下一事件发生时间; 推进仿真时钟至下一事件发生时间;
从事件表中产生当前事件表CEL,CEL中包含了所有当前发生事件的事件记录;

18 第04讲 仿真模型设计与实现 提纲 一、排队系统概述 三、排队系统事件例程分析 四、仿真模型的EXCEL实现 五、仿真模型的MATLAB实现
第04讲 仿真模型设计与实现 提纲 一、排队系统概述 二、事件调度法 三、排队系统事件例程分析 单队列单服务台SQSS系统事件例程 单队列多服务台SQMS系统事件例程 四、仿真模型的EXCEL实现 SQSS系统手工仿真的Excel实现 SQSS系统仿真的Excel实现 五、仿真模型的MATLAB实现 SQSS系统仿真的Matlab实现 SQMS系统仿真的Matlab实现

19 三、排队系统事件例程分析 单队列单服务台(Single Queue Single Server,SQSS)系统事件例程分析。
有顾客到达事件E1和服务完毕事件E2两类; 有队列长度和服务员状态。

20 三、排队系统事件例程分析 单队列多服务台(Single Queue Multiple Server,SQMS)排队系统事件例程分析。
有顾客到达事件E1和服务完毕事件E2两类; 有队列长度和服务员状态。

21 第04讲 仿真模型设计与实现 提纲 一、排队系统概述 三、排队系统事件例程分析 四、仿真模型的EXCEL实现 五、仿真模型的MATLAB实现
第04讲 仿真模型设计与实现 提纲 一、排队系统概述 二、事件调度法 三、排队系统事件例程分析 单队列单服务台SQSS系统事件例程 单队列多服务台SQMS系统事件例程 四、仿真模型的EXCEL实现 SQSS系统手工仿真的Excel实现 SQSS系统仿真的Excel实现 五、仿真模型的MATLAB实现 SQSS系统仿真的Matlab实现 SQMS系统仿真的Matlab实现

22 四、仿真模型的EXCEL实现 1. SQSS系统手工仿真的Excel实现
例4.1 考虑只有一个ATM机的银行自动存取款机器的网点,在某个时段顾客到达为等间隔到达,每5分钟到达一位顾客,前6位顾客使用ATM机器的时间(分钟)分别为3、3、3、7、7、7。可以看出顾客到达速率为每5分钟一位,且顾客服务时间平均值也为5分钟一位。使用仿真方法分析第6位顾客使用完ATM机器的时间及截至该时刻顾客的排队等待总时间和ATM机的利用率。 XLS演示

23 四、仿真模型的EXCEL实现 例4.2 考虑只有一台入库叉车的仓储中心,被仓储物品由客户通过卡车送达仓储中心,然后该入库叉车将卡车上的货物卸载、运输和存放到仓库中对应的货架上。客户卡车到达入库点时,如果入库叉车空闲,则可以立即获得卸货;若果入库叉车正在为其他卡车卸货,则客户卡车进行排队等待,排队服务规则遵循FIFO原则。令客户卡车到达时间间隔服从均值为5分钟的指数分布、卸货入库的服务时间服从U(2, 8)分钟的均匀分布。使用仿真方法分析入库叉车将第100辆卡车货物卸载入库后,该系统的相关绩效指标

24 第04讲 仿真模型设计与实现 提纲 一、排队系统概述 三、排队系统事件例程分析 四、仿真模型的EXCEL实现 五、仿真模型的MATLAB实现
第04讲 仿真模型设计与实现 提纲 一、排队系统概述 二、事件调度法 三、排队系统事件例程分析 单队列单服务台SQSS系统事件例程 单队列多服务台SQMS系统事件例程 四、仿真模型的EXCEL实现 SQSS系统手工仿真的Excel实现 SQSS系统仿真的Excel实现 五、仿真模型的MATLAB实现 SQSS系统仿真的Matlab实现 SQMS系统仿真的Matlab实现

25 五 仿真模型的Matlab实现-SQSS 初始化程序 到达例程 总控程序 离开例程 时间程序 报表程序
function sqssMoreReport() %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % calculate the system's performance when 100 customers served % edit by at 2014/2/10 sqss=initData(); runTimes=0; %preventing the unlimited while loop while(sqss.servedCustomers<sqss.totalCustomers) sqss=timeUpdate(sqss); if sqss.nextEvent==1 sqss=arriveProcess(sqss); else sqss=departProcess(sqss); end runTimes=runTimes+1; if runTimes>1000 break; report(sqss); function sqss=initData() sqss=struct(... 'simuClock',0,'totalCustomers',100,'nextEvent',0,... 'arriveMean',5,'serveTimeMin',2,'serveTimeMax',8,... 'event1Time',0,'event2Time',inf,... 'queueLength',0,'serverStatus',0,... 'comingCustomers',0,'servedCustomers',0,... 'eachArriveTime',[],'eachLeaveTime',[],... 'eachServeTime',[],'eachServeStartTime',[],... 'eachQueueLength',[],'eachQueueStartTime',[]); sqss.event1Time=arriveInterval(sqss.arriveMean); function sOut=timeUpdate(sIn) sOut=sIn; if sIn.event2Time<sIn.event1Time sOut.nextEvent=2; sOut.simuClock=sIn.event2Time; sOut.nextEvent=1; sOut.simuClock=sIn.event1Time; function sOut=arriveProcess(sIn) sOut.event1Time=sIn.simuClock+arriveInterval(sIn.arriveMean); sOut.comingCustomers=sIn.comingCustomers+1; % record this customer arrive time sOut.eachArriveTime=[sOut.eachArriveTime;sIn.simuClock]; if sIn.serverStatus==1 sOut.queueLength=sIn.queueLength+1; sOut.serverStatus=1; midServeTime=serveTime(sIn); sOut.event2Time=sIn.simuClock+midServeTime; % update server time data sOut.eachServeTime=[sOut.eachServeTime;midServeTime]; sOut.eachServeStartTime=[sOut.eachServeStartTime;sIn.simuClock]; % update queueLength data sOut.eachQueueLength=[sOut.eachQueueLength;sOut.queueLength]; sOut.eachQueueStartTime=[sOut.eachQueueStartTime;sIn.simuClock]; function sOut=departProcess(sIn) sOut.servedCustomers=sIn.servedCustomers+1; % record this customer leave time sOut.eachLeaveTime=[sOut.eachLeaveTime;sIn.simuClock]; if sIn.queueLength==0 sOut.serverStatus=0; sOut.event2Time=inf; sOut.queueLength=sIn.queueLength-1; function report(sIn) disp('**************************************************'); disp('***** simulation for SQSS is end ****'); midStr=['simulation finish time(min): ' num2str(sIn.simuClock)]; disp(midStr); midStr=['total in customer quantity: ' num2str(sIn.comingCustomers)]; midStr=['served customer quantity: ' num2str(sIn.servedCustomers)]; midStr=['now customer in queue:' num2str(sIn.queueLength)]; midStr=['max queue length:' num2str(max(sIn.eachQueueLength))]; midStr=['average queue length:' num2str(mean(sIn.eachQueueLength))]; midData=mean(sIn.eachLeaveTime(1:sIn.servedCustomers)-sIn.eachArriveTime(1:sIn.servedCustomers)); midStr=['average through time(min):' num2str(midData)]; midData=sIn.eachServeStartTime(1:sIn.servedCustomers)-sIn.eachArriveTime(1:sIn.servedCustomers); midStr=['average wait time(min):' num2str(mean(midData))]; midStr=['longest wait time(min):' num2str(max(midData))]; midStr=['now customer in server:' num2str(sIn.serverStatus)]; midStr=['average serve time(min):' num2str(mean(sIn.eachServeTime))]; midBeforeFinishTime=sIn.eachServeTime(sIn.eachServeStartTime<sIn.simuClock); midStr=['server busy percent:' num2str(sum(midBeforeFinishTime)/sIn.simuClock*100) '%']; function interTime=arriveInterval(mean) interTime=-log(rand(1))*mean; function serveTime=serveTime(sIn) serveTime=sIn.serveTimeMin+(sIn.serveTimeMax-sIn.serveTimeMin)*rand(); 离开例程 时间程序 报表程序

26 五 仿真模型的Matlab实现-SQMS

27 思考练习题


Download ppt "第04讲 仿真模型设计与实现."

Similar presentations


Ads by Google