MATLAB模拟银行单服务台排队模型
- 格式:docx
- 大小:37.30 KB
- 文档页数:3
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; %各顾客在系统中的排队时间由事件来触发仿真时钟的不断推进。
M/M/1排队系统实验报告一、实验目的本次实验要求实现M/M/1单窗口无限排队系统的系统仿真,利用事件调度法实现离散事件系统仿真,并统计平均队列长度以及平均等待时间等值,以与理论分析结果进行对比。
二、实验原理根据排队论的知识我们知道,排队系统的分类是根据该系统中的顾客到达模式、服务模式、服务员数量以及服务规则等因素决定的。
1、顾客到达模式设到达过程是一个参数为入的Poisson过程,则长度为t的时间内到达k个呼p (t)=(入“ e 4叫的概率服从Poisson分布,即k k!,k = 01,2, .. ,其中入>0为一常数,表示了平均到达率或Poisson呼叫流的强度。
2、服务模式设每个呼叫的持续时间为二,服从参数为N的负指数分布,即其分布函数为P{ X < t } = 1 - e-k t > 03、服务规则先进先服务的规则(FIFO)4、理论分析结果入P = Q = -2—在该M/M/1系统中,设口,则稳态时的平均等待队长为Q 1-P,顾客上乙T T T T =的平均等待时间为N-九。
三、实验内容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));% 至 U达时间标志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;% 至U 达时间间隔,结果与调用exprnd(1/Lambda, m)函数产生的结果相同Interval_Serve=-log(rand(1,SimTotal))/Mu;% 服务时间间隔七_A「后8(1)=加七8~31_八「用8(1);%顾客到达时间时间计算t_Wait=t_Leave-t_Arrive; %各顾客在系统中的等待时间t_Queue=t_Wait-Interval_Serve; %各顾客在系统中的排队时间由事件来触发仿真时钟的不断推进。
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=; %到达率Lambda;Mu=; %服务率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;CusNum(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');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; %各顾客在系统中的排队时间由事件来触发仿真时钟的不断推进。
M/M/1排队系统实验报告一、实验目的本次实验要求实现M/M/1单窗口无限排队系统的系统仿真,利用事件调度法实现离散事件系统仿真,并统计平均队列长度以及平均等待时间等值,以与理论分析结果进行对比。
二、实验原理根据排队论的知识我们知道,排队系统的分类是根据该系统中的顾客到达模式、服务模式、服务员数量以及服务规则等因素决定的。
1、 顾客到达模式设到达过程是一个参数为λ的Poisson 过程,则长度为t 的时间内到达k 个呼叫的概率 服从Poisson 分布,即etkk 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;CusNum(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');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; %各顾客在系统中的排队时间由事件来触发仿真时钟的不断推进。
单服务台系统MATLAB仿真学号:15 姓名:缪晨一、引言排队是日常生活中经常遇到的现象。
通常 ,当人、物体或是信息的到达速率大于完成服务的速率时 ,即出现排队现象。
排队越长 ,意味着浪费的时间越多 ,系统的效率也越低。
在日常生活中 ,经常遇到排队现象 ,如开车上班、在超市等待结账、工厂中等待加工的工件以及待修的机器等。
总之 ,排队现象是随处可见的。
排队理论是运作管理中最重要的领域之一 ,它是计划、工作设计、存货控制及其他一些问题的基础。
Matlab是 MathWorks公司开发的科学计算软件 ,它以其强大的计算和绘图功能、大量稳定可靠的算法库、简洁高效的编程语言以及庞大的用户群成为数学计算工具方面的标准 ,几乎所有的工程计算领域 ,Matlab都有相应的软件工具箱。
选用 Matlab软件正是基于 Matlab的诸多优点。
二、排队模型三.仿真算法原理(1)顾客信息初始化根据到达率λ和服务率μ来确定每个顾客的到达时间间隔和服务时间间隔。
服务间隔时间可以用负指数分布函数exprnd()来生成。
由于泊松过程的时间间隔也服从负指数分布, 故亦可由此函数生成顾客到达时间间隔。
需要注意的是exprnd()的输入参数不是到达率λ和服务率μ而是平均到达时间间隔 1/λ和平均服务时间1/μ。
根据到达时间间隔 ,确定每个顾客的到达时刻. 学习过C 语言的人习惯于使用FOR循环来实现数值的累加, 但FOR循环会引起运算复杂度的增加而在MATLAB 仿真环境中, 提供了一个方便的函数cumsum() 来实现累加功能读者可以直接引用对当前顾客进行初始化。
第1 个到达系统的顾客不需要等待就可以直接接受服务其离开时刻等于到达时刻与服务时间之和。
(2)进队出队仿真在当前顾客到达时刻,根据系统内已有的顾客数来确定是否接纳该顾客。
若接纳则根据前一顾客的离开时刻来确定当前顾客的等待时间、离开时间和标志位;若拒绝,则标志位置为0.流程图如下:四、程序实现单服务台服务,服务参数M/M/1,λ=μ=,排队规则为FIFO,以分为单位,仿真时间240分钟。
单服务台系统MATLAB仿真一、引言排队是日常生活中经常遇到的现象。
通常,当人、物体或是信息的到达速率大于完成服务的速率时,即出现排队现象。
排队越长,意味着浪费的时间越多,系统的效率也越低。
在日常生活中,经常遇到排队现象,如开车上班、在超市等待结账、工厂中等待加工的工件以及待修的机器等。
总之,排队现象是随处可见的。
排队理论是运作管理中最重要的领域之一,它是计划、工作设计、存货控制及其他一些问题的基础。
Matlab是MathWorks公司开发的科学计算软件,它以其强大的计算和绘图功能、大量稳定可靠的算法库、简洁高效的编程语言以及庞大的用户群成为数学计算工具方面的标准,几乎所有的工程计算领域,Matlab都有相应的软件工具箱。
选用Matlab软件正是基于Matlab的诸多优点。
二、排队模型三.仿真算法原理(1)顾客信息初始化根据到达率λ和服务率μ来确定每个顾客的到达时间间隔和服务时间间隔。
服务间隔时间可以用负指数分布函数exprnd()来生成。
由于泊松过程的时间间隔也服从负指数分布, 故亦可由此函数生成顾客到达时间间隔。
需要注意的是exprnd()的输入参数不是到达率λ和服务率μ而是平均到达时间间隔1/λ和平均服务时间1/μ。
根据到达时间间隔 ,确定每个顾客的到达时刻. 学习过 C 语言的人习惯于使用 FOR循环来实现数值的累加, 但FOR循环会引起运算复杂度的增加而在MATLAB 仿真环境中, 提供了一个方便的函数cumsum() 来实现累加功能读者可以直接引用对当前顾客进行初始化。
第1 个到达系统的顾客不需要等待就可以直接接受服务其离开时刻等于到达时刻与服务时间之和。
(2)进队出队仿真在当前顾客到达时刻,根据系统内已有的顾客数来确定是否接纳该顾客。
若接纳则根据前一顾客的离开时刻来确定当前顾客的等待时间、离开时间和标志位;若拒绝,则标志位置为0.流程图如下:四、程序实现单服务台服务,服务参数M/M/1,λ=μ=0.1,排队规则为FIFO,以分为单位,仿真时间240分钟。
单服务台排队系统仿真单服务台排队系统是指在一个服务台只有一个服务员的情况下,客户需要按顺序等待服务的系统。
本文将介绍一个针对单服务台排队系统的仿真模型。
在设计仿真模型之前,我们需要确定一些重要的参数。
首先是服务时间,即每个客户接受服务所需要的时间。
服务时间可以通过实际观察数据或者估算得出。
其次是到达间隔时间,即每个客户到达的时间间隔。
到达间隔时间可以通过实际观察数据或者使用随机数生成器进行模拟。
首先,我们需要创建一个事件队列来模拟客户的到达和离开。
事件队列是一个按照发生时间顺序排序的队列,每个事件都包含两个属性:时间和类型。
接下来,我们创建一个时钟来记录仿真进行的时间。
初始时,时钟指向第一个到达事件的时间。
然后,我们从事件队列中取出第一个事件,并更新时钟指向该事件的时间。
如果当前事件类型是到达事件,我们需要进行如下操作:首先,模拟下一个客户到达的时间,并将该事件添加到事件队列中。
然后,判断当前是否有客户正在接受服务。
如果没有,我们将当前事件类型设置为离开事件,并模拟该客户的服务时间和离开时间,并将该离开事件添加到事件队列中。
如果有客户正在接受服务,我们将当前事件类型设置为到达事件。
如果当前事件类型是离开事件,我们需要进行如下操作:首先,更新服务台的空闲状态。
然后,判断是否还有等待服务的客户。
如果有,我们将当前事件类型设置为离开事件,并模拟下一个客户的服务时间和离开时间,并将该离开事件添加到事件队列中。
如果没有等待服务的客户,我们将当前事件类型设置为到达事件。
重复上述步骤,直到事件队列中没有事件为止。
最后,我们可以根据仿真的结果,比如客户的等待时间、服务时间和系统繁忙率等指标,来评估和优化该排队系统的性能。
通过以上的模型,我们可以对单服务台排队系统进行仿真,并评估其性能。
我们可以通过改变服务时间、到达间隔时间等参数,来探究不同情况下系统的表现和优化方案。
同时,我们还可以根据仿真结果,对系统进行调整和改进,以提高客户的满意度和服务效率。
服务台单队列排队系统仿真1. 引言排队是我们日常生活中常见的现象之一。
每当我们去银行、超市、餐厅等地方,总会看到人们在服务台前排长队等待接受服务。
而排队系统的效率直接影响到我们的等待时间和满意度。
为了改善排队系统的效率,许多地方引入了服务台单队列排队系统。
这种系统中,所有顾客都将排在同一个队伍中,然后按照先后顺序依次接受服务。
这种系统相比于多个队列排队系统,能够有效减少空闲时间和服务延迟。
为了对服务台单队列排队系统进行评估和优化,我们可以使用仿真技术来模拟系统的运行情况,并对其进行分析。
2. 仿真模型设计在服务台单队列排队系统的仿真模型中,我们需要考虑到以下几个方面的因素:2.1 顾客到达规律在实际排队系统中,顾客的到达时间往往是随机的,我们可以使用随机数生成器来模拟此过程。
通过设定到达时间的概率分布函数,我们可以生成一系列随机数来模拟顾客的到达间隔。
2.2 服务时间每个顾客在服务台的服务时间也是随机的。
同样地,我们可以使用随机数生成器来模拟服务时间。
通过设定服务时间的概率分布函数,我们可以生成一系列随机数来模拟顾客在服务台的停留时间。
2.3 服务台数量为了简化仿真模型,我们假设只有一个服务台。
在实际情况中,可以根据实际需求增加服务台数量,以提高系统的整体效率。
2.4 排队规则在服务台单队列排队系统中,顾客按照先后顺序依次接受服务。
当一个顾客结束服务后,下一个顾客将开始接受服务。
为了模拟这个过程,我们可以使用队列数据结构来管理顾客的排队顺序。
3. 仿真过程在进行仿真过程时,我们可以按照以下步骤进行操作:3.1 初始化仿真参数根据实际情况,我们可以设定好仿真的时间段、顾客到达规律和服务时间的概率分布函数等参数。
3.2 创建顾客队列根据顾客到达规律,我们可以按照一定的间隔时间将顾客加入到队列中。
3.3 顾客进入服务台当顾客队列不为空时,服务台将接受当前队列中的第一个顾客,并开始对其进行服务。
3.4 更新服务时间和队列在服务过程中,服务单位时间递减,直到达到零时,服务结束,当前顾客离开服务台,下一个顾客开始接受服务。
MATLAB莫拟银行单服务台排队模型摘要:运筹学就是专门研究对各种经营做出优化决策的科学,也称为最优化理论。
排队论是运筹学的重要组成部分。
排队论又称随机服务系统理论,它是通过对各种服务系统在排队等待现象中概率特性的研究,来解决服务系统最优设计与最优控制一门学科。
具有排队等候现象的服务系统通称为排队系统。
任何一个服务系统总是由两个相辅相成的要素:顾客和服务员(或服务台)所构成。
凡是要求接受服务的人与物统称为顾客;凡是给予顾客服务的人与物统称为服务员(或服务台)。
MATLA是一种用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境。
使用MATLAB可以较使用传统的编程语言(如C、C++ 和Fortran )更快地解决技术计算问题。
关键词:程序化模拟;单服务台;等待时间;排队论一、问题叙述众所周知,近年来我国大学大举扩招,学生人数大幅增加,而大学校园往往距离城市中心较远,银行数量较少,这就导致了银行业务繁忙时大量学生在银行窗口前排起长队等待的情况。
这种现象长期困扰着广大学生,浪费了同学们的大量时间。
为此,我们建立银行单服务台排队模型,并用MATLA进行模拟,以计算学生在银行窗口前的平均排队时间。
二、模型假设1。
在银行只有一个服务窗口,客户陆续来到,服务窗口逐个地接待客户.当到来的客户较多时,一部分客户便须排队等待,被接待后的客户便离开银行。
2。
客户到达的间隔时间服从指数分布(均值为10 分钟);每个客户的服务时间服从均匀分布U[10,15] 。
3。
客户到达时刻、客户服务完毕并离去时刻等均视为随机事件 (瞬间完成)。
4。
排队按先到先服务规则。
三、符号说明arrive ( i ):第i 个客户到达的时刻;wait(i):第i个客户的排队等待时间;servetime(i) :第i个客户接受服务的时间;meantime(i) :客户的平均等待时间n客户数目四、模型的建立与求解在任意时刻t,系统的状态可以用排队等候的客户数目和服务员是否在工作来描述。
单服务员的排队模型:在某商店有一个售货员,顾客陆续来到,售货员逐个地接待顾客.当到来的顾客较多时,一部分顾客便须排队等待,被接待后的顾客便离开商店.设:1.顾客到来间隔时间服从参数为0.1的指数分布.2.对顾客的服务时间服从[4,15]上的均匀分布.3.排队按先到先服务规则,队长无限制.(1)模拟100个工作日,求出平均每日完成服务的个数及每日顾客的平均等待时间.MATLAB程序:clearsm=0;%总工作时间,初始为0m=0;%服务总个数for j=1:100jw(j)=0;i=2;x(i)=exprnd(10);c(i)=x(i);b(i)=x(i);while b(i)<=480y(i)=unifrnd(4,15);e(i)=b(i)+y(i);w(j)=w(j)+b(i)-c(i);i=i+1;x(i)=exprnd(10);c(i)=c(i-1)+x(i);b(i)=max(c(i),e(i-1));endi=i-2;t=w(j)/i %每j日顾客的平均等待时间m=m+i;sm=sm+w(j);%总的等待时间endm ; %100日服务总个数am=m/100 %输出平均每日完成服务的个数at= sm/m %输出平均每日顾客平均等待时间运行结果:j =1t =7.6488j =2t =21.5629j =3t =48.0306j =4t =15.3583j =5t =29.0681 j =6t =43.9925 j =7t =9.1838 j =8t =29.3542 j =9t =37.3775j =10t =36.6198 j =11t =15.1372 j =12t =11.9697 j =13t =46.2765 j =14t =5.0990 j =15t =12.4896 j =16t =19.3674 j =17t =27.7045 j =18t =13.7486 j =19t =24.3442 j =20t =10.8663 j =21t =8.0429 j =22t =10.372323t =11.8501 j =24t =14.3409 j =25t =46.0177 j =26t =8.8139 j =27t =5.3630 j =28t =12.8179 j =29t =7.2817 j =30t =11.1612 j =31t =9.3863j =32t =62.4873 j =33t =13.0453 j =34t =21.7910 j =35t =16.5294 j =36t =12.2347 j =37t =24.9796 j =38t =78.2435 j =39t =24.3057 j =40t =15.2035 j =41t =46.8024 j =42t =56.4635 j =43t =37.1819 j =44t =18.293145t =55.0295 j =46t =35.6992 j =47t =24.6073 j =48t =12.9206 j =49t =15.4886 j =50t =17.0108 j =51t =20.9452 j =52t =21.8094 j =53t =75.8497j =54t =25.1111 j =55t =34.9260 j =56t =32.5712 j =57t =27.9767 j =58t =29.5067 j =59t =29.4701 j =60t =19.2476 j =61t =16.3576 j =62t =8.8686 j =63t =29.0910 j =64t =14.7117 j =65t =36.7096 j =66t =46.951267t =7.7582 j =68t =11.8390 j =69t =43.2197 j =70t =97.6024 j =71t =70.4187 j =72t =8.5048 j =73t =4.1632 j =74t =18.7508 j =75t =41.1622j =76t =28.1712 j =77t =56.6012 j =78t =45.1566 j =79t =12.9582 j =80t =6.6022 j =81t =19.3046 j =82t =26.1914 j =83t =8.4448 j =84t =18.3721 j =85t =18.1843 j =86t =41.0727 j =87t =7.7466 j =88t =54.313889t =22.9150 j =90t =68.9592 j =91t =11.5373 j =92t =14.4600 j =93t =27.6556 j =94t =41.1297 j =95t =24.8645 j =96t =36.2404 j =97t =5.2884j =98t =7.2035 j =99t =25.1523 j =100t =24.6979 am =44.1400 at =27.1289。
M/M/1排队系统实验报告一、实验目的本次实验要求实现M/M/1单窗口无限排队系统的系统仿真,利用事件调度法实现离散事件系统仿真,并统计平均队列长度以及平均等待时间等值,以与理论分析结果进行对比。
二、实验原理根据排队论的知识我们知道,排队系统的分类是根据该系统中的顾客到达模式、服务模式、服务员数量以及服务规则等因素决定的。
1、 顾客到达模式设到达过程是一个参数为λ的Poisson 过程,则长度为t 的时间内到达k 个呼叫的概率 服从Poisson 分布,即etkk 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;CusNum(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');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; %各顾客在系统中的排队时间由事件来触发仿真时钟的不断推进。
function out=MMSmteam(s,m,mu1,mu2,T)%M/M/S/m排队模型%s——修理工个数%m——机器源数%T——时间终止点%mu1——机器离开-到达时间服从指数分布%mu2——修理时间服从指数分布%事件表:% p_s——修理工空闲概率% arrive_time——机器到达事件% leave_time——机器离开事件%mintime——事件表中的最近事件%current_time——当前时间%L——队长%tt——时间序列%LL——队长序列%c——机器到达时间序列%b——修理开始时间序列%e——机器离开时间序列%a_count——到达机器数%b_count——修理机器数%e_count——损失机器数%初始化arrive_time=exprnd(mu1,1,m);arrive_time=sort(arrive_time);leave_time=[];current_time=0;L=0;LL=[L];tt=[current_time];c=[];b=[];e=[];a_count=0;%循环while min([arrive_time,leave_time])<Tcurrent_time=min([arrive_time,leave_time]);tt=[tt,current_time]; %记录时间序列if current_time==min(arrive_time) %机器到达子过程arrive_time(1)=[]; % 从事件表中抹去机器到达事件a_count=a_count+1; %累加到达机器数if L<s %有空闲修理工L=L+1; %更新队长c=[c,current_time];%记录机器到达时间序列b=[b,current_time];%记录修理开始时间序列leave_time=[leave_time,current_time+exprnd(mu2)];%产生新的机器离开事件leave_time=sort(leave_time);%离开事件表排序else %无空闲修理工L=L+1; %更新队长c=[c,current_time];%记录机器到达时间序列endelse %机器离开子过程leave_time(1)=[];%从事件表中抹去机器离开事件arrive_time=[arrive_time,current_time+exprnd(mu1)];arrive_time=sort(arrive_time);%到达事件表排序e=[e,current_time];%记录机器离开时间序列if L>s %有机器等待L=L-1; %更新队长b=[b,current_time];%记录修理开始时间序列leave_time=[leave_time,current_time+exprnd(mu2)];%产生新的机器离开事件leave_time=sort(leave_time);%离开事件表排序else %无机器等待L=L-1; %更新队长endendLL=[LL,L]; %记录队长序列endWs=sum(e-c(1:length(e)))/length(e);Wq=sum(b-c(1:length(b)))/length(b);Wb=sum(e-b(1:length(e)))/length(e);Ls=sum(diff([tt,T]).*LL)/T;Lq=sum(diff([tt,T]).*max(LL-s,0))/T;p_s=1.0/(factorial(m)/factorial(m).*(mu2/mu1)^0+factorial(m)/factorial(m-1).*(mu2/mu1)^1+fact orial(m-2)/factorial(m-1).*(mu2/mu1)^2+factorial(m)/factorial(m-2).*(mu2/mu1)^2+factorial(m)/ factorial(m-4).*(mu2/mu1)^4+factorial(m)/factorial(m-5).*(mu2/mu1)^5);fprintf('修理工空闲概率:%d\n',p_s)%修理工空闲概率fprintf('到达机器数:%d\n',a_count)%到达机器数fprintf('平均逗留时间:%f\n',sum(e-c(1:length(e)))/length(e))%平均逗留时间fprintf('平均等待时间:%f\n',sum(b-c(1:length(b)))/length(b))%平均等待时间fprintf('平均修理时间:%f\n',sum(e-b(1:length(e)))/length(e))%平均修理时间fprintf('平均队长:%f\n',sum(diff([tt,T]).*LL)/T)%平均队长fprintf('平均等待队长:%f\n',sum(diff([tt,T]).*max(LL-s,0))/T)%平均等待队长for i=0:mp(i+1)=sum((LL==i).*diff([tt,T]))/T;%队长为i的概率fprintf('队长为%d的概率:%f\n',i,p(i+1));fprintf('机器不能马上得到修理的概率:%f\n',1-sum(p(1:s)))%机器不能马上得到修理的概率out=[Ws,Wq,Wb,Ls,Lq,p];function out=MMSkteam(s,k,mu1,mu2,T)%多服务台%s——服务台个数%k——最大顾客等待数%T——时间终止点%mu1——到达时间间隔服从指数分布%mu2——服务时间服从指数分布%事件表:% arrive_time——顾客到达事件% leave_time——顾客离开事件%mintime——事件表中的最近事件%current_time——当前时间%L——队长%tt——时间序列%LL——队长序列%c——顾客到达时间序列%b——服务开始时间序列%e——顾客离开时间序列%a_count——到达顾客数%b_count——服务顾客数%e_count——损失顾客数%初始化arrive_time=exprnd(mu1);leave_time=[];current_time=0;L=0;LL=[L];tt=[current_time];c=[];b=[];e=[];a_count=0;b_count=0;e_count=0;while min([arrive_time,leave_time])<Tcurrent_time=min([arrive_time,leave_time]);tt=[tt,current_time]; %记录时间序列if current_time==arrive_time %顾客到达子过程arrive_time=arrive_time+exprnd(mu1); % 刷新顾客到达事件a_count=a_count+1; %累加到达顾客数if L<s %有空闲服务台L=L+1; %更新队长b_count=b_count+1;%累加服务顾客数c=[c,current_time];%记录顾客到达时间序列b=[b,current_time];%记录服务开始时间序列leave_time=[leave_time,current_time+exprnd(mu2)];%产生新的顾客离开事件leave_time=sort(leave_time);%离开事件表排序elseif L<s+k %有空闲等待位L=L+1; %更新队长b_count=b_count+1;%累加服务顾客数c=[c,current_time];%记录顾客到达时间序列else %顾客损失e_count=e_count+1;%累加损失顾客数endelse %顾客离开子过程leave_time(1)=[];%从事件表中抹去顾客离开事件e=[e,current_time];%记录顾客离开时间序列if L>s %有顾客等待L=L-1; %更新队长b=[b,current_time];%记录服务开始时间序列leave_time=[leave_time,current_time+exprnd(mu2)];leave_time=sort(leave_time);%离开事件表排序else %无顾客等待L=L-1; %更新队长endendLL=[LL,L]; %记录队长序列endWs=sum(e-c(1:length(e)))/length(e);Wq=sum(b-c(1:length(b)))/length(b);Wb=sum(e-b(1:length(e)))/length(e);Ls=sum(diff([tt,T]).*LL)/T;Lq=sum(diff([tt,T]).*max(LL-s,0))/T;fprintf('到达顾客数:%d\n',a_count)%到达顾客数fprintf('服务顾客数:%d\n',b_count)%服务顾客数fprintf('损失顾客数:%d\n',e_count)%损失顾客数fprintf('平均逗留时间:%f\n',Ws)%平均逗留时间fprintf('平均等待时间:%f\n',Wq)%平均等待时间fprintf('平均服务时间:%f\n',Wb)%平均服务时间fprintf('平均队长:%f\n',Ls)%平均队长fprintf('平均等待队长:%f\n',Lq)%平均等待队长if k~=inffor i=0:s+kp(i+1)=sum((LL==i).*diff([tt,T]))/T;%队长为i的概率fprintf('队长为%d的概率:%f\n',i,p(i+1));endelsefor i=0:3*sp(i+1)=sum((LL==i).*diff([tt,T]))/T;%队长为i的概率fprintf('队长为%d的概率:%f\n',i,p(i+1));endendfprintf('顾客不能马上得到服务的概率:%f\n',1-sum(p(1:s)))%顾客不能马上得到服务的概率out=[Ws,Wq,Wb,Ls,Lq,p];。
M/M/1 排队系统实验报告一、实验目的本次实验要现M/M/1单窗口无限排队系统的系统仿真,利用事件调度法实 现离散事件系统仿真,并统计平均队列长度以及平均等待时间等值, 以与理论分析结果进行对比二、实验原理根据排队论的知识我们知道,排队系统的分类是根据该系统中的顾客到达模 式、服务模式、服务员数量以及服务规则等因素决定的。
1、 顾客到达模式设到达过程是一个参数为的Poisson 过程,则长度为t 的时间到达k 个呼常数,表示了平均到达率或 Poisson 呼叫流的强度。
2、 服务模式设每个呼叫的持续时间为i ,服从参数为的负指数分布,即其分布函数为P{X t} 1 e t ,t 03、服务规则先进先服务的规则(FIFO )4、 理论分析结果T的平均等待时间为P k (t)叫的概率 服从Poisson 分布,即(t)k t k! e k 0,1,2,,其中 >0为在该M/M/1 系统中,设,则稳态时的平均等待队长为,顾客三、实验容M/M/1排队系统:实现了当顾客到达分布服从负指数分布,系统服务时间也服从负指数分布,单服务台系统,单队排队,按FIFO方式服务。
四、采用的语言MatLab语言源代码:clear;clc;%M/M/1排队系统仿真SimTota匸i nput(' 请输入仿真顾客总数SimTota匸');% 仿真顾客总数;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);In terval_Arrive=-log(ra nd(1,SimTotal))/Lambda;% 到达时间间隔In terval_Serve=-log(ra nd(1,SimTotal))/Mu;% 服务时间t_Arrive(1)=I nterval_Arrive(1);% 顾客到达时间ArriveNum(1)=1;for i=2:SimTotalt_Arrive(i)=t_Arrive(i-1)+In terval_Arrive(i);ArriveNum(i)=i;endt_Leave(1)=t_Arrive(1)+l nterval_Serve(1);% 顾客离开时间LeaveNum⑴=1;for i=2:SimTotalif t_Leave(i-1)<t_Arrive(i)t_Leave(i)=t_Arrive(i)+In terval_Serve(i);elset_Leave(i)=t_Leave(i-1)+I nterval_Serve(i);endLeaveNum(i)=i;endt_Wait=t_Leave-t_Arrive; % 各顾客在系统中的等待时间t_Wait_avg=mea n( t_Wait);t_Queue=t_Wait-I nterval_Serve;% 各顾客在系统中的排队时间t_Queue_avg=mea n( t_Queue);Timepoi nt=[t_Arrive,t_Leave];% 系统中顾客数随时间的变化Timepo in t=sort(Timepo in t);ArriveFlag=zeros(size(Timepo in t));% 到达时间标志CusNum=zeros(size(Timepoi nt));temp=2;CusNum⑴=1;for i=2:le ngth(Timepoi nt)if (temp<=le ngth(t_Arrive))&&( Timepoi nt(i)==t_Arrive(temp))CusNum(i)=CusNum(i-1)+1;temp=temp+1;ArriveFlag(i)=1;elseCusNum(i)=CusNum(i-1)-1;endend%系统中平均顾客数计算Time_ in terval=zeros(size(Timepo in t));Time_in terval(1)=t_Arrive(1);for i=2:le ngth(Timepoi nt)Time_i nterval(i)=Timepoi nt(i)-Timepoi nt(i-1);endCusNum」romStart=[0 CusNum];CusNum_avg=sum(CusNum_fromStart.*[Time」n terval 0] )/Timepo in t(e nd); QueLe ngth=zeros(size(CusNum));for i=1:le ngth(CusNum)if CusNum(i)>=2QueLe ngth(i)=CusNum(i)-1;elseQueLe ngth(i)=0;endendQueLe ngth_avg=sum([O QueLe ngth].*[Time_i nterval 0] )/Timepoi nt(e nd);%系统平均等待队长%仿真图figure(1);set(1,'positio n',[0,0,1000,700]);subplot(2,2,1);title('各顾客到达时间和离去时间');stairs([0 ArriveNum],[O t_Arrive],'b');hold on;stairs([0 LeaveNum],[0 t_Leave],'y');legend('到达时间','离去时间');hold off;subplot(2,2,2);stairs(Timepo in t,CusNum,'b')title('系统等待队长分布');xlabel('时间');ylabel('队长');subplot(2,2,3);title('各顾客在系统中的排队时间和等待时间’);stairs([0 ArriveNum],[O t_Queue],'b');hold on;stairs([0 LeaveNum],[O 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)函数产生的结果相同In terval_Serve=-log(ra nd(1,SimTotal))/Mu; % 服务时间间隔t_Arrive(1)=l nterval_Arrive(1); % 顾客到达时间时间计算t_Wait=t_Leave-t_Arrive; %各顾客在系统中的等待时间t_Queue=t_Wait-I nterval_Serve; %各顾客在系统中的排队时间由事件来触发仿真时钟的不断推进。
计算机仿真报告指导教师:潘劲松学生班级:计科1001 学生姓名:刘雄学号: 201003647 班内序号: 22MATLAB 模拟银行单服务台排队模型模型假设1。
在银行只有一个服务窗口,客户陆续来到,服务窗口逐个地接待客户.当到来的客户较多时,一部分客户便须排队等待,被接待后的客户便离开银行。
2。
客户到达的间隔时间服从指数分布(均值为10分钟);每个客户的服务时间服从均匀分布U[10,15]。
3。
客户到达时刻、客户服务完毕并离去时刻等均视为随机事件(瞬间完成)。
4。
排队按先到先服务规则。
符号说明arrive (i ):第i 个客户到达的时刻; wait(i) :第i 个客户的排队等待时间; servetime(i) :第i 个客户接受服务的时间; meantime(i) :客户的平均等待时间 n :客户数目模型的建立与求解在任意时刻t ,系统的状态可以用排队等候的客户数目和服务员是否在工作来描述。
排队等候的客户数目称为队长,记作L(t),为非负整数。
服务员的状态用S (t )表示,当服务员工作时,令S(t)=1;服务员空闲时,令S(t)=0。
系统的性能指标通常用排队长度、等待时间和服务利用率等来衡量。
由于它们随时间改变,一般用一段时间内的平均值作为数量指标。
有以下三个指标:1)平均队长 指队长L(t)在[0,T]内的平均值,计算公式为⎰=Tdt t L T L 0)(12)客户的平均等待时间 指每个客户平均等待的时间长度,记作W .3) 服务利用率 指服务员工作时间在T 中的比例,⎰=Tdt t S T U 0)(1为了简化问题,假设在上述模型下,系统的性能指标只有一个,即客户的平均等待时间.考虑用模拟方法来求W ,若系统能模拟出每位客户的等待时间序列},,,{21n D D D ,则∑==ni i D n W 11具体模拟步骤如下:第1步 调查并收集和处理数据,记录客户到达时刻、等待时间和服务时间.假定客户到达的间隔时间服从指数分布(均值为10分钟);每个客户的服务时间服从均匀分布U[10,15]。
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;CusNum(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');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; %各顾客在系统中的排队时间由事件来触发仿真时钟的不断推进。
MATLAB模拟银行单服务台排队模型
银行单服务台排队模型是一种常见的排队模型,主要用于描述在银行
等排队服务场所中,只有一个服务员的情况下,客户如何排队等待服务的
情况。
1.模型假设
在进行银行单服务台排队模型的建模过程中,我们需要进行一些假设,以简化问题的复杂性。
这些假设包括:
-客户到达时间服从泊松分布:客户到达时间间隔服从泊松分布,即
客户到达服从一个固定的时间间隔。
-服务时间服从指数分布:每个客户的服务时间是独立同分布的,服
从指数分布。
-服务台只有一个:我们假设只有一个服务台,客户按照到达的顺序
排队等待服务。
-客户不能提前离开:我们不考虑客户在等待期间可能会放弃等待而
提前离开的情况。
2.模型参数
在建立银行单服务台排队模型时,我们需要定义一些模型参数。
这些
参数包括:
-平均到达率λ:客户的平均到达率,表示单位时间内到达的客户数
量的期望值。
-平均服务率μ:服务员的平均服务率,表示单位时间内服务的客户数量的期望值。
-服务台利用率ρ:服务台的利用率,表示服务台的平均使用率。
-平均等待时间W:客户平均等待服务的时间。
-平均队列长度L:客户平均排队等待的队列长度。
3.模拟过程
为了模拟银行单服务台排队模型,我们使用MATLAB编程进行模拟。
以下是一个简单的模拟过程:
-生成客户到达时间间隔:使用泊松分布生成客户到达时间间隔。
-生成客户服务时间:使用指数分布生成客户的服务时间。
-计算客户到达时间和服务完成时间:根据客户的到达时间间隔和服务时间,计算客户的到达时间和服务完成时间。
-计算客户的等待时间:根据客户的到达时间和服务完成时间,计算客户的等待时间。
-统计模拟结果:统计客户的等待时间、队列长度等模拟结果。
4.结果分析
通过对模拟结果的分析,我们可以得到一些关键的结果,包括:
-平均等待时间:通过计算客户的平均等待时间,可以评估服务台的效率和客户的等待体验。
-平均队列长度:通过计算客户的平均排队等待的队列长度,可以评
估服务台的负载情况。
-服务台利用率:通过计算服务台的利用率,可以评估服务台的利用
效率。
-系统繁忙度:通过计算服务台的实际服务时间与系统总时间的比值,可以评估系统的繁忙程度。
5.模型改进
上述模型是一个简单的银行单服务台排队模型,但在实际情况中可能
存在一些复杂性。
因此,在实际应用中,我们可以对模型进行改进。
一些
可能的改进包括:
-添加多个服务台:如果银行有多个服务台,可以将模型扩展到多个
服务台的情况,以更准确地模拟实际情况。
-考虑提前离开情况:在实际情况中,客户可能会在等待期间提前离开。
可以将模型扩展以考虑这种情况。
-考虑服务时间的不确定性:服务时间可能会受到一些其他因素的不
确定性影响,例如客户的需求或服务员的技能水平。
可以在模型中考虑这
种不确定性。
综上所述,银行单服务台排队模型是一个常见的排队模型,可以用于
模拟银行等排队服务场所中的客户排队等待服务的情况。
通过模拟过程,
我们可以得到一些关键的结果,评估服务台的效率和客户的等待体验。
在
实际应用中,可以根据具体情况对模型进行改进,以更准确地模拟实际情况。