MM1排队系统
- #coding=utf-8
- import time
- import random as rd
- #import math
- import pylab as pl
- def simulate(nameda,u):
- arriveInternal=0
- serviceTime=0
- serverCondition=0 #0表示服务台空闲,1表示忙碌
- waitTime=0
- stayTime=[]
- tempArriveEventTime=[10000000]
- tempLeaveEventTime=[10000000]
- #tempArriveEventTime.append(10000000)
- simulateTotalTime=1000000 #仿真时长
- simulateClock=0
- EntityNumber=0
- queneLength=0
- averageStayTime=0
- currentArriveTime=0
- currentLeaveTime=0
- formerArriveTime=0
- formerLeaveTime=0
- lossMessage=0
- #生成仿真表,包括实体的到达时间和离开时间
- while simulateClock<=simulateTotalTime:
- #保存上一个实体的到达、离开时间
- formerArriveTime=currentArriveTime
- formerLeaveTime=currentLeaveTime
- #tempFormerLeaveTime=currentLeaveTime
- ####################随机数生成
- arriveInternal=rd.expovariate(nameda)
- serviceTime=rd.expovariate(u)
- #######到达时间
- if EntityNumber==0:
- currentArriveTime=arriveInternal
- else:
- currentArriveTime=formerArriveTime+arriveInternal
- #仿真结束与否判断
- if currentArriveTime>=simulateTotalTime:
- break
- #等待时间
- if EntityNumber>0 and currentArriveTime<formerLeaveTime:
- waitTime=formerLeaveTime-currentArriveTime
- else:
- waitTime=0
- ##离开时间
- currentLeaveTime=currentArriveTime+waitTime+serviceTime
- #仿真结束与否判断
- if currentLeaveTime>simulateTotalTime:
- break
- ###仿真时钟
- if EntityNumber==0:
- simulateClock=currentLeaveTime#表示实体接受服务,并离开。
- stayTime.append(currentLeaveTime)
- elif queneLength>=10:
- #print("message missed")
- currentLeaveTime=formerLeaveTime
- lossMessage+=1
- ###排队的实体
- if currentArriveTime>=simulateClock and EntityNumber!=0:#开始处理队列的实体
- if len(tempArriveEventTime)>1:
- minValue=min(tempArriveEventTime)
- minIndex=tempArriveEventTime.index(minValue)
- while minValue<=simulateClock:
- simulateClock=tempLeaveEventTime[minIndex]#实体接受了服务的情况下才会重置仿真时钟
- tempArriveEventTime.pop(minIndex)
- tempLeaveEventTime.pop(minIndex)
- if queneLength>0:
- queneLength-=1
- minValue=min(tempArriveEventTime)
- minIndex=tempArriveEventTime.index(minValue)
- #print("one processed")
- else:
- simulateClock=currentLeaveTime
- stayTime.append(currentLeaveTime-currentLeaveTime)
- #print("one processed")
- if currentArriveTime<simulateClock and EntityNumber!=0 :
- tempArriveEventTime.append(currentArriveTime)
- tempLeaveEventTime.append(currentLeaveTime)
- queneLength+=1
- stayTime.append(currentLeaveTime-currentArriveTime)
- ###############
- EntityNumber+=1
- if EntityNumber%1000000==0:
- print("arriveTime:"+str(currentArriveTime)+",leaveTime:"+str(currentLeaveTime))
- lossRate=lossMessage/EntityNumber
- averageStayTime=sum(stayTime)/len(stayTime)
- print("loss rate:"+str(lossMessage/EntityNumber))
- print("lossMessage:"+str(lossMessage))
- print("entity:"+str(EntityNumber))
- return lossRate,averageStayTime
- pl.figure(1) #创建图表1,并选择图表1
- ax1=pl.subplot(211) #在图表1中创建子图1
- ax2=pl.subplot(212) #在图表1中创建子图2
- start=time.clock()
- for i in range(100):
- a,b=simulate(8, 10)
- print(str(i+1)+" simulate")
- pl.sca(ax1)
- #pl.plot(i,a,'o')
- pl.ylabel("loss rate")
- pl.scatter(i,a)
- #pl.ylim(0,1)
- pl.sca(ax2)
- #pl.plot(i,b,'o')
- pl.scatter(i,b)
- pl.ylabel("stay time")
- minutes=(time.clock()-start)/60
- print("cost minutes:"+str(minutes))
- pl.show()
理论部分参考:http://mi.gxu.edu.cn/jpkc/yunchouxue/resource_1info.php?id=29
MM1排队系统的更多相关文章
- 利用JS模拟排队系统
我爱撸码,撸码使我感到快乐!大家好,我是Counter.今天给大家分享的是js模拟排队系统,刚开始有排队序列,序列里有vip用户和普通用户,vip用户永远位于普通用户的前面,只有当当前vip用户都办理 ...
- matlab实现M/M/1排队系统
Matlab实现. 分为主函数 MyLine 和被调用函数 Func. 主函数 MyLine 实现在 Func 函数的基础上实现序贯法, 将平均等待队长作为每次模拟的 X,求出置信区间.Func 函数 ...
- 叫号系统排队系统挂号系统实现(JAVA队列)
关于队列,使用的地方很的多. 现实中有许多的样例. 比方医院的挂号系统,银行里的叫号系统,食堂里的排队打饭等等.市场上又这种排队取号的设备.他们的功能基本例如以下: 1.系统可联网联机统一发号.2.系 ...
- 赴美工作常识(Part 6 - 绿卡排队)
上一篇<赴美工作常识(Part 5 - 绿卡优先级)>解释完排队的优先级是怎么确定的,以及 PERM 和 I–140 表的意义,接下来就要解释一下队具体是怎么排的以及排到之后的 I–485 ...
- 三、Redis基本操作——List
小喵的唠叨话:前面我们介绍了Redis的string的数据结构的原理和操作.当时我们提到Redis的键值对不仅仅是字符串.而这次我们就要介绍Redis的第二个数据结构了,List(链表).由于List ...
- Golang之chan/goroutine(转)
原文地址:http://tchen.me/posts/2014-01-27-golang-chatroom.html?utm_source=tuicool&utm_medium=referra ...
- 【商业源码】生日大放送-Newlife商业源码分享
今天是农历六月二十三,是@大石头的生日,记得每年生日都会有很劲爆的重量级源码送出,今天Newlife群和论坛又一次疯狂了,吃水不忘挖井人,好的东西肯定要拿到博客园分享.Newlife组件信息: 论坛: ...
- 建模算法(七)——排队论模型
(一)基本概念 一.排队过程的一般表示 凡是要求服务的对象称为顾客,凡是为顾客服务的称为服务员 二.排队系统的组成和特征 主要由输入过程.排队规则.服务过程三部分组成 三.排队模型的符号表示 1.X: ...
- get github
Git是一个分布式的版本控制系统,最初由Linus Torvalds编写,用作Linux内核代码的管理.在推出后,Git在其它项目中也取得了很大成功,尤其是在Ruby社区中.目前,包括Rubinius ...
随机推荐
- C 解决百度知道的一个高中题
前言 今天看见一道百度知道上提问,是这样的. 仔细算了一下, 花了30min.才整出来了,估计现在回去参加高考,数学及格都悬.有时候想做这样的题有什么用, 学这些东西有什么意义,在这种方面浪费时间有什 ...
- CentOS 7 + nginx + uwsgi + web2py (502 bad gateway nginx)
Web2py开发包中自带的setup-web2py-nginx-uwsgi-centos64.sh脚本, 只能运行在CentOS 6.4中使用, 如果直接在CentOS 7 中使用该脚本布署后, 访问 ...
- App创意项目助跑计划
APP创意项目助跑计划 该计划旨在帮助同学们将各种脑中稀奇古怪的想法借助互联网/移动互联网 相关的技术变成真实的项目. 谱写你的故事,从此刻开始! 我们帮助你提高编程(Java.C++.Objecti ...
- 浅析Objective-C字面量
编写Objective-C程序时,总会用到某几个类,它们属于Foundation框架.虽然从技术上来说,不用Foundation框架也能写出Objective-C代码,但实际上却经常要用到此框架.这几 ...
- Swift function how to return nil
这两天在学习Stanford出品的iOS7的课程,这个课程去年也看过,但是看到第3课就不行了,满篇的OC,把人都搞晕了.这段时间因为要写个iOS的App,正好赶上了Swift问世,所以趁着这股劲继续学 ...
- JS如何获取多个相同class标签并分别再输出各自的文本
function getClass(boo) { var span = $("span.w");//获取所有的span标签 <span class="w" ...
- Qt隐藏标题栏
setWindowFlags (Qt::CustomizeWindowHint)setWindowFlags (Qt::FramelessWindowHint)两个函数都可以去掉标题栏,区别是第一个可 ...
- Introduction to Haskell
"I know why you're here. ...why you hardly sleep, why night after night, you sit by your comput ...
- 微软职位内部推荐-Software Engineer II-SDP
微软近期Open的职位: Position: SDE II The R&D of Shared Data Platform at Application and Services Group ...
- PBOC规范下的java卡介绍
JAVA卡与智能卡 什么是 JAVA 卡呢?JAVA 卡是一种可以运行 JAVA 程序的接触式微处理器智能卡.1996 年 11 月,JAVA 卡 1.0 版本的规范正式发布了.如今 JAVA 卡最新 ...