第六章 排队系统仿真
- 格式:ppt
- 大小:602.00 KB
- 文档页数:34
M/M/1排队系统实验报告一、实验目的本次实验要求实现M/M/1单窗口无限排队系统的系统仿真,利用事件调度法实现离散事件系统仿真,并统计平均队列长度以及平均等待时间等值,以与理论分析结果进行对比。
二、实验原理根据排队论的知识我们知道,排队系统的分类是根据该系统中的顾客到达模式、服务模式、服务员数量以及服务规则等因素决定的。
1、 顾客到达模式设到达过程是一个参数为λ的Poisson 过程,则长度为t 的时间内到达k 个呼叫的概率 服从Poisson 分布,即e t kk k t t p λλ-=!)()(,⋅⋅⋅⋅⋅⋅⋅⋅⋅=,2,1,0k ,其中λ>0为一常数,表示了平均到达率或Poisson 呼叫流的强度。
2、 服务模式设每个呼叫的持续时间为i τ,服从参数为μ的负指数分布,即其分布函数为{}1,0t P X t e t μ-<=-≥3、 服务规则先进先服务的规则(FIFO )4、 理论分析结果在该M/M/1系统中,设λρμ=,则稳态时的平均等待队长为1Q ρλρ=-,顾客的平均等待时间为T ρμλ=-。
三、实验内容M/M/1排队系统:实现了当顾客到达分布服从负指数分布,系统服务时间也服从负指数分布,单服务台系统,单队排队,按FIFO (先入先出队列)方式服务。
四、采用的语言MatLab 语言源代码:clear;clc;%M/M/1排队系统仿真SimTotal=input('请输入仿真顾客总数SimTotal='); %仿真顾客总数;Lambda=0.4; %到达率Lambda;Mu=0.9; %服务率Mu;t_Arrive=zeros(1,SimTotal);t_Leave=zeros(1,SimTotal);ArriveNum=zeros(1,SimTotal);LeaveNum=zeros(1,SimTotal);Interval_Arrive=-log(rand(1,SimTotal))/Lambda;%到达时间间隔Interval_Serve=-log(rand(1,SimTotal))/Mu;%服务时间t_Arrive(1)=Interval_Arrive(1);%顾客到达时间ArriveNum(1)=1;for i=2:SimTotalt_Arrive(i)=t_Arrive(i-1)+Interval_Arrive(i);ArriveNum(i)=i;endt_Leave(1)=t_Arrive(1)+Interval_Serve(1);%顾客离开时间LeaveNum(1)=1;for i=2:SimTotalif t_Leave(i-1)<t_Arrive(i)t_Leave(i)=t_Arrive(i)+Interval_Serve(i);elset_Leave(i)=t_Leave(i-1)+Interval_Serve(i);endLeaveNum(i)=i;endt_Wait=t_Leave-t_Arrive; %各顾客在系统中的等待时间t_Wait_avg=mean(t_Wait);t_Queue=t_Wait-Interval_Serve;%各顾客在系统中的排队时间t_Queue_avg=mean(t_Queue);Timepoint=[t_Arrive,t_Leave];%系统中顾客数随时间的变化Timepoint=sort(Timepoint);ArriveFlag=zeros(size(Timepoint));%到达时间标志CusNum=zeros(size(Timepoint));temp=2;CusNum(1)=1;for i=2:length(Timepoint)if (temp<=length(t_Arrive))&&(Timepoint(i)==t_Arrive(temp)) CusNum(i)=CusNum(i-1)+1;temp=temp+1;ArriveFlag(i)=1;elseCusNum(i)=CusNum(i-1)-1;endend%系统中平均顾客数计算Time_interval=zeros(size(Timepoint));Time_interval(1)=t_Arrive(1);for i=2:length(Timepoint)Time_interval(i)=Timepoint(i)-Timepoint(i-1);endCusNum_fromStart=[0 CusNum];CusNum_avg=sum(CusNum_fromStart.*[Time_interval 0] )/Timepoint(end);QueLength=zeros(size(CusNum));for i=1:length(CusNum)if CusNum(i)>=2QueLength(i)=CusNum(i)-1;elseQueLength(i)=0;endendQueLength_avg=sum([0 QueLength].*[Time_interval 0] )/Timepoint(end);%系统平均等待队长%仿真图figure(1);set(1,'position',[0,0,1000,700]);subplot(2,2,1);title('各顾客到达时间和离去时间');stairs([0 ArriveNum],[0 t_Arrive],'b');hold on;stairs([0 LeaveNum],[0 t_Leave],'y');legend('到达时间','离去时间');hold off;subplot(2,2,2);stairs(Timepoint,CusNum,'b')title('系统等待队长分布');xlabel('时间');ylabel('队长');subplot(2,2,3);title('各顾客在系统中的排队时间和等待时间');stairs([0 ArriveNum],[0 t_Queue],'b');hold on;stairs([0 LeaveNum],[0 t_Wait],'y');hold off;legend('排队时间','等待时间');%仿真值与理论值比较disp(['理论平均等待时间t_Wait_avg=',num2str(1/(Mu-Lambda))]);disp(['理论平均排队时间t_Wait_avg=',num2str(Lambda/(Mu*(Mu-Lambda)))]);disp(['理论系统中平均顾客数=',num2str(Lambda/(Mu-Lambda))]);disp(['理论系统中平均等待队长=',num2str(Lambda*Lambda/(Mu*(Mu-Lambda)))]);disp(['仿真平均等待时间t_Wait_avg=',num2str(t_Wait_avg)])disp(['仿真平均排队时间t_Queue_avg=',num2str(t_Queue_avg)])disp(['仿真系统中平均顾客数=',num2str(CusNum_avg)]);disp(['仿真系统中平均等待队长=',num2str(QueLength_avg)]);五、数据结构1.仿真设计算法(主要函数)利用负指数分布与泊松过程的关系,产生符合泊松过程的顾客流,产生符合负指数分布的随机变量作为每个顾客的服务时间:Interval_Arrive=-log(rand(1,SimTotal))/Lambda;%到达时间间隔,结果与调用exprnd(1/Lambda,m)函数产生的结果相同Interval_Serve=-log(rand(1,SimTotal))/Mu;%服务时间间隔t_Arrive(1)=Interval_Arrive(1);%顾客到达时间时间计算t_Wait=t_Leave-t_Arrive;%各顾客在系统中的等待时间t_Queue=t_Wait-Interval_Serve; %各顾客在系统中的排队时间由事件来触发仿真时钟的不断推进。
实验 3--- 多服务台排队系统的仿真姓名:学号:一、目标任务已知一个系统有 N 个服务员,能力相等,服务时间听从指数散布。
顾客的抵达时间间隔听从指数散布。
用 Monte-Carlo 仿真,分别求按以下方案的整体均匀排队时间:①M|M|N 。
②N 个单通道系统并列,按 1/N 概率分裂抵达流。
③ N 个单通道并列,精选最短的队。
要求:① 给出程序设计的过程。
②假如采纳固定的 N,则要求 N>2。
③起码取ρ=和ρ=两种强度运转程序。
④ 对结果进行剖析。
二、编程语言Matlab三、重点代码方案一:N = 3; %服务员人数r = 6; %顾客抵达流强度u = 20; %服务员服务强度T = 1000000; %仿真运转时间avg_wait_time = []; %均匀等候时间for i=1:100%模拟排队函数server_time = [, , ]; %用来保留服务员下一安闲时间time = 0;%绝对时钟,初始为 0client_num = 0; %顾客总数,初始为 0CRTime = 0;%顾客抵达时间间隔ServeTime = 0; %顾客服务时间server_id = 0; %目行进入排队窗口的服务员编号total_wait_time = 0;%系统中抵达顾客的总等候时间while 1CRTime = exprnd(1/r);%按指数散布产生顾客抵达时间间隔time = time + CRTime; %更新系统的绝对时钟if time > Tbreak;endclient_num = client_num + 1; %顾客数加1ServeTime = exprnd(1/u); %按指数散布产生顾客服务间隔server_id = mod(client_num, N); %按 1..N的次序循环排入服务员窗口if server_id ==0server_id = N;endif server_time(1,server_id)<= time% 如果当前server_id号服务员安闲,则直接接收伏务server_time(1,server_id) = time + ServeTime;% 服务员下一安闲时间为目前绝对时钟加受骗前服务时间else %不然全部服务员都在繁忙,顾客要排队等候total_wait_time= total_wait_time+ server_time(1, server_id) - time; %顾客排队等候时间为目前服务员下一安闲时间减去绝对时钟server_time(1,server_id)=server_time(1, server_id) + ServeTime;endendavg_wait_time=[avg_wait_time,total_wait_time/client_num];end%计算均匀等候时间mean_avg_wait_time = mean(avg_wait_time);fprintf('ρ=%均匀等候时间%\n', r/u, mean_avg_wait_time); %打印均匀等候时间%绘制每次仿真的均匀等候时间和整体均匀等候时间线状图x = 1:100;%plot(x, avg_wait_time, x, mean_avg_wait_time);scatter(x, avg_wait_time, '.');方案二:N = 3; %服务员人数r = 6; %顾客抵达流强度u = 20; %服务员服务强度T = 1000; %仿真运转时间avg_wait_time = []; %均匀等候时间for i=1:100%模拟排队函数server_time = [, , ]; %用来保留服务员下一安闲时间time = 0;%绝对时钟,初始为0client_num = 0; %顾客总数,初始为0CRTime = 0; %顾客抵达时间间隔ServeTime = 0; %顾客服务时间server_id = 0; %目行进入排队窗口的服务员编号total_wait_time = 0;%系统中抵达顾客的总等候时间while 1CRTime = exprnd(1/r); %按指数散布产生顾客抵达时间间隔time = time + CRTime; %更新系统的绝对时钟if time > Tbreak;endclient_num = client_num + 1; %顾客数加1ServeTime = exprnd(1/u); %按指数散布产生顾客服务时间间隔server_id = randi([1 N]); %按1/N的概率排入服务员窗口if server_time(1,server_id)<= time% 如果当前server_id号服务员安闲,则直接接收伏务server_time(1,server_id) = time + ServeTime;% 服务员下一安闲时间为目前绝对时钟加受骗前服务时间else %不然全部服务员都在繁忙,顾客要排队等候total_wait_time= total_wait_time+ server_time(1,server_id) - time; % 顾客排队等候时间为目前服务员下一安闲时间减去绝对时钟server_time(1,server_id)=server_time(1,server_id) + ServeTime;endendavg_wait_time=[avg_wait_time,total_wait_time/client_num];end%计算均匀等候时间mean_avg_wait_time = mean(avg_wait_time);fprintf('ρ=%均匀等候时间%\n', r/u, mean_avg_wait_time); %打印均匀等候时间%绘制每次仿真的均匀等候时间散点图x = 1:100;scatter(x, avg_wait_time, '.');方案三:N = 3; %服务员人数r = 6; %顾客抵达流强度u = 20; %服务员服务强度T = 1000; %仿真运转时间avg_wait_time = []; %均匀等候时间for i=1:100%模拟排队函数server_time = [, , ]; %用来保留服务员下一安闲时间time = 0;%绝对时钟,初始为 0client_num = 0; %顾客总数,初始为 0CRTime = 0;%顾客抵达时间间隔ServeTime = 0; %顾客服务时间server_id = 0; %目行进入排队窗口的服务员编号total_wait_time = 0;%系统中抵达顾客的总等候时间while 1CRTime = exprnd(1/r);%按指数散布产生顾客抵达时间间隔time = time + CRTime; %更新系统的绝对时钟if time > Tbreak;endclient_num = client_num + 1; %顾客数加1ServeTime = exprnd(1/u); %按指数散布产生顾客服务时间间隔temp = min(server_time); %找寻排队时间最短的服务员窗口[x, y] = find(temp == min(min(server_time)));server_id = y; %按队伍最短排入服务员窗口if server_time(1,server_id)<= time% 如果当前server_id号服务员安闲,则直接接收伏务server_time(1,server_id) = time + ServeTime;% 服务员下一安闲时间为目前绝对时钟加受骗前服务时间else %不然全部服务员都在繁忙,顾客要排队等候total_wait_time= total_wait_time+ server_time(1, server_id) - time; %顾客排队等候时间为目前服务员下一安闲时间减去绝对时钟server_time(1,server_id)=server_time(1, server_id) + ServeTime;endendavg_wait_time=[avg_wait_time,total_wait_time/client_num];end%计算均匀等候时间mean_avg_wait_time = mean(avg_wait_time);fprintf('ρ=%均匀等候时间%\n', r/u, mean_avg_wait_time); %打印均匀等候时间%绘制每次仿真的均匀等候时间散点图x = 1:100;scatter(x, avg_wait_time, '.');四、实验结果与剖析方案一:图 1 方案一仿真的均匀等候时间散点图图 2 方案一均匀等候时间M|M|N1.输入参数:服务员人数 N,顾客抵达流强度 r ,服务员服务强度u,仿真运转时间T;2.各变量初始值置 0:绝对时钟 time ,服务员下一安闲时辰数组server_time[](此中按次序保留每一个服务员的下一安闲时辰),顾客总数client_num ,顾客抵达时间间隔CRTime,顾客服务时间ServeTime ,目行进入排队窗口的服务员编号server_id,系统中顾客总等候时间total_wait_time;3.按照指数分布产生下一顾客到达的时间间隔 CRTime,time+=CRTime。
排队系统仿真学院:___浙江科技学院____专业班级:_______工业工程____姓名:____廖汉杰__________学号:____________________指导老师:___________________年月日目录一、实验名称 (3)二、实验目的 (3)三、实验内容 (3)四、仪器设备 (3)五、实验步骤 (4)1.添加控件 (4)2.设置发生器的参数 (4)3、设置处理器的参数 (4)4、模拟仿真模型 (5)5、统计数据 (5)六、方案改进 (6)一、实验名称排队系统仿真实验二、实验目的学习Flexsim仿真软件的基本用法并建立一个简单的排队模型;学习如何使用拉式逻辑,根据临时实体类型来定义临时实体的流程路径;学习统计数据的收集、分析与比较。
三、实验内容有两种类型的顾客,分别为类型1和类型2。
顾客到达的时间间隔服从指数分布exponential(0,10,1)。
两种类型的顾客随机的均匀到达。
有2个服务台为类型1的顾客提供服务,有3个服务台为类型2的顾客提供服务,顾客将首先到空闲可用的服务台接受服务。
类型1的顾客接受服务的时间服从(40,8)的正态分布,类型2的顾客接受服务的时间服从(60,12)的正态分布。
顾客接受完服务后离开系统。
以上时间单位皆为分钟。
对上述系统进行建模,仿真系统一天12小时的运行状况,收集各服务台的利用率、顾客的平均等待时间等数据,提出服务设施的改进建议,使得顾客的平均等待时间不超过30分钟。
四、仪器设备计算机、Flexsim仿真软件五、实验步骤1.添加控件首先flexsim仿真软件,软件,1个发生器,1个暂存区,5个处理器,1个吸收器,并连接各个实体控件。
如图1-1所示图1-12. 设置发生器的参数<1>到达时间间隔设置<2>发生触发器离开出发设置3、设置处理器的参数<1>定义发生器Processor1、Processor2为类型1的顾客提供服务,并设置其参数处理时间设置临时实体流设置<2>定义发生器Processor3、Processor4、Processor5为类型2的顾客提供服务,并设置其参数临时实体流设置4、模拟仿真模型先打开实验控制器按钮,设置系统仿真时间720分钟,再编译,然后运行,如图所示图5-15、统计数据P1P3P2P4P5六、方案改进1、分别增加一个类型1,类型2的处理器,连接控件,如图5-1所示图5-12、设置Processor6的设置如类型1的参数,设置Processor7的设置如类型2的参数3、运行模型,统计其数据P6P1P2P3P4P5P7。
排队模拟系统课程设计一、课程目标知识目标:1. 学生能理解排队模拟系统的基本概念,掌握其数学模型及相关参数。
2. 学生能运用所学知识分析并解决生活中的排队问题。
3. 学生了解计算机编程在排队模拟系统中的应用。
技能目标:1. 学生能运用数学知识构建简单的排队模型。
2. 学生能通过编程实现排队模拟系统的运行。
3. 学生能运用数据分析方法评估排队模拟系统的效果。
情感态度价值观目标:1. 培养学生运用数学和计算机知识解决实际问题的兴趣和信心。
2. 增强学生的团队协作意识和沟通能力。
3. 提高学生对生活中排队现象的关注和思考,培养良好的社会公德意识。
课程性质:本课程为信息技术与数学跨学科课程,结合计算机编程和数学建模,培养学生解决实际问题的能力。
学生特点:学生具备一定的数学基础和编程技能,对新鲜事物充满好奇,善于合作和探究。
教学要求:注重理论与实践相结合,引导学生主动参与,鼓励学生创新思维,提高解决问题的能力。
通过课程学习,将目标分解为具体的学习成果,便于后续教学设计和评估。
二、教学内容1. 排队论基本概念:介绍排队系统的组成,排队论的基本参数(到达率、服务率、排队规则等)。
教材章节:第五章第一节2. 排队模型建立:分析不同排队模型的数学表达式,如M/M/1、M/M/c等。
教材章节:第五章第二节3. 计算机编程实现:运用Python等编程语言,实现排队模拟系统的编写。
教材章节:第七章4. 数据分析方法:介绍数据分析方法,如排队长度、等待时间、系统利用率等指标的统计和分析。
教材章节:第六章5. 实际案例分析与讨论:结合生活中的排队现象,运用所学知识进行案例分析,提出优化方案。
教材章节:第八章教学安排与进度:第一课时:排队论基本概念及排队模型的介绍第二课时:计算机编程实现排队模拟系统第三课时:数据分析方法及案例讨论第四课时:学生展示与点评,总结提升教学内容确保科学性和系统性,结合教材章节和实际案例,引导学生从理论到实践,逐步掌握排队模拟系统的相关知识。
单服务台排队系统仿真报告一、模型准备1、 顾客到达特性在该系统中,顾客的到达规模(成批到达还是单个到达)是单个到达,假设顾客到达率Ai 服从均值为 的指数分布,即2、 顾客服务时间顾客服务时间为Si ,服从指数分布,假设均值为,即二、 仿真模型设计1、 元素定义(Define )本系统的元素定义如表1所示。
2、 元素可视化设置(Display )本系统中各个元素的显示特征定义设置如图2所示:m in 5=A βAs Ae Af ββ/)(-=)0(≥A min 4=s βSA Se Sf ββ/)(-=)0(≥S图2 各元素的显示特征(1)Part元素可视化设置在元素选择窗口选择customer元素,鼠标右键点击Display,跳出Display 对话框(图3),设置它的Text(图4)、Icon(图5)。
图3 Display对话框图4 Display Text对话框图5 Display Icon对话框(2)Buffer元素可视化设置在元素选择窗口选择paidui元素,鼠标右键点击Display,跳出Display对话框(图3),设置它的Text、Icon、Rectangle(图6)。
图6 Display Rectangle对话框(3)Machine元素可视化设置在元素选择窗口选择Fuwuyuan元素,鼠标右键点击Display,跳出Display 对话框(图3),设置它的Text、Icon、Part Queue(图7)。
图7 Display Part Queue对话框(4)Variable元素可视化设置在元素选择窗口选择Jifen0元素,鼠标右键点击Display,跳出Display对话框(图3),设置它的Text 、Value(图8)。
图8 Display Value对话框(5)Timeseries元素可视化设置在元素选择窗口选择duichang元素,鼠标右键点击Display,跳出Display 对话框(图3),设置它的Text、Timeseries(图9)。
实验2---单服务台排队系统的仿真姓名:学号:一、目标任务①模拟路由器缓存区M|M|1|m实验。
②设定:λ=8/s,μ=10/s,ρ=0.8,m=10。
③模拟系统106s,求系统报文的丢失率及报文在路由器中停留时间的均值。
④模拟100次,图展示每次的模拟结果,并与理论值0.0184比较。
二、编程语言Matlab三、关键代码lamda = 8; %报文到达强度u = 10; %路由器处理强度m = 10; %路由器缓冲区长度T = 1000000; %模拟时间a = []; %模拟运行时丢失率的运行结果mean_a = 0; %模拟运行时丢失率的平均运行结果ref_value = 0.0184; %丢失率理论值大小b = []; %模拟运行时报文在路由器中的停留时间mean_b = 0; %模拟运行时报文在路由器中停留时间的均值%模拟运行一百次for i=1:100time = 0; %绝对时钟t = 0; %路由器的下一空闲时刻N = 0; %到达报文数NI = 0; %丢失报文数q = 0; %队长stay_time = 0; %报文在路由器中的停留时间%按指数分布产生随机到达时间和服务时间while 1CRTime = exprnd(1/lamda); %按指数分布产生下一报文的到达随机时间间隔time = CRTime + time; %下一个报文到达的时间if time > Tbreak;endN = N + 1;q = q + 1;while q > 0 & t < timeq = q - 1;ServeTime = exprnd(1/u);%按指数分布产生报文的随机服务时间if q == 0t = time + ServeTime;elset = t + ServeTime;endstay_time = stay_time + ServeTime * (q + 1);endif q == m + 1 %如果超过缓冲区长,则丢失报文数加1,队长减1 NI = NI + 1;q = q - 1;endenda = [a, NI/N];b = [b, stay_time/(N-NI)];end%计算结果mean_a = mean(a);mean_b = mean(b);%绘图x = 1:100;plot(x, a, x, mean_a); %绘制模拟运行时丢包率变化图以及均值线scatter(x, a, '.'); %绘制模拟运行时丢包率变化散点图scatter(x, b, '.'); %绘制模拟运行时平均停留时间变化散点图fprintf('平均丢包率%6.5f\n', mean_a); % 打印平均丢包率fprintf('平均停留时间%6.5f\n', mean_b); % 打印平均停留时间四、实验结果与分析图1 丢包率和平均停留时间图2模拟运行时丢包率变化图以及均值线M/M/1/∞/∞ 模型模型条件(1) 输入过程――顾客源是无限的, 单个到来, 到达过程服从泊松分布, 即顾客到达间隔时间服从负指数分布;(2) 排队规则――单队, 且队长没有限制, 先到先服务;(3) 服务机构――单服务台, 服务时间的长短是随机的,服从相同的负指数分布 。