1. #coding=utf-8
  2. import time
  3. import random as rd
  4. #import math
  5. import pylab as pl
  6. def simulate(nameda,u):
  7. arriveInternal=0
  8. serviceTime=0
  9. serverCondition=0 #0表示服务台空闲,1表示忙碌
  10. waitTime=0
  11. stayTime=[]
  12. tempArriveEventTime=[10000000]
  13. tempLeaveEventTime=[10000000]
  14. #tempArriveEventTime.append(10000000)
  15. simulateTotalTime=1000000 #仿真时长
  16. simulateClock=0
  17. EntityNumber=0
  18. queneLength=0
  19. averageStayTime=0
  20. currentArriveTime=0
  21. currentLeaveTime=0
  22. formerArriveTime=0
  23. formerLeaveTime=0
  24. lossMessage=0
  25. #生成仿真表,包括实体的到达时间和离开时间
  26. while simulateClock<=simulateTotalTime:
  27. #保存上一个实体的到达、离开时间
  28. formerArriveTime=currentArriveTime
  29. formerLeaveTime=currentLeaveTime
  30. #tempFormerLeaveTime=currentLeaveTime
  31. ####################随机数生成
  32. arriveInternal=rd.expovariate(nameda)
  33. serviceTime=rd.expovariate(u)
  34. #######到达时间
  35. if EntityNumber==0:
  36. currentArriveTime=arriveInternal
  37. else:
  38. currentArriveTime=formerArriveTime+arriveInternal
  39. #仿真结束与否判断
  40. if currentArriveTime>=simulateTotalTime:
  41. break
  42. #等待时间
  43. if EntityNumber>0 and currentArriveTime<formerLeaveTime:
  44. waitTime=formerLeaveTime-currentArriveTime
  45. else:
  46. waitTime=0
  47. ##离开时间
  48. currentLeaveTime=currentArriveTime+waitTime+serviceTime
  49. #仿真结束与否判断
  50. if currentLeaveTime>simulateTotalTime:
  51. break
  52. ###仿真时钟
  53. if EntityNumber==0:
  54. simulateClock=currentLeaveTime#表示实体接受服务,并离开。
  55. stayTime.append(currentLeaveTime)
  56.  
  57. elif queneLength>=10:
  58. #print("message missed")
  59. currentLeaveTime=formerLeaveTime
  60. lossMessage+=1
  61. ###排队的实体
  62.  
  63. if currentArriveTime>=simulateClock and EntityNumber!=0:#开始处理队列的实体
  64. if len(tempArriveEventTime)>1:
  65. minValue=min(tempArriveEventTime)
  66. minIndex=tempArriveEventTime.index(minValue)
  67. while minValue<=simulateClock:
  68. simulateClock=tempLeaveEventTime[minIndex]#实体接受了服务的情况下才会重置仿真时钟
  69. tempArriveEventTime.pop(minIndex)
  70. tempLeaveEventTime.pop(minIndex)
  71. if queneLength>0:
  72. queneLength-=1
  73. minValue=min(tempArriveEventTime)
  74. minIndex=tempArriveEventTime.index(minValue)
  75. #print("one processed")
  76. else:
  77. simulateClock=currentLeaveTime
  78. stayTime.append(currentLeaveTime-currentLeaveTime)
  79. #print("one processed")
  80. if currentArriveTime<simulateClock and EntityNumber!=0 :
  81. tempArriveEventTime.append(currentArriveTime)
  82. tempLeaveEventTime.append(currentLeaveTime)
  83. queneLength+=1
  84. stayTime.append(currentLeaveTime-currentArriveTime)
  85.  
  86. ###############
  87. EntityNumber+=1
  88. if EntityNumber%1000000==0:
  89. print("arriveTime:"+str(currentArriveTime)+",leaveTime:"+str(currentLeaveTime))
  90. lossRate=lossMessage/EntityNumber
  91. averageStayTime=sum(stayTime)/len(stayTime)
  92. print("loss rate:"+str(lossMessage/EntityNumber))
  93. print("lossMessage:"+str(lossMessage))
  94. print("entity:"+str(EntityNumber))
  95. return lossRate,averageStayTime
  96. pl.figure(1) #创建图表1,并选择图表1
  97. ax1=pl.subplot(211) #在图表1中创建子图1
  98. ax2=pl.subplot(212) #在图表1中创建子图2
  99. start=time.clock()
  100. for i in range(100):
  101. a,b=simulate(8, 10)
  102. print(str(i+1)+" simulate")
  103. pl.sca(ax1)
  104. #pl.plot(i,a,'o')
  105. pl.ylabel("loss rate")
  106. pl.scatter(i,a)
  107. #pl.ylim(0,1)
  108. pl.sca(ax2)
  109. #pl.plot(i,b,'o')
  110. pl.scatter(i,b)
  111. pl.ylabel("stay time")
  112. minutes=(time.clock()-start)/60
  113. print("cost minutes:"+str(minutes))
  114. pl.show()

  115. 理论部分参考:http://mi.gxu.edu.cn/jpkc/yunchouxue/resource_1info.php?id=29

