⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 s.m

📁 M/M/1单服务台排队系统仿真(用事件调度法实现离散事件系统仿真) 顾客到达模到达时间间隔和顾客服务时间均服从负指数分布
💻 M
字号:
function[wait_time,stay_time,queue_length,use_rate]=shiyan1(p,q,n_num);
status=zeros(3,n_num);  % 定义一个3行的矩阵表示每个顾客的状态
status(1,:)=exprnd(p,1,n_num);%p为平均到达时间间隔
status(2,:)=exprnd(q,1,n_num);%q为每个顾客平均服务时间间隔

%求平均等待时间
for i=2:n_num
        if status(1,i)<=status(2,i-1)+status(3,i-1);%顾客i到达时间小于等于i-1的服务和等待时间的和
           status(3,i)=status(2,i-1)+status(3,i-1)-status(1,i);%需要等待
        else
            status(3,i)=0;%否则不需要等待 
        end
end
arrive=cumsum(status(1,:));%每位顾客的到达时间
status(1,:)=arrive;
leave=sum(status);%每位顾客的离开时间
stay_time=(sum(status(2,:))+sum((status(3,:))))/n_num;
wait_time=mean(status(3,:))%求平均等待时间

%求平均队长
queue_num=zeros(1,2*n_num+1);  %初始化队列长度
queue_time=zeros(1,2*n_num+1); %与队列长度相应的队列时间
m1=1; %等待的顾客+正在接受服务的顾客+正在离开的顾客
m2=1; %刚到达的顾客+ 正在服务的顾客+等待的顾客
m3=1; %正在离开的顾客数+刚到达的顾客数


while m1<=n_num
    m3=m3+1;%如果当一个顾客来到,但没有顾客离开时,队长加1
    if arrive(m1)<leave(m2);%有顾客到达但没有顾客离开
       queue_num(1,m3)=m1-m2+1;%m3的长度
       queue_time(1,m3)=arrive(m1); %m3的队列时间为m1的到达时间
       m1=m1+1; %又多了一个等待的顾客
    else%一个顾客离开后一个顾客来到
       queue_num(1,m3)=m1-m2-1;
       queue_time(1,m3)=leave(m2); %m3的队列时间为m2的离开时间
       m2=m2+1; %又服务完一个人   
    end
end

while m2<=n_num
    m3=m3+1;%如果没有顾客再到来
    queue_num(1,m3)=n_num-m2;%此时不再来人,队长就是n_num-m2
    queue_time(1,m3)=leave(m2);%此时不再来人,队列时间就是观察的m2的离开时间
    m2=m2+1;%又服务完一个人
end

temp=diff(queue_time);%求queue_time各列的差,结果temp为每个队长所保持的时间
overtime=max(queue_time);%队列时间的最大值,注意到queue_time是累加的
queue_length=sum(temp.*queue_num(2:(2*n_num+1)))/overtime

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -