多服务台排队系统仿真基于c语言,带优先级的多服务台排队系统Monte Carlo模拟
[摘 要]本文研究带优先级的多服务台的随机模拟排队系统中的排队次序问题,为各个排队顾客引入服务优先级,利用Monte Carlo算法对服务系统进行仿真计算,预测其大致接受服务时间区间。在医院病床安排的实例中,借助于计算机操作系统中的动态优先级调度算法,可减少患者平均等待入院时间,从而提高服务台的利用率,同时减小了顾客最长等待时间。该方法有较强应用价值。
[关键词]等待时间 优先级 蒙特卡洛 服务时间
一、问题提出
(一)问题叙述
现实中的很多服务,等待时间超过一天,比较典型的是医院住院及手术安排的问题。尽管随机服务与排队论问题早已得到深入研究,但某服务系统共有服务台M个,其服务分四大类:每种服务目前的规则是:每周一、三处理 ;而是紧急服务,处理中心有空闲时立即安排处理,其他服务可根据需要安排,但是不安排在周一、周三。系统的示意图见图1。本文要研究的问题是如何建立数学模型,实现对服务台的合理安排,根据目前接受服务顾客及等待接受服务顾客的统计情况,在开始排队时预测其大致接受服务时间区间。
(二)名词解释
1.等待服务时间(等待时间):顾客从开始排队到进入服务台的时间。
2.最长等待时间:等待时间最长的顾客需要等待的时间。
3.动态优先级调度算法:Monte Carlo算法的一种,计算机操作系统中CPU调度的经典算法之一,利用动态优先级实现对就绪进程的调度。就绪进程占用CPU时间愈长,该进程优先级越低,反之,优先级越高;就绪进程等待CPU时间越长,优先级越高,反之越低。在该模型中引入此算法,相当于降低用户平均等待时间和最长等待时间,从而提高顾客的满意程度和服务系统服务台利用率。
二、问题研究
(一)基本假设
1.服务系统条件充分,而且预测的时间范围内,顾客到来情况是平稳的,且顾客按正常时间离开,无长时间占用服务台的现象。
2.假设顾客到来的事件流是一泊松流,且不会等待不耐烦而离去。
3.各个服务台功能相同。
(二)符号说明
: 平均等待时间
: 最长等待时间
: 第i类服务平均每天到来人数
: 在预测时间范围内第i类服务每天到来人数的模拟值
:需要第类服务的顾客在星期到来需要在服务系统接受服务的时间
: 等待队列中 号顾客已经等待的时间
:星期到来的号顾客预计要接受服务的时间
( =1,2,3,4,5,6,7)
: 编号为的顾客的优先级
:每天平均离开的人数
:预测的第类服务的顾客需要等待的时间
:当前等待队列中的人数
:每天到来的第类服务的人数
:第类服务的顾客平均接受服务时间
(三)模型的建立
本模型要实现的目标是即提高服务系统接受服务部的吞吐量,进而降低顾客等待时间,实现服务系统与顾客的互利。基于该目标,本文引入经典的动态优先级调度算法,初始时给予需要接受服务时间较短的顾客更高的优先级(计算机模拟结果显示,此项做法可缩短顾客平均等待时间)。随着等待时间的延长,逐步提高顾客的优先级,因而可将顾客最长等待时间缩短。
根据上述思路,本文建立一个基于顾客优先级的调度模型,并引入Monte Carlo算法。
3.1随机数的产生
①确定
由于在不重叠时间区间内到服务系统到来的不同服务顾客是相互独立的,故可以假设顾客到来的事件流是一泊松流,并满足如下表达式:
如果相继两个时间出现的间隔时间为负指数分布,则在某一时间间隔内时间出现的次数满足泊松分布,于是可以用负指数分布的随机变量来组合产生泊松分布的随机数列。
设为参数负指数分布的随机数序列,因为有
因此,将 值按序累加,使得满足关系式:
则求得的就是参数的泊松分布的随机数。
②确定
在假设条件下,可认为近似等于各类顾客平均接受服务时间,进而根据号顾客的服务类型和 的值确定 。
3.2 优先级模型的建立
首先,在到来时为每个顾客依次编号并分配初始优先级,紧急服务顾客的优先级最大,可近似于无穷大,即该优先级高于其它任何服务顾客在任何情况下的优先级,从而保证紧急服务顾客尽快接受服务。其它服务中编号为的顾客的优先级可按下列关系式确定:
其中为比例系数。根据的变化实时调整号顾客的优先级。每天按照新的优先级次序把顾客排成新的等待队列,优先级高的顾客排在队列前面,反之,优先级低的排在后面。只要有可利用服务台,先安排紧急服务顾客进入,在还有剩余服务台的情况下,根据等待队列的顺序安排需要有其它类型服务的顾客接受服务。当不同顾客的优先级相同时,按照FCFS的规则安排接受服务。
在算法设计中,初始时赋予需要接受服务时间较短的顾客更高的优先级,从而使减小;同时随着的增长,顾客优先级提高,避免了顾客长时间等待的情况。这样既保证了需要接受服务时间较短的顾客优先接受以获取较高的服务台利用率,又避免了某些顾客需要长时间等待。
比例系数用于调整两个因素(和)在不同条件、前提和要求下的权重,在该模型中,不妨取 ,可通过模拟结果验证取值的合理性。
三、Monte Carlo算法设计
根据上述模型,设计算法如下:
Step1:在泊松流假设下生成一天内各类顾客到来的随机数,并将这些不同服务的顾客按到来时间随机排序,到来时对其编号(根据服务类型)赋予每个顾客一个初始优先级(此时 ),并将其加入等待队列。
Step2: 计算当天要离开的人数。
Step3: 如有紧急服务顾客等待接受服务,则按照FCFS的规则优先安排此类顾客接受服务;如没有紧急服务顾客等待或将其安排完毕后仍有空闲服务台,则按照优先级由大到小的顺序安排等待队列中的顾客进入,直到服务台完全利用或等待队列为空。
Step4: 第二天调整等待队列中顾客的使得 ,带入 调整优先级,转入Step1循环执行。
四、医院病床安排的实例分析
下面是某眼科诊所2008-7-13到2008-9-11的病人信息分别是各类病人每天的平均就诊人数、一周中每天入院的不同类型病人平均住院时间、当前医院病床利用情况等相关数据。其中,白内障相当于,外伤对应于 。
表 1 星期一 星期二 星期三 星期四 星期五 星期六 星期日
白内障 5.4 4.4 7.5 7.375 5.692308 5 3.611111
白内障(双眼) 12.25 10.625 10.13333 9.125 7.8 6.857143 6
青光眼 11 10 10 10.8 10.83333 11.33333 8.333333
视网膜疾病 13.5 13 11.2 13.15385 11.42105 13.32143 12.54545
外伤 7.1 6.777778 5.75 7.5 7 7 7.666667
表 2每天入院的患有各类眼疾的病人平均住院时间
白内障 白内障(双眼) 青光眼 视网膜疾病 外伤
1.639344262 2.180327869 1.032786885 2.786885246 1.049180328
表 3各类眼疾平均日就诊人数
通过对表2的分析,得到五种病的平均住院时间为
白内障 白内障(双眼) 青光眼 视网膜疾病 外伤
平均住院时间 5.568346 8.970068 10.32857 12.59168 6.970635
表 4五种病的平均住院时间
将以上数据输入Monte Carlo算法,经计算,得到结果:
平均等待时间(单位:天)
FCFS 12.95845
基于优先级的病床安排模型 8.91789
表 5
立刻可以看出,该算法的安排结果远远好于先到先服务的安排模式。
五、排队预测模型
在(预测的第种病的患者需要等待的天数)天内,出院人数为 ,即共有个床位可接纳新的病人,利用出院人数等于入院人数,可建立等式进而求解 的值。
以预测一名视网膜疾病患者的入院时间为例进行说明:因为视网膜疾病患者平均住院时最长,故其初始优先级最低。经分析,在 天内,排在这名患者前面进入医院接受治疗的患者可分为以下几类:
①在该患者门诊就诊时已经进入等待住院队列中的所有患者。此类患者人数为 ,是已知数据。
②天内所有的急症患者,可近似等于 。
③天内就诊的患有其它几类疾病(白内障、双眼白内障、青光眼)的患者在该患者入院之前的时间内,优先级超过该患者的。分析此情况时,需利用上文建立的基于患者优先级的病床分配模型,计算优先级的表达式为:,可将其简化为基于优先级的病床安排的简化模型,具体做法为:将比例系数设定为1,将一周中每天入院的同类病人住院时间近似为相等的,即利用代替。经分析比较,在该患者就诊后的天内就诊的青光眼患者具有更高的优先级,同理,在该患者就诊后天内就诊的双眼白内障患者、天内就诊的单眼白内障患者也具有更高的优先级。综上所述,此类患者总数为: 。
根据以上分析可得到等式:
对于其他几类疾病患者,预测入院时间的情况类似该视网膜疾病患者,经归纳总结,得到预测患者入院时间的通式:
经整理可得:
利用计算机模拟运用优先级模型进行病床安排的实际情况,运用MATLAB软件统计整理每天出院人数的数据,通过最小二乘估计,得到
当置信度为0.95时,置信区间为 ,则近似将每天平均出院人数的上界定为10.4188,下界定为8.1582,将其带入上式得到
这就是利用该模型预测出的病人入住时间区间。
经过代入数据计算,当下一位病人患病类型依次为白内障、双眼白内障、青光眼、视网膜疾病时,预测该病人入住时间区间分别是[7.5754,9.98638]、[10.3804,13.6841]、[11.4277,15.0648]、[13.3683,17.623];通过计算机模拟得到该病人的等待时间,经多次仿真计算,得到的以上区间的置信度分别为99.48%、80.43%、89.92%、99.32%,进一步证明了该预测方法的准确性与可靠性。
六、小结
用动态优先级调度算法随机模拟是本文模型的核心,利用计算机编程进行模型得出了令人满意的结果,可以满足实用的需要。排队预测模型中又推导出了接受服务时间的预测公式,具有广大的推广空间。
参考文献:
[1] 刁在筠,刘桂真,宿洁,马建华.运筹学[M].北京:高等教育出版社.2007年.
[2] 肖立顺,石玉文,黄勇博.银行排队系统的随机分析.信息与电脑[J].2009年第8期.
[3] 黄水松,黄干平等.计算机操作系统[M].武汉:武汉大学出版社.2003年.
[4] 赵静,但奇.数学建模与数学实验[M].北京:高等教育出版社.2003年.
[5] 李骥昭,刘义山.成批到达多服务台排队系统模型分析[J].机电产品开发与创新.第22卷第3期.
[6] 刘次华,何少锋.批量到达的离散时间排队系统[J].华中科技大学学报.第33卷第10期.
多服务台排队系统仿真基于c语言,带优先级的多服务台排队系统Monte Carlo模拟相关推荐
- mm1排队系统仿真matlab实验报告,matlab仿真实验报告_mm1排队系统仿真matlab实验报告资料...
M/M/1排队系统实验报告 一.实验目的 本次实验要求实现M/M/1单窗口无限排队系统的系统仿真,利用事件调度法实现离散事件系统仿真,并统计平均队列长度以及平均等待时间等值,以与理论分析结果进行对比. ...
- 基于Python语言的PUBG游戏数据可视化分析系统
[success]写于2019年大作业[/success] 博客链接:https://www.iamzlt.com/?p=299 代码链接请到博客链接内查看. 摘要 随着网络技术的兴起和普及,网络游戏 ...
- 火车售票系统c语言编程,基于C语言实现简单的12306火车售票系统.pdf
基基于于C语语言言实实现现简简单单的的12306火火车车售售票票系系统统 程序设计要求用C语言写一个简单的火车售票系统,主要实现的功能为: 入班次信息 浏览班次信息 按班次号查询 按终点站查询 按余票 ...
- 火车票售票系统C语言大作业,基于C语言实现简单的12306火车售票系统
程序设计要求用C语言写一个简单的火车售票系统,主要实现的功能为: 录入班次信息 浏览班次信息 按班次号查询 按终点站查询 按余票数量排序保存 售票 退票 更新班次信息 退出系统 所有的班次信息保存在n ...
- pthread售票多窗口共同C语言,基于C语言实现简单的12306火车售票系统
程序设计要求用C语言写一个简单的火车售票系统,主要实现的功能为: 录入班次信息 浏览班次信息 按班次号查询 按终点站查询 按余票数量排序保存 售票 退票 更新班次信息 退出系统 所有的班次信息保存在n ...
- matlab与单边带系统仿真,基于Matlab 单边带系统仿真研究
0 引言本文引用地址:http://www.eepw.com.cn/article/201809/388626.htm 根据通信理论,单边带系统将功率全部转换到了有用信息的边带,使用的带宽只有双边带调 ...
- 基于Go语言GoFrame+Vue+ElementUI的OA办公系统
项目介绍 一款 Go 语言基于GoFrame.Vue.ElementUI.MySQL等框架精心打造的一款模块化.插件化.高性能的前后端分离架构敏捷开发框架,可快速搭建前后端分离后台管理系统,本着简化开 ...
- 基于Go语言Iris+Vue+ElementUI的OA办公系统
项目介绍 一款 Go 语言基于Iris.Vue.ElementUI.MySQL等框架精心打造的一款模块化.插件化.高性能的前后端分离架构敏捷开发框架,可快速搭建前后端分离后台管理系统,本着简化开发.提 ...
- 基于Go语言Echo+Vue+ElementUI的OA办公系统
项目介绍 一款 Go 语言基于Echo.Vue.ElementUI.MySQL等框架精心打造的一款模块化.插件化.高性能的前后端分离架构敏捷开发框架,可快速搭建前后端分离后台管理系统,本着简化开发.提 ...
- 在线客服系统源码(外贸多语言带翻译网页在线客服系统源码完整搭建)
什么是在线客服系统? 在线客服系统是通过独立应用程序或嵌入式脚本代码进行的实时即时通讯消息交换.早期互联网发展还不流行的时候,那时候的网页结构还比较单一,很多企业的网站上只是简单挂一个邮箱地址,qq按 ...
最新文章
- [转]构建基于WCF Restful Service的服务
- 《JUnit实战(第2版)》—第2章2.1节探索JUnit核心
- Capital one TPS整理
- React使用的扩展
- LeetCode题库7:反转整数——JavaScript解答
- Spring Boot Test 进行JPA 测试保存数据到数据库
- 恢复oracle中误删除delete的数据、drop掉的表
- 图片清晰度识别之改进ssim算法
- 改进一个asp.net通用分页显示辅助类
- 存储器容量计算及相关概念
- tenda无线网卡Linux驱动,Ubuntu 10.04上腾达W541U V2.0 无线网卡驱动的使用
- Python数据字典处理Excel,并统计总数,画出饼图
- android标题栏跑马灯,Android跑马灯效果
- What do you think about this itinerary?
- 《安卓逆向》查壳工具,权限查询,提取工具
- bitcoin源码分析
- 【C语言学习笔记】《C程序设计语言》读后感
- 计算机内存条能装几个,笔记本电脑可以装几个内存条_笔记本电脑最多可以插多少条内存-win7之家...
- [Linux][问题解决]Linux访问本地网站可以,但是外部访问不行
- 抖音落地页跳转添加微信好友的方法
热门文章
- Linux是怎么来的?终于有一篇文章讲清楚了
- python样本期望值_机器学习中的概率论与梳理统计(Python实现数学期望、方差等)...
- android+背景虚化,android背景虚化
- 计算机英语词汇汇总,计算机英语词汇汇总
- E45: ‘readonly‘ option is set (add ! to override)解决办法
- php升序排列,php 基础问题表单里面怎么升序和降序?
- win10 网络重置
- 关于如何使用java,将Office文件转换成PDF格式
- 表格如何把边框线条加粗
- 12306验证码识别V1.5