• 大小: 5KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-05-24
  • 语言: Matlab
  • 标签: MATLAB  排队论  仿真  

资源简介

多服务台混合制排队论的MATLAB仿真,可以自己设置服务台数,系统容量,到达概率,服务台效率等。最后可以输出系统繁忙概率,平均等待时间,以及各种图表

资源截图

代码片段和文件信息

% 此脚本用来一般排队论模型的仿真MMSS,版本2.0,功能和1.0一样,只是是图表稍微好看点
% 队伍只有一队,服务台有s个,%队伍的容量为max_num(不包括正在服务的,只包括正在等待的)
% 作者:Macer程
clear
clc
%% 初始准备阶段
n=50;   %仿真总人数
lambda=9;%单位时间顾客到达数
mu=2;    %单个服务台单位时间接待顾客数
s=4;     %服务台数
max_num=10;%队伍的容量注意(不包括正在服务的,只包括正在等待的)
list=zeros(7n);
list(1:)=exprnd(1/lambda1n);%产生指数分布的顾客到达时间间隔
list(1:)=cumsum(list(1:));%list第一行顾客到达时间
list(2:)=exprnd(1/mu1n); %第二行对顾客的服务时间
                            %第三行用来存放等待时间
                            %第四行用来存放离开时间
                            %第五行存放到达时整系统的人数(包括正在被服务的)
                            %第六行存放正在等待中的人数
                            %第7行用来存放该顾客是否直接离开,1直接离开,0排队等待
peo=[];   %储存每个顾客到达时在系统中的总人数的序号


%% 仿真阶段
for i=1:n
    now=find(list(4peo)>list(1i));%顾客到来时还在系统中的人的序号
    peo=peo(now);       %更新目前系统中的人的序号
    num=length(now);    %系统中总人数
    if num>=max_num+s   %假如排队人超过了系统的容量,该顾客损失
        list(2:7i)=[0;0;list(1i);num;num-s;1];
        continue
    else if num            list(3:6i)=[0sum(list(1:3i))num0];
            peo=[peoi];%把当前顾客加入系统
        else            %有人排队,且排队的人=now-s
            time=sort(list(4peo));           %对正在系统中的人的离开时间排序
            list(3i)=time(end-s+1)-list(1i);%此时,顾客的等待时间为当前系统中倒数第s个离开的顾客的时间-该顾客的到达时间
            list(4:6i)=[sum(list(1:3i));num;num-s];
            peo=[peoi];%把当前顾客加入系统
        end
    end
end
%   以上计算的是每个顾客到达时系统的队长,


%% 下面计算在时间范围内系统队长的变化
timechange=zeros(42*n);%第一行用来存时间,第二行用来存对应时间的总人数,第三行存放对应时间正在排队的人数第四行表示是否繁忙,1表示繁忙
[timechange(1:)idxs]=sort([list(1:)list(4:)]);%系统队长的变化一定发生在顾客到来或离去的时刻,记这些时刻为“转变时刻”
timechange(21)=1;      %第一个人到达的时候,系统中人数开始变为1正在排队的人=0不繁忙
for i=2:2*n             %讨论每个“转变时刻”的人数变化
    if idxs(i)<=n       %当这个时刻是有人到达时
        timechange(2i)=timechange(2i-1)+1;
    else                %该时刻是有人离去
        timechange(2i)=timechange(2i-1)-1;
    end
    if timechange(2i)

评论

共有 条评论