计算机排队系统仿真模拟程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
clear all
close all
%MM1排队系统计算机仿真
SimCusNo=input('请设定MM1仿真系统的被服务游客数SimCusNo=[1000]'); if isempty(SimCusNo)
SimCusNo=1000;
end;
Ba=5;
Bs=4;
EventQueue=[];
IfOutOfNum = 0;
NextTime = 0;
CustomerNum = 0;
EndTime = 0;
HasServedNum = 0;
CurStatus =0;
i=1;
EventInit=[0,0,0,0,0,0,0,0,0,0,0,0,0,0];
EventQueue(:,i)=EventInit;
i=i+1;
while (IfOutOfNum==0)
if (HasServedNum >=SimCusNo)
IfOutOfNum = 1;
end;
t_CurTime = NextTime;
t_ReachTime = t_CurTime+(-Ba*log(rand())) ;
if EndTime t_StartTime=t_CurTime; else t_StartTime=EndTime; end ; if EndTime-NextTime>0 t_WaitTime=EndTime-NextTime else t_WaitTime=0; end; t_ServeTime = -Bs*log(rand()); if CustomerNum>0 CurStatus=1; else CurStatus=0 end Come_Event=[t_CurTime,... 1,... CustomerNum+HasServedNum+1,... t_CurTime,... t_ReachTime,... CurStatus,... CustomerNum,... CustomerNum+1,...) t_StartTime,... t_WaitTime,... t_ServeTime,... t_StartTime+t_ServeTime,... t_WaitTime+t_ServeTime,... HasServedNum... ]; EventQueue(:,i)=Come_Event; trace=find(EventQueue(2,1:i-1)==1) if length(trace)>0 setpos=trace(length(trace)); %min_w=find(min(EventQueue(1,setpos+1:i-1))); for mm=setpos+1:i-1 min_s=mm; for(nn=mm+1:i) if(EventQueue(1,nn) min_s=nn; end; if(min_s==mm) temp=EventQueue(:,min_s); EventQueue(:,min_s)=EventQueue(:,mm); EventQueue(:,mm)=temp; end; end; end; end; i=i+1; Leave_Event=[Come_Event(12),... 2,... Come_Event(3),... Inf,... Inf,... Inf,... Inf,... Inf,... Inf,... Inf,... Inf,... Come_Event(12),... Inf,... Inf... ]; EventQueue(:,i)=Leave_Event; i=i+1; NextTime = t_ReachTime; CustomerNum=CustomerNum+1; EndTime = t_StartTime+t_ServeTime; %size(EventQueue); AssistArray=Reserve(EventQueue,t_CurTime,t_ReachTime); for jj=length(AssistArray):-1:1 CustomerNum=CustomerNum-1; HasServedNum=HasServedNum+1; EventQueue(8,AssistArray(jj))=CustomerNum; EventQueue(14,AssistArray(jj))=HasServedNum; if CustomerNum>0 CurStatus=1; else CurStatus=0; end ; %tmp=0; EventQueue(6,AssistArray(jj))=CurStatus; tmp=CustomerNum; if tmp-1>0 EventQueue(7,AssistArray(jj))=tmp-1; else EventQueue(7,AssistArray(jj))=0; end; end; end; disp('平均等待时间如下') AveWaitTime=CountWaitingTime(EventQueue,SimCusNo) disp('平均等待队长如下') AveQuLen=CountQueueLen(EventQueue,SimCusNo) disp('仿真结束'); ;