多服务台仿真实验

2023-10-22 09:40
文章标签 仿真 实验 服务台

本文主要是介绍多服务台仿真实验,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 Python仿真

1.1 模型假设
  1. 顾客的到来随仿真时间的停止而停止;
  2. 排队长度有时间限制;
  3. 到达系统的顾客按先到先服务原则依次进入服务;
  4. 服务员在仿真过程中没有休假;
  5. 顾客到达时排成一队,当有服务台空闲时进入服务状态;
  6. 顾客到达间隔时间服从负指数分布;
  7. 顾客所需的服务时间服从负指数分布;
  8. 各服务台服务无相互影响且平均服务时间相同;

注:当顾客平均到达率为常数 λ \lambda λ的到达间隔服从指数分布时,单位时间内到达的顾客数 k k k服从泊松分布,即单位时间内到达 k k k位顾客的概率为
P k = λ k e − λ k ! P_k = \frac{\lambda^k e^{-\lambda }}{k!} Pk=k!λkeλ
指数分布函数
F ( x ; λ ) = { 1 − e − λ x , x ≥ 0 0 , x < 0 F(x;\lambda) = \begin{cases} 1 - e^{-\lambda x}&,&x \ge 0\\ 0&, &x<0 \end{cases} F(x;λ)={1eλx0,,x0x<0
期望值:

E ( x ) = 1 λ E(x) = \frac{1}{\lambda} E(x)=λ1

1.2 模型分析

排队系统构成
系统设计过程中,将排队过程分为到达过程,排队过程,服务过程三部分。

  1. 到达过程

    1)顾客到达间隔时间服从负指数分布。

    2)顾客单个到来,且相互独立。

  2. 排队过程
    1)顾客到达时 若所有服务台均被占用,则顾客均选择排队等候。

    2)顾客发服务次序采取先到先服务的原则。

    3)队列数为单列且有队长限制,顾客不会在排队过程中中途退出,但是顾客到达时若队列满则顾客会离开系统。

  3. 服务过程
    1)服务机构为多服务台并联型(包括单服务台),各服务台独立为不同顾客提供服务。

    2)服务采用先到先服务的原则,未设置服务优先级。

1.3 系统性能
  • 平均队列顾客数
  • 平均等待时间
  • 损失顾客数
  • 工作台利用率

排队模型

一般排队模型示意图
1.4 python仿真源码
1.4.1 系统输入数据
符号含义
S S S服务台个数上限(例:S=3,则分别输出服务台个数为1,2,3的系统性能)
k k k等待队列上限
u u u顾客到达时间间隔均值
v v v顾客服务时间均值
T T T仿真终止时间
1.4.2 初始化参数
def initialize():global num_in_q,num_record,sim_time,arrival_time_q,depart_time,begin_service_time,arrival_count,sim_timeglobal lose_count,avg_wait_q,avg_wait_time,avg_stay_time,next_event_type,num_events,time_next_event,depart_time_qnum_in_q = 0 #加油站车辆数num_record = [] #记录仿真钟每一刻的加油站车辆数sim_time = 0 #初始化仿真钟#顾客属性arrival_time_q = [] #所有顾客到达时间序列depart_time_q = [] #所有顾客离开时间序列depart_time = [float('inf')] #记录正在接受服务的车辆离开序列begin_service_time = [] #服务开始时间序列arrival_count = 0 #到达顾客数lose_count = 0   #损失顾客数avg_wait_q = 0  #平均等待队长avg_wait_time = 0   #平均等待时间avg_stay_time = 0 #平均逗留时间next_event_type = 2 #下一事件类型num_events = [0,1] #事件类型,0表示到达,1表示离去time_next_event = [0]*2time_next_event[0] = sim_time #初始化第位顾客0时刻到达time_next_event[1] = float('inf')#离开时间置为无穷大,后期随机生成
1.4.3 定时函数
流程图

定时函数