MM1排队系统的更多相关文章

  1. 利用JS模拟排队系统

    我爱撸码,撸码使我感到快乐!大家好,我是Counter.今天给大家分享的是js模拟排队系统,刚开始有排队序列,序列里有vip用户和普通用户,vip用户永远位于普通用户的前面,只有当当前vip用户都办理 ...

  2. matlab实现M/M/1排队系统

    Matlab实现. 分为主函数 MyLine 和被调用函数 Func. 主函数 MyLine 实现在 Func 函数的基础上实现序贯法, 将平均等待队长作为每次模拟的 X,求出置信区间.Func 函数 ...

  3. 叫号系统排队系统挂号系统实现(JAVA队列)

    关于队列,使用的地方很的多. 现实中有许多的样例. 比方医院的挂号系统,银行里的叫号系统,食堂里的排队打饭等等.市场上又这种排队取号的设备.他们的功能基本例如以下: 1.系统可联网联机统一发号.2.系 ...

  4. 赴美工作常识(Part 6 - 绿卡排队)

    上一篇<赴美工作常识(Part 5 - 绿卡优先级)>解释完排队的优先级是怎么确定的,以及 PERM 和 I–140 表的意义,接下来就要解释一下队具体是怎么排的以及排到之后的 I–485 ...

  5. 三、Redis基本操作——List

    小喵的唠叨话:前面我们介绍了Redis的string的数据结构的原理和操作.当时我们提到Redis的键值对不仅仅是字符串.而这次我们就要介绍Redis的第二个数据结构了,List(链表).由于List ...

  6. Golang之chan/goroutine(转)

    原文地址:http://tchen.me/posts/2014-01-27-golang-chatroom.html?utm_source=tuicool&utm_medium=referra ...

  7. 【商业源码】生日大放送-Newlife商业源码分享

    今天是农历六月二十三,是@大石头的生日,记得每年生日都会有很劲爆的重量级源码送出,今天Newlife群和论坛又一次疯狂了,吃水不忘挖井人,好的东西肯定要拿到博客园分享.Newlife组件信息: 论坛: ...

  8. 建模算法(七)——排队论模型

    (一)基本概念 一.排队过程的一般表示 凡是要求服务的对象称为顾客,凡是为顾客服务的称为服务员 二.排队系统的组成和特征 主要由输入过程.排队规则.服务过程三部分组成 三.排队模型的符号表示 1.X: ...

  9. get github

    Git是一个分布式的版本控制系统,最初由Linus Torvalds编写,用作Linux内核代码的管理.在推出后,Git在其它项目中也取得了很大成功,尤其是在Ruby社区中.目前,包括Rubinius ...

随机推荐

  1. C 解决百度知道的一个高中题

    前言 今天看见一道百度知道上提问,是这样的. 仔细算了一下, 花了30min.才整出来了,估计现在回去参加高考,数学及格都悬.有时候想做这样的题有什么用, 学这些东西有什么意义,在这种方面浪费时间有什 ...

  2. CentOS 7 + nginx + uwsgi + web2py (502 bad gateway nginx)

    Web2py开发包中自带的setup-web2py-nginx-uwsgi-centos64.sh脚本, 只能运行在CentOS 6.4中使用, 如果直接在CentOS 7 中使用该脚本布署后, 访问 ...

  3. App创意项目助跑计划

    APP创意项目助跑计划 该计划旨在帮助同学们将各种脑中稀奇古怪的想法借助互联网/移动互联网 相关的技术变成真实的项目. 谱写你的故事,从此刻开始! 我们帮助你提高编程(Java.C++.Objecti ...

  4. 浅析Objective-C字面量

    编写Objective-C程序时,总会用到某几个类,它们属于Foundation框架.虽然从技术上来说,不用Foundation框架也能写出Objective-C代码,但实际上却经常要用到此框架.这几 ...

  5. Swift function how to return nil

    这两天在学习Stanford出品的iOS7的课程,这个课程去年也看过,但是看到第3课就不行了,满篇的OC,把人都搞晕了.这段时间因为要写个iOS的App,正好赶上了Swift问世,所以趁着这股劲继续学 ...

  6. JS如何获取多个相同class标签并分别再输出各自的文本

    function getClass(boo) { var span = $("span.w");//获取所有的span标签 <span class="w" ...

  7. Qt隐藏标题栏

    setWindowFlags (Qt::CustomizeWindowHint)setWindowFlags (Qt::FramelessWindowHint)两个函数都可以去掉标题栏,区别是第一个可 ...

  8. Introduction to Haskell

    "I know why you're here. ...why you hardly sleep, why night after night, you sit by your comput ...

  9. 微软职位内部推荐-Software Engineer II-SDP

    微软近期Open的职位: Position: SDE II The R&D of Shared Data Platform at Application and Services Group ...

  10. PBOC规范下的java卡介绍

    JAVA卡与智能卡 什么是 JAVA 卡呢?JAVA 卡是一种可以运行 JAVA 程序的接触式微处理器智能卡.1996 年 11 月,JAVA 卡 1.0 版本的规范正式发布了.如今 JAVA 卡最新 ...