资源描述:
《多服务台排队系统的仿真》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Word格式实验3---多服务台排队系统的仿真姓名:学号:一、目标任务已知一个系统有N个服务员,能力相等,服务时间服从指数分布。顾客的到达时间间隔服从指数分布。用Monte-Carlo仿真,分别求按下列方案的总体平均排队时间:①M
2、M
3、N。②N个单通道系统并列,按1/N概率分裂到达流。③N个单通道并列,挑选最短的队。要求:①给出程序设计的过程。②如果采用固定的N,则要求N>2。③至少取ρ=0.3和ρ=0.7两种强度运行程序。④对结果进行分析。二、编程语言Matlab三、关键代码方案一:N=3;%服务员人数r=6;%顾客到达流强度u=20;%服务员服务强度T=1
4、000000;%仿真运行时间avg_wait_time=[];%平均等待时间fori=1:100%模拟排队函数server_time=[0.0,0.0,0.0];%用来保存服务员下一空闲时间time=0;%绝对时钟,初始为0client_num=0;%顾客总数,初始为0CRTime=0;%顾客到达时间间隔ServeTime=0;%顾客服务时间server_id=0;%当前进入排队窗口的服务员编号total_wait_time=0;%系统中到达顾客的总等待时间while1CRTime=exprnd(1/r);%按指数分布产生顾客到达时间间隔time=time+C
5、RTime;%更新系统的绝对时钟完美整理Word格式iftime>Tbreak;endclient_num=client_num+1;%顾客数加1ServeTime=exprnd(1/u);%按指数分布产生顾客服务间隔server_id=mod(client_num,N);%按1..N的顺序循环排入服务员窗口ifserver_id==0server_id=N;endifserver_time(1,server_id)<=time%如果当前server_id号服务员空闲,则直接接收服务server_time(1,server_id)=time+ServeTime
6、;%服务员下一空闲时间为当前绝对时钟加上当前服务时间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_
7、wait_time=mean(avg_wait_time);fprintf('ρ=%2.1f平均等待时间%6.5f',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=[];%平均等待时间完美整理W
8、ord格式fori=1:100%模拟排队函数server_time=[0.0,0.0,0.0];%用来保存服务员下一空闲时间time=0;%绝对时钟,初始为0client_num=0;%顾客总数,初始为0CRTime=0;%顾客到达时间间隔ServeTime=0;%顾客服务时间server_id=0;%当前进入排队窗口的服务员编号total_wait_time=0;%系统中到达顾客的总等待时间while1CRTime=exprnd(1/r);%按指数分布产生顾客到达时间间隔time=time+CRTime;%更新系统的绝对时钟iftime>Tbreak;end
9、client_num=client_num+1;%顾客数加1ServeTime=exprnd(1/u);%按指数分布产生顾客服务时间间隔server_id=randi([1N]);%按1/N的概率排入服务员窗口ifserver_time(1,server_id)<=time%如果当前server_id号服务员空闲,则直接接收服务server_time(1,server_id)=time+ServeTime;%服务员下一空闲时间为当前绝对时钟加上当前服务时间else%否则所有服务员都在忙碌,顾客要排队等候total_wait_time=total_wait_ti
10、me+server_time(1,se