定时函数流程图
函数体
def timing():'''推进仿真钟,判断下一事件类型'''global sim_time,next_event_type,time_next_event,depart_timetime_next_event[1] = min(depart_time)sim_time = min(time_next_event) #推进仿真钟next_event_type = time_next_event.index(sim_time) #判断下一事件类型if next_event_type == 1: #如果下一事件为离开事件则从临时离开事件表中删除该事件的时间depart_time.remove(time_next_event[1])
1.4.4 到达事件
流程图

在这里插入图片描述

到达函数流程图
函数体
def arrive(s,k,u,v):'''推进事件的到达'''global arrival_time_q,arrival_count,time_next_event,begin_service_timeglobal num_in_q,lose_count,depart_time,num_recordarrival_time_q.append(sim_time) #记录到达事件arrival_count += 1 #累加到达顾客数#生成下一顾客到达事件time_next_event[0] = sim_time + np.random.exponential(u)#到达时间间隔为均值为u的指数分布随机数#分析到达事件对系统状态的影响if num_in_q < s: #有服务台空闲num_in_q += 1 #更新队列人数num_record.append(num_in_q) #记录系统内的人数begin_service_time.append(sim_time) #记录服务开始的时间#产生新的顾客离开事件service_time = np.random.exponential(v) #生成该事件的服务时间为均值为v的指数分布随机数depart_time.append(sim_time + service_time) #添加到离开事件列表elif num_in_q < s + k :#所有服务台忙,但排队的人还未满num_in_q += 1 #更新顾客数num_record.append(num_in_q) #记录系统内的人数else:lose_count += 1 #如果队列满了则该客户会选择其他的加油站,此时要删除该事件的到达时间arrival_time_q.pop()
1.4.5 离开事件
流程图

离开事件

离开函数流程图
函数体
def depart(s,v):'''推进事件的离开'''global depart_time_q,num_in_q,begin_service_time,depart_time,num_record#安排下一离开事件if num_in_q > s :begin_service_time.append(sim_time) #记录服务开始时间service_time = np.random.exponential(v) #生成服务时间depart_time.append(sim_time + service_time) #记录该事件的离开时间#记录当前离开事件num_in_q -= 1 #更新并记录系统中的顾客数num_record.append(num_in_q)depart_time_q.append(sim_time) #记录顾客的离开时间
1.4.6 更新函数
def update(s):'''更新系统指标'''global avg_wait_time,lose_count,record,avg_num_in_qend_service_num = len(depart_time_q) #已结束服务顾客数#平均等待时间avg_wait_time = np.mean(np.array(begin_service_time[0:end_service_num]) - np.array(arrival_time_q[0:end_service_num]))#平均等待队列人数(这里用的仿真时间为在设置的仿真结束时间前最后一位顾客的离开时间)avg_num_in_q = avg_wait_time * end_service_num / depart_time_q[-1]#工作台利用率use_ratio = sum(np.array(depart_time_q) - np.array(begin_service_time[0:end_service_num]))/(s * depart_time_q[-1])record = [avg_num_in_q,avg_wait_time,lose_count,use_ratio]return record
1.4.7 主函数
流程图

主函数

主函数流程图
函数体
def main(S,k,u,v,T) : '''S:输入服务台个数,k:队列上限,u:到达时间间隔均值,v:服务时间均值,T:仿真结束时间输出各项指标:平均队列人数,平均等待时间,损失顾客数,工作台利用率'''global record_sfor s in range(1,S + 1):initialize()while sim_time  <= T :timing() #判断事件类型if next_event_type == 0 :arrive(s,k,u,v)else:depart(s,v)record_s.append(update(s)) #仿真结束计算统计计数

2 仿真结果分析

2.1 系统输入
  • S = 10 S = 10 S=10、分析服务台个数从1到10的情况下系统各项指标。
  • k = 10 k = 10 k=10、系统中的等待顾客数不能超过10个。
  • u = [ 2 , 4 , 6 , 8 , 10 ] u = [2,4,6,8,10] u=[2,4,6,8,10]、分析顾客到达时间间隔均值由小到大,即模拟系统所处位置的顾客流量大小,探讨不同顾客流下的系统指标。
  • v = 5 v = 5 v=5、顾客服务时间均值。
  • T = 1440 T=1440 T=1440、仿真终止时间为一天即1440分钟。
  • N = 100 N=100 N=100、每一个 u u u做100次重复实验,系统指标取其均值。
