排队论模型及MATLAB实现

排队论模型及MATLAB实现文章目录 1 按 2 排队现象 3 模型介绍 3 1 排队服务过程 3 2 排队系统的要素 3 3 顾客输入过程 3 4 排队结构与排队规则 3 5 服务机构与服务规则 3 6 服务台 员 为顾客服务的顺序 3 7 到达间隔和服务时间典型分布 3 8 排队模型示例 3 9 系统运行状态参数 3 10 系统运行指标参数 3 11 顾客到达时间间隔分布 3 12 顾客服务时间分布 3 13 单服务台负

1. 按

2. 排队现象

排队是在日常生活中经常遇到的现象,如顾客到商店购买物品、病人到医院看病常 常要排队。此时要求服务的数量超过服务机构(服务台、服务员等)的容量。也就是说, 到达的顾客不能立即得到服务,因而出现了排队现象。这种现象不仅在个人日常生活中 出现,电话局的占线问题,车站、码头等交通枢纽的车船堵塞和疏导,故障机器的停机 待修,水库的存贮调节等都是有形或无形的排队现象。由于顾客到达和服务时间的随机性。可以说排队现象几乎是不可避免的。

到达顾客 服务内容 服务机构
病人 诊断/手术 医生/手术台
进港的货船 装货/卸货 码头泊位
到港的飞机 降落 机场跑道
电话拨号 通话 交换台
故障机器 修理 修理技工
修理技工 领取修配零件 仓库管理员
上游河水 入库 水闸管理员

3. 模型介绍

3.1. 排队服务过程

在这里插入图片描述

3.2. 排队系统的要素

3.3. 顾客输入过程

3.4. 排队结构与排队规则

3.5. 服务机构与服务规则

3.6. 服务台(员)为顾客服务的顺序

3.7. 到达间隔和服务时间典型分布

3.8. 排队模型示例

3.9. 系统运行状态参数

  • 系统状态N(t):指排队系统在时刻t时的全部顾客数N(t),包括“排队顾客数”和“正被服务顾客数”;
  • 系统状态概率:
    1. 瞬态概率 P n ( t ) P_{n}(t) Pn(t):表示时刻t系统状态N(t)=n 的概率;
    2. 稳态概率 P n P_{n} Pn
      P n = lim ⁡ t → ∞ P n ( t ) P_{n}=\lim _{t \rightarrow \infty} P_{n}(t) Pn=limtPn(t)
      一般排队系统运行了一定长的时间后,系统状态的概率分布不再随时间t变化,即初始时刻(t=0)系统状态的概率分布 ( P n ( 0 ) P_{n}(0) Pn(0), n>>0)的影响将消失。




3.10. 系统运行指标参数

用于评价排队系统的优劣。

  1. 队长与排队长
    (1)队长: 系统中的顾客数(n)期望值记为 L s L_{s} Ls
    (2)排队长: 系统中排队等待服务的顾客数;
    期望值记为 L q L_{q} Lq






  2. 逗留时间与等待时间
    (1)逗留时间:指一个顾客在系统中的全部停留时间;期望值,记为 W s W_{\mathrm{s}} Ws
    (2)等待时间:指一个顾客在系统中的排队等待时间;期望值,记为 W q W_{\mathrm{q}} Wq
    W s W_{\mathrm{s}} Ws= W q W_{\mathrm{q}} Wq + E[服务时间]






  3. 其他相关指标
    (1)忙期: 指从顾客到达空闲服务机构起到服务机构再次空闲的时间长度;
    (2)忙期服务量:指一个忙期内系统平均完成服务的顾客数;
    (3)损失率: 指顾客到达排队系统,未接受服务而离去的概率;
    (4)服务强度:ρ= λ/sμ;








3.11. 顾客到达时间间隔分布