2.2 结果分析
2.2.1 平均队列顾客数

在这里插入图片描述

image-20200608120710834

分析:

  • 在同样数量的服务台数下,系统中的平均等待队列顾客数随着顾客到达时间间隔均值的增大而减小。
  • 在顾客到达时间间隔均值相同的情况下,在某一服务台个M数前,随着服务台个数的增加,系统中的平均顾客数减小。若服务台的个数超过这个M值,即使增加服台的数量,对系统内的平均等待队列顾客数也影响不大。原因在于,此时影响平均等待队列顾客数的决定因素是到达时间间隔均值。
  • 此外,从图中可见当 v = 5 v=5 v=5(即:顾客的平均服务时间为5)时,服务台的个数由1个增加到两个对系统中平均队列顾客数的改善最大(通过斜率看出)
2.2.2 平均等待时间

在这里插入图片描述

image-20200608120809855

分析:

  • 在同样数量的服务台数下,系统中顾客的平均等待时间随着顾客到达时间间隔均值的增大而减小。
  • 在顾客到达时间间隔均值相同的情况下,在某一服务台个数M前,随着服务台个数的增加,系统中的顾客平均等待时间减小。若服务台的个数超过这个M值,即使增加服台的数量,对系统内的顾客平均等待时间也影响不大。原因同上(2.2.1)
  • 此外,从图中可见当 v = 5 v=5 v=5(即:顾客的平均服务时间为5)时,服务台的个数由1个增加到两个对系统中顾客平均等待时间的改善最大(通过斜率看出)
2.2.3 损失顾客数

在这里插入图片描述

在这里插入图片描述

分析:

  • 在同样数量的服务台数下,系统损失的顾客数随着顾客到达时间间隔均值的增大而减小。
  • 在顾客到达时间间隔均值相同的情况下,在某一服务台个数M前,随着服务台个数的增加,系统损失的顾客数减小。若服务台的个数超过这个M值,即使增加服台的数量,对系统损失的顾客数也影响不大。原因同上(2.2.1)
  • 从图中可见当 v = 5 v=5 v=5(即:顾客的平均服务时间为5)时,服务台的个数由1个增加到两个对系统损失顾客数的改善最大(通过斜率看出)
2.2.4 服务台利用率

在这里插入图片描述

在这里插入图片描述

分析:

  • 在同样数量的服务台数下,系统中服务台的利用率随着顾客到达时间间隔均值的增大而减小。
  • 在顾客到达时间间隔均值相同的情况下,系统中服务台的利用率随着服务台数量的增加而减小。
  • 虽然服务台由1个增加到两个在一定程度上降低了服务台的利用率,但是对于系统内的工作人员来说,给与一定的弹性休息时间是很有必要的。
2.3 结论

是否需要更多的工作台则需要根据服务中心所处地理位置的顾客流量来决定。若顾客流量很大(意味着在仿真系统中的顾客到达间隔时间 u u u就越小),就很有必要再新增新的工作台。

这篇关于多服务台仿真实验的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/260628

相关文章

基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(五):Blender锥桶建模

前言 本系列教程旨在使用UE5配置一个具备激光雷达+深度摄像机的仿真小车,并使用通过跨平台的方式进行ROS2和UE5仿真的通讯,达到小车自主导航的目的。本教程默认有ROS2导航及其gazebo仿真相关方面基础,Nav2相关的学习教程可以参考本人的其他博客Nav2代价地图实现和原理–Nav2源码解读之CostMap2D(上)-CSDN博客往期教程: 第一期:基于UE5和ROS2的激光雷达+深度RG

STM32(十一):ADC数模转换器实验