泊松流与泊松分布

  • 如果顾客到达满足如下条件,则称为泊松流
    (1) 在不相互重叠的时间区间内,到达顾客数相互独立(无后效性).
    (2) 对于充分小的时间间隔[t, t+∆t]内,到达1个顾客的概率与t无关,仅与时间间隔成正比 (平稳性): P 1 ( t , t + Δ t ) = λ Δ t + o ( Δ t ) P_{1}(t, t+\Delta t)=\lambda \Delta t+o(\Delta t) P1(t,t+Δt)=λΔt+o(Δt)
    (3) 对于充分小的时间间隔[t, t+∆t],2个及以上顾客到达的概率可忽略不计 (普通性)。






  • 泊松流到达间隔服从负指数分布
    若顾客到达间隔T的概率密度为 f T ( t ) = { λ e − λ t , t ≥ 0 0 , t < 0 f_{T}(t)=\left\{\begin{array}{ll}{\lambda e^{-\lambda t},} & {t \geq 0} \\ {0} & {, t<0}\end{array}\right. fT(t)={
    λeλt,0t0,t<0
    则称T服从负指数分布,分布函数为: F T ( t ) = { 1 − λ e − λ t , t ≥ 0 0 , t < 0 F_{T}(t)=\left\{\begin{array}{ll}{1-\lambda e^{-\lambda t},} & {t \geq 0} \\ {0} & {, t<0}\end{array}\right. FT(t)={
    1λeλt,0t0,t<0

    若顾客流是泊松流时,顾客到达的时间间隔服从上述负指数分布
    E [ T ] = 1 / λ ;   Var ⁡ [ T ] = 1 / λ 2 ;   σ [ T ] = 1 / λ \mathrm{E}[\mathrm{T}]=1/\lambda;\ \operatorname{Var}[\mathrm{T}]=1/\lambda^{2};\ \sigma[\mathrm{T}]=1 / \lambda E[T]=1/λ; Var[T]=1/λ2; σ[T]=1/λ






3.12. 顾客服务时间分布

负指数分布

  • 对一个顾客的服务时间 T s \mathbf{T_s} Ts,等价于相邻两个顾客离开排队系统的时间间隔。若 T s \mathbf{T_s} Ts服从负指数分布,其概率密度和分布函数分别为:
    f T s ( t ) = { μ e − μ t , t ≥ 0 0 , t < 0 F T s ( t ) = { 1 − μ e − μ t , t ≥ 0 0 , t < 0 f_{T_{s}}(t)=\left \{\begin{array}{ll} \mu e^{-\mu t}&, t \geq 0 \\ 0&, t<0 \end{array}\right. \uad F_{T_{s}}(t)=\left \{\begin{array}{ll} 1-\mu e^{-\mu t}&, t \geq 0 \\ 0&, t<0 \end{array}\right. fTs(t)={
    μeμt0,t0,t<0
    FTs(t)=
    {
    1μeμt0,t0,t<0

    E [ T s ] = 1 / μ ;   V a r [ T s ] = 1 / μ 2 ;   σ [ T s ] = 1 / μ \mathbf{E[T_s]}=1/\mu;\ \mathbf{Var[T_s]}=1/\mu2;\ \mathbf{\sigma[T_s]}=1/\mu E[Ts]=1/μ; Var[Ts]=1/μ2; σ[Ts]=1/μ




  • E [ T s ] = 1 / μ \mathbf{E[T_s]}=1/\mu E[Ts]=1/μ:每个顾客的平均(期望)服务时间;
    μ:单位时间服务的顾客数,平均(期望)服务率;

3.13. 单服务台负指数分布M/M/1排队系统

  • 模型的条件是:
    1、输入过程――顾客源是无限的,顾客到达完全是随机的,单个到来,到达过程服从普阿松分布,且是平稳的;
    2、排队规则――单队,且队长没有限制,先到先服务;
    3、服务机构――单服务台,服务时间的长短是随机的,服从相同的指数分布。






  • 对于M/M/1模型有如下公式:
    P 0 = 1 − ρ P n = ρ n ( 1 − ρ ) L s = λ μ − λ = ρ 1 − ρ L q = λ 2 μ ( μ − λ ) = ρ 2 1 − ρ = L s ρ W s = 1 μ − λ W q = λ μ ( μ − λ ) = W s ρ P ( N > k ) = ρ k + 1   ( N 表 示 系 统 中 的 顾 客 数 ) \begin{array}{ll} {P_{0}=1-\rho} & {P_{n}=\rho^{n}(1-\rho)} \\ {L_{s}=\frac{\lambda}{\mu-\lambda}=\frac{\rho}{1-\rho}} & {L_{q}=\frac{\lambda^{2}}{\mu(\mu-\lambda)}=\frac{\rho^{2}}{1-\rho}=L_{s} \rho}\\ {W_{s}=\frac{1}{\mu-\lambda}} & {W_{q}=\frac{\lambda}{\mu(\mu-\lambda)}=W_{s} \rho}\\ {P(N>k)=\rho^{k+1}} \ (N表示系统中的顾客数)\\ \end{array} P0=1ρLs=μλλ=1ρρWs=μλ1P(N>k)=ρk+1 (N)Pn=ρn(1ρ)Lq=μ(μλ)λ2=1ρρ2=LsρWq=μ(μλ)λ=Wsρ

3.14. M/M/S模型

  • 状态概率
    P 0 = [ ∑ k = 0 S − 1 1 k ! ( λ μ ) k + 1 s ! 1 1 − ρ ∗ ( λ μ ) S ] − 1 P n = { 1 n ! ( λ μ ) n P 0 O < n ≤ S 1 S ! S n − s ( λ μ ) n P 0 n ≥ S \begin{array}{l}{P_{0}=\left[\sum_{k=0}^{S-1} \frac{1}{k !}\left(\frac{\lambda}{\mu}\right)^{k}+\frac{1}{s !} \frac{1}{1-\rho^{*}}\left(\frac{\lambda}{\mu}\right)^{S}\right]^{-1}} \\ {P_{n}=\left\{\begin{array}{ll}{\frac{1}{n !}\left(\frac{\lambda}{\mu}\right)^{n} P_{0}} & {O
    P0=[k=0S1k!1(μλ)k+s!11ρ1(μλ)S]1Pn=n!1(μλ)nP0S!Sns1(μλ)nP0O<nSnS


  • 主要运行指标
    L q = ( S ρ ∗ ) s ρ ∗ S ! ( 1 − ρ ∗ ) 2 P 0 L s = L q + s ρ ∗ W q = L q λ W s = L λ = W q + 1 μ \begin{array}{ll}{L_{\mathrm{q}}=\frac{\left(\mathrm{S} \rho^{*}\right)^{\mathrm{s}} \rho^{*}}{S !\left(1-\rho^{*}\right)^{2}} P_{0}} & {L_{s}=L_{q}+s \rho^{*}} \\ {W_{\mathrm{q}}=\frac{L_{\mathrm{q}}}{\lambda}} & {W_{s}=\frac{L}{\lambda}=W_{q}+\frac{1}{\mu}}\end{array} Lq=S!(1ρ)2(Sρ)sρP0Wq=λLqLs=Lq+sρWs=λL=Wq+μ1

  • 系统状态N ≥S的概率
    P ( N ≥ k ) = ∑ n = k ∞ P n = ρ k k ! ( 1 − ρ ∗ ) P 0 P(N \geq \mathrm{k})=\sum_{\mathrm{n}=\mathrm{k}}^{\infty} P_{\mathrm{n}}=\frac{\rho^{\mathrm{k}}}{\mathrm{k} !\left(1-\rho^{*}\right)} P_{0} P(Nk)=n=kPn=k!(1ρ)ρkP0

4. 模型举例

4.1. 例1(MM1)

  1. 先确定参数值:这是单服务台系统,有:
    λ = 3 人 / h , μ = 60 15 人 / h = 4 人 / h \lambda=3 人 / h, \mu=\frac{60}{15} 人 / h=4 人 / h λ=3/h,μ=1560/h=4/h
    故服务强度为:
    ρ = λ μ = 3 4 = 0.75 \rho=\frac{\lambda}{\mu}=\frac{3}{4}=0.75 ρ=μλ=43=0.75
    计算稳态概率:
    P 0 = 1 − ρ = 1 − 0.75 = 0.25 P_{0}=1-\rho=1-0.75=0.25 P0=1ρ=10.75=0.25
    这就是急诊室空闲的概率,也是病人不必等待立即就能就诊的概率。而病人需要等待的概率则为:
    ρ = 1 − P 0 = 0.75 \rho=1-P_{0}=0.75 ρ=1P0=0.75
    这也是急诊室繁忙的概率。
















  2. 计算系统主要工作指标。
    急诊室内外的病人平均数:
    L s = λ μ − λ = 3 4 − 3 人 = 3 人 L_{s}=\frac{\lambda}{\mu-\lambda}=\frac{3}{4-3} 人=3人 Ls=μλλ=433=3
    急诊室外排队等待的病人平均数:
    L q = L s ρ = 3 × 0.75 人 a = 2.25 人 L_{q}=L_{s} \rho=3 \times 0.75 人a=2.25 人 Lq=Lsρ=3×0.75a=2.25
    病人在急诊室内外平均逗留时间:
    W s = 1 μ − λ = 1 4 − 3 h = 1 h = 60 min ⁡ W_{s}=\frac{1}{\mu-\lambda}=\frac{1}{4-3} \boldsymbol{h}=1 \boldsymbol{h}=60 \min Ws=μλ1=431h=1h=60min
    病人平均等候时间:
    W q = W s ρ = 1 × 0.75 h = 0.75 h = 45 m i n W_{q}=W_{s} \rho=1 \times 0.75 h=0.75 h=45 \mathrm{min} Wq=Wsρ=1×0.75h=0.75h=45min
















4.2. 例2(MMS)

4.3. 例3

某医院挂号室有三个窗口,就诊者的到达服从泊松分布,平均到达率为每分钟0.9人,挂号员服务时间服从指数分布,平均服务率每分钟0.4人,现假设就诊者到达后排成一队,依次向空闲的窗口挂号,显然系统的容量和顾客源是不限的,属于M/M/S型的排队服务模型。求:该系统的运行指标 P 0 ,   L q ,   L ,   W q ,   W ,   P ( N ≥ 3 ) P_{0}, \ L_{q}, \ L, \ W_{q}, \ W, \ P(N \geq 3) P0, Lq, L, Wq, W, P(N3)

S = 3 , ρ = λ μ = 0.9 0.4 = 2.25 , ρ ∗ = λ S μ = 2.25 3 = 3 4 < 1 S=3, \quad \rho=\frac{\lambda}{\mu}=\frac{0.9}{0.4}=2.25, \quad \rho^{*}=\frac{\lambda}{S \mu}=\frac{2.25}{3}=\frac{3}{4}<1 S=3,ρ=μλ=0.40.9=2.25,ρ=Sμλ=32.25=43<1




  1. 整个挂号间空闲的概率:
    P 0 = [ ( 2.25 ) 0 0 ! + ( 2.25 ) 1 1 ! + ( 2.25 ) 2 2 ! + ( 2.25 ) 3 3 ! 1 1 − 2.25 / 3 ] − 1 = 0.0748 P_{0}=\left[\frac{(2.25)^{0}}{0 !}+\frac{(2.25)^{1}}{1 !}+\frac{(2.25)^{2}}{2 !}+\frac{(2.25)^{3}}{3 !} \frac{1}{1-2.25 / 3}\right]^{-1}=0.0748 P0=[0!(2.25)0+1!(2.25)1+2!(2.25)2+3!(2.25)312.25/31]1=0.0748

  2. 等待挂号的平均人数或称队列长
    L q = ( 2.25 ) 3 ⋅ 3 / 4 3 ! × 0.0748 = 1.7 人 L_{q}=\frac{(2.25)^{3} \cdot 3 / 4}{3 !} \times 0.0748=1.7人 Lq=3!(2.25)33/4×0.0748=1.7

  3. 挂号间平均逗留人数或称队长
    L = L q + λ μ = 1.7 + 2.25 = 3.95 人 L=L_{q}+\frac{\lambda}{\mu}=1.7+2.25=3.95人 L=Lq+μλ=1.7+2.25=3.95

  4. 等候挂号的平均时间
    W q = 1.7 0.9 = 1.89 分 钟 W_{q}=\frac{1.7}{0.9}=1.89分钟 Wq=0.91.7=1.89

  5. 在挂号间平均逗留时间
    W = 1.89 + 1 0.4 = 4.39 分 钟 W=1.89+\frac{1}{0.4}=4.39分钟 W=1.89+0.41=4.39

  6. 就诊者到达后必须等待(即系统中就诊者不少于3人或各挂号员都没有空闲)的概率
    P ( N ≥ 3 ) = ( 2.25 ) 3 3 ! × 1 / 4 × 0.0748 = 0.57 P(N \geq 3)=\frac{(2.25)^{3}}{3! \times1 / 4} \times 0.0748=0.57 P(N3)=3!×1/4(2.25)3×0.0748=0.57

5. matlab实现

5.1. 无绘图版

  • 源码
    s=2; %服务台的个数 mu=4; %单位时间内能服务的顾客数 lambda=3; %单位时间内到达的顾客数 ro=lambda/mu; ros=ro/s; sum1=0; for i=0:(s-1) sum1=sum1+ro.^i/factorial(i); end sum2=ro.^s/factorial(s)/(1-ros); p0=1/(sum1+sum2); p=ro.^s.*p0/factorial(s)/(1-ros); Lq=p.*ros/(1-ros); L=Lq+ro; W=L/lambda; Wq=Lq/lambda; fprintf('排队等待的平均人数为%5.2f人\n',Lq) fprintf('系统内的平均人数为%5.2f人\n',L) fprintf('平均逗留时间为%5.2f分钟\n',W*60) fprintf('平均等待时间为%5.2f分种\n',Wq*60) 
  • 结果
    排队等待的平均人数为 0.12人
    系统内的平均人数为 0.87人
    平均逗留时间为17.45分钟
    平均等待时间为 2.45分种










5.2. 绘图版

5.2.1. 测试一

  • 源码
    clear clc %* %初始化顾客源 %* %总仿真时间 Total_time = 10; %队列最大长度 N=; %到达率与服务率 lambda=10, mu=6; %平均到达时间与平均服务时间 arr_mean = 1/lambda; ser_mean = 1/mu; arr_num = round(Total_time*lambda*2); events = []; %按负指数分布产生各顾客达到时间间隔 events(1,:) = exprnd(arr_mean,1,arr_num); %各顾客的到达时刻等于时间间隔的累积和 events(1,:) = cumsum(events(1,:)); %按负指数分布产生各顾客服务时间 events(2,:) = exprnd(ser_mean,1,arr_num); %计算仿真顾客个数,即到达时刻在仿真时间内的顾客数 len_sim = sum(events(1,:)<= Total_time); %* %计算第 1个顾客的信息 %* %1个顾客进入系统后直接接受服务,无需等待 events(3,1) = 0; %其离开时刻等于其到达时刻与服务时间之和 events(4,1) = events(1,1)+events(2,1); %其肯定被系统接纳,此时系统内共有 %1个顾客,故标志位置1 events(5,1) = 1; %其进入系统后,系统内已有成员序号为 1 member = [1]; for i = 2:arr_num %如果第 i个顾客的到达时间超过了仿真时间,则跳出循环 if events(1,i)>Total_time break; else number = sum(events(4,member) > events(1,i)); %如果系统已满,则系统拒绝第 i个顾客,其标志位置 0 if number >= N+1 events(5,i) = 0; %如果系统为空,则第 i个顾客直接接受服务 else if number == 0 %其等待时间为 0 %PROGRAMLANGUAGEPROGRAMLANGUAGE events(3,i) = 0; %其离开时刻等于到达时刻与服务时间之和 events(4,i) = events(1,i)+events(2,i); %其标志位置 1 events(5,i) = 1; member = [member,i]; %如果系统有顾客正在接受服务,且系统等待队列未满,则 第 i个顾客进入系统 else len_mem = length(member); %其等待时间等于队列中前一个顾客的离开时刻减去其到 达时刻 events(3,i)=events(4,member(len_mem))-events(1,i); %其离开时刻等于队列中前一个顾客的离开时刻加上其服 %务时间 events(4,i)=events(4,member(len_mem))+events(2,i); %标识位表示其进入系统后,系统内共有的顾客数 events(5,i) = number+1; member = [member,i]; end end end end %仿真结束时,进入系统的总顾客数 len_mem = length(member); %* %输出结果 %* %绘制在仿真时间内,进入系统的所有顾客的到达时刻和离 %开时刻曲线图(stairs:绘制二维阶梯图) stairs([0 events(1,member)],0:len_mem); hold on; stairs([0 events(4,member)],0:len_mem,'.-r'); legend('到达时间 ','离开时间 '); hold off; grid on; %绘制在仿真时间内,进入系统的所有顾客的停留时间和等 %待时间曲线图(plot:绘制二维线性图) figure; plot(1:len_mem,events(3,member),'r-*',1: len_mem,events(2,member)+events(3,member),'k-'); legend('等待时间 ','停留时间 '); grid on; 
  • 结果
    在这里插入图片描述
    在这里插入图片描述




5.2.2. 测试二

提高服务率mu=12

  • 源码
    clear clc %* %初始化顾客源 %* %总仿真时间 Total_time = 10; %队列最大长度 N=; %到达率与服务率 lambda=10, mu=12; %平均到达时间与平均服务时间 arr_mean = 1/lambda; ser_mean = 1/mu; arr_num = round(Total_time*lambda*2); events = []; %按负指数分布产生各顾客达到时间间隔 events(1,:) = exprnd(arr_mean,1,arr_num); %各顾客的到达时刻等于时间间隔的累积和 events(1,:) = cumsum(events(1,:)); %按负指数分布产生各顾客服务时间 events(2,:) = exprnd(ser_mean,1,arr_num); %计算仿真顾客个数,即到达时刻在仿真时间内的顾客数 len_sim = sum(events(1,:)<= Total_time); %* %计算第 1个顾客的信息 %* %1个顾客进入系统后直接接受服务,无需等待 events(3,1) = 0; %其离开时刻等于其到达时刻与服务时间之和 events(4,1) = events(1,1)+events(2,1); %其肯定被系统接纳,此时系统内共有 %1个顾客,故标志位置1 events(5,1) = 1; %其进入系统后,系统内已有成员序号为 1 member = [1]; for i = 2:arr_num %如果第 i个顾客的到达时间超过了仿真时间,则跳出循环 if events(1,i)>Total_time break; else number = sum(events(4,member) > events(1,i)); %如果系统已满,则系统拒绝第 i个顾客,其标志位置 0 if number >= N+1 events(5,i) = 0; %如果系统为空,则第 i个顾客直接接受服务 else if number == 0 %其等待时间为 0 %PROGRAMLANGUAGEPROGRAMLANGUAGE events(3,i) = 0; %其离开时刻等于到达时刻与服务时间之和 events(4,i) = events(1,i)+events(2,i); %其标志位置 1 events(5,i) = 1; member = [member,i]; %如果系统有顾客正在接受服务,且系统等待队列未满,则 第 i个顾客进入系统 else len_mem = length(member); %其等待时间等于队列中前一个顾客的离开时刻减去其到 达时刻 events(3,i)=events(4,member(len_mem))-events(1,i); %其离开时刻等于队列中前一个顾客的离开时刻加上其服 %务时间 events(4,i)=events(4,member(len_mem))+events(2,i); %标识位表示其进入系统后,系统内共有的顾客数 events(5,i) = number+1; member = [member,i]; end end end end %仿真结束时,进入系统的总顾客数 len_mem = length(member); %* %输出结果 %* %绘制在仿真时间内,进入系统的所有顾客的到达时刻和离 %开时刻曲线图(stairs:绘制二维阶梯图) stairs([0 events(1,member)],0:len_mem); hold on; stairs([0 events(4,member)],0:len_mem,'.-r'); legend('到达时间 ','离开时间 '); hold off; grid on; %绘制在仿真时间内,进入系统的所有顾客的停留时间和等 %待时间曲线图(plot:绘制二维线性图) figure; plot(1:len_mem,events(3,member),'r-*',1: len_mem,events(2,member)+events(3,member),'k-'); legend('等待时间 ','停留时间 '); grid on; 
  • 结果
    在这里插入图片描述
    在这里插入图片描述




5.2.3. 测试三

增加服务台至两个,这样人数流至原来单服务台的人数减半,lambda=5

  • 源码
    clear clc %* %初始化顾客源 %* %总仿真时间 Total_time = 10; %队列最大长度 N=; %到达率与服务率 lambda=5, mu=6; %平均到达时间与平均服务时间 arr_mean = 1/lambda; ser_mean = 1/mu; arr_num = round(Total_time*lambda*2); events = []; %按负指数分布产生各顾客达到时间间隔 events(1,:) = exprnd(arr_mean,1,arr_num); %各顾客的到达时刻等于时间间隔的累积和 events(1,:) = cumsum(events(1,:)); %按负指数分布产生各顾客服务时间 events(2,:) = exprnd(ser_mean,1,arr_num); %计算仿真顾客个数,即到达时刻在仿真时间内的顾客数 len_sim = sum(events(1,:)<= Total_time); %* %计算第 1个顾客的信息 %* %1个顾客进入系统后直接接受服务,无需等待 events(3,1) = 0; %其离开时刻等于其到达时刻与服务时间之和 events(4,1) = events(1,1)+events(2,1); %其肯定被系统接纳,此时系统内共有 %1个顾客,故标志位置1 events(5,1) = 1; %其进入系统后,系统内已有成员序号为 1 member = [1]; for i = 2:arr_num %如果第 i个顾客的到达时间超过了仿真时间,则跳出循环 if events(1,i)>Total_time break; else number = sum(events(4,member) > events(1,i)); %如果系统已满,则系统拒绝第 i个顾客,其标志位置 0 if number >= N+1 events(5,i) = 0; %如果系统为空,则第 i个顾客直接接受服务 else if number == 0 %其等待时间为 0 %PROGRAMLANGUAGEPROGRAMLANGUAGE events(3,i) = 0; %其离开时刻等于到达时刻与服务时间之和 events(4,i) = events(1,i)+events(2,i); %其标志位置 1 events(5,i) = 1; member = [member,i]; %如果系统有顾客正在接受服务,且系统等待队列未满,则 第 i个顾客进入系统 else len_mem = length(member); %其等待时间等于队列中前一个顾客的离开时刻减去其到 达时刻 events(3,i)=events(4,member(len_mem))-events(1,i); %其离开时刻等于队列中前一个顾客的离开时刻加上其服 %务时间 events(4,i)=events(4,member(len_mem))+events(2,i); %标识位表示其进入系统后,系统内共有的顾客数 events(5,i) = number+1; member = [member,i]; end end end end %仿真结束时,进入系统的总顾客数 len_mem = length(member); %* %输出结果 %* %绘制在仿真时间内,进入系统的所有顾客的到达时刻和离 %开时刻曲线图(stairs:绘制二维阶梯图) stairs([0 events(1,member)],0:len_mem); hold on; stairs([0 events(4,member)],0:len_mem,'.-r'); legend('到达时间 ','离开时间 '); hold off; grid on; %绘制在仿真时间内,进入系统的所有顾客的停留时间和等 %待时间曲线图(plot:绘制二维线性图) figure; plot(1:len_mem,events(3,member),'r-*',1: len_mem,events(2,member)+events(3,member),'k-'); legend('等待时间 ','停留时间 '); grid on; 
  • 结果
    在这里插入图片描述
    在这里插入图片描述




版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/199322.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午1:22
下一篇 2026年3月26日 下午1:22


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号