AD单通道: 1.RCC开启GPIO和ADC时钟。配置ADCCLK分频器。 2.配置GPIO,把GPIO配置成模拟输入的模式。 3.配置多路开关,把左面通道接入到右面规则组列表里。 4.配置ADC转换器, 包括AD转换器和AD数据寄存器。单次转换,连续转换;扫描、非扫描;有几个通道,触发源是什么,数据对齐是左对齐还是右对齐。 5.ADC_CMD 开启ADC。 void RCC_AD

HNU-2023电路与电子学-实验3

写在前面: 一、实验目的 1.了解简易模型机的内部结构和工作原理。 2.分析模型机的功能,设计 8 重 3-1 多路复用器。 3.分析模型机的功能,设计 8 重 2-1 多路复用器。 4.分析模型机的工作原理,设计模型机控制信号产生逻辑。 二、实验内容 1.用 VERILOG 语言设计模型机的 8 重 3-1 多路复用器; 2.用 VERILOG 语言设计模型机的 8 重 2-1 多

perl的学习记录——仿真regression

1 记录的背景 之前只知道有这个强大语言的存在,但一直侥幸自己应该不会用到它,所以一直没有开始学习。然而人生这么长,怎就确定自己不会用到呢? 这次要搭建一个可以自动跑完所有case并且打印每个case的pass信息到指定的文件中。从而减轻手动跑仿真,手动查看log信息的重复无效低质量的操作。下面简单记录下自己的思路并贴出自己的代码,方便自己以后使用和修正。 2 思路整理 作为一个IC d

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《考虑燃料电池和电解槽虚拟惯量支撑的电力系统优化调度方法》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源程序擅长文章解读,论文与完整源程序,等方面的知识,电网论文源程序关注python

Matlab simulink建模与仿真 第十章(模型扩展功能库)

参考视频:simulink1.1simulink简介_哔哩哔哩_bilibili 一、模型扩展功能库中的模块概览         注:下面不会对Block Support Table模块进行介绍。 二、基于触发的和基于时间的线性化模块 1、Trigger-Based Linearization基于触发的线性化模块 (1)每次当模块受到触发时,都会调用linmod或者dlinmod函数

61.以太网数据回环实验(4)以太网数据收发器发送模块

(1)状态转移图: (2)IP数据包格式: (3)UDP数据包格式: (4)以太网发送模块代码: module udp_tx(input wire gmii_txc ,input wire reset_n ,input wire tx_start_en , //以太网开始发送信

AMEsim和Simulink联合仿真生成新的.mexw64液压模型文件

AMEsim和Simulink进行联合仿真非常重要的就是AMEsim经过第四阶段Simulation会在相同文件下面生成一个与AMEsim液压模型相同名字的.mexw64文件,在Simulink进行联合仿真的S-Function需要找的也就是这个文件,只不过输入的时候除了液压模型名字之外,后面有一个短下划线。 简而言之: AMEsim和Simulink联合仿真, 首先是需要AMEsim软

LTspice模拟CCM和DCM模式的BUCK电路实验及参数计算

关于BUCK电路的原理可以参考硬件工程师炼成之路写的《 手撕Buck!Buck公式推导过程》.实验内容是将12V~5V的Buck电路仿真,要求纹波电压小于15mv. CCM和DCM的区别: CCM:在一个开关周期内,电感电流从不会到0. DCM:在开关周期内,电感电流总会到0. CCM模式Buck电路仿真: 在用LTspice模拟CCM电路时,MOS管驱动信号频率为100Khz,负载为10R(可自

【自动驾驶】控制算法(八)横向控制Ⅱ | Carsim 与 Matlab 联合仿真基本操作

写在前面: 🌟 欢迎光临 清流君 的博客小天地,这里是我分享技术与心得的温馨角落。📝 个人主页:清流君_CSDN博客,期待与您一同探索 移动机器人 领域的无限可能。 🔍 本文系 清流君 原创之作,荣幸在CSDN首发🐒 若您觉得内容有价值,还请评论告知一声,以便更多人受益。 转载请注明出处,尊重原创,从我做起。 👍 点赞、评论、收藏,三连走一波,让我们一起养成好习惯😜 在这里,您将