[數學建模]數學建模算法和模型(B站視頻)(七)

[數學建模]數學建模算法和模型(B站視頻)(七)

排隊論

模型背景

排隊論發源於上世紀初。當時美國貝爾電話公司發明了自動電話,以適應日益繁忙的工商業電話通訊需要。這個新發明帶來了一個新問題,即通話線路與電話用戶呼叫的數量關係應如何妥善解決,這個問題久久未能解決。
1909年,丹麥的哥本哈根電話公司A.K.埃爾浪(Erlang)在熱力學統計平衡概念的啓發下解決了這個問題。

排隊現象

到達顧客 服務內容 服務機構
病人 診斷/手術 醫生/手術檯
進港的貨船 裝貨/卸貨 碼頭泊位
到港的飛機 降落 機場跑道
電話撥號 通話 交換臺
故障機器 修理 修理技工
修理技工 領取修配 零件倉庫管理員
上游河水 入庫 水閘管理員

模型介紹

(1)由於顧客到達和服務時間的隨機性,
現實中的排隊現象幾乎不可避免;
(2)排隊過程,通常是一個隨機過程,
排隊論又稱“隨機服務系統理論”;

排隊服務過程

在這裏插入圖片描述

排隊系統的要素

(1)顧客輸入過程;
(2)排隊結構與排隊規則;
(3)服務機構與服務規則;

顧客輸入過程

顧客源(總體):有限/無限;
顧客到達方式:逐個/逐批;(僅研究逐個情形)
顧客到達間隔:隨機型/確定型;
顧客前後到達是否獨立:相互獨立/相互關聯;
輸入過程是否平穩:平穩/非平穩;(僅研究平穩性)
在這裏插入圖片描述

排隊結構與排隊規則

顧客排隊方式:等待制/即時制(損失制);
排隊系統容量:有限制/無限制;
排隊隊列數目: 單列/多列;
是否中途退出: 允許/禁止;
是否列間轉移: 允許/禁止;
(僅研究禁止退出和轉移的情形)

服務機構與服務規則

服務檯(員)數目;單個/多個;
服務檯(員)排列形式;並列/串列/混合;
服務檯(員)服務方式;逐個/逐批;(研究逐個情形)
服務時間分佈;隨機型/確定型;
服務時間分佈是否平穩:平穩/非平穩;(研究平穩情形)
在這裏插入圖片描述

服務檯(員)爲顧客服務的順序:
a)先到先服務(FCFS);
b)後到先服務(LCFS);
c)隨機服務;
d)優先服務;

到達間隔和服務時間典型分佈
(1)泊松分佈M ;
(2)負指數分佈M ;
(3)k階愛爾朗分佈Ek;
(4)確定型分佈D;
(5)一般服務時間分佈G;

排隊模型示例
——M/M/1,M/D/1,M/ Ek /1;
——M/M/c,M/M/c/∞/m,
——M/M/c/N/∞,。。。

(一)系統運行狀態參數

系統狀態N(t)
——指排隊系統在時刻t時的全部顧客數N(t),包括“排隊顧客數”和“正被服務顧客數”;
系統狀態概率:

(1)瞬態概率Pn(t)
——表示時刻t系統狀態N(t)=n 的概率;

(2) 穩態概率Pn
——Pn=Pn(t);
——一般排隊系統運行了一定長的時
間後,系統狀態的概率分佈不再隨時間
t變化,即初始時刻(t=0)系統狀態的
概率分佈(Pn(0),n>>0)的影響將消失。

(二)系統運行指標參數

——評價排隊系統的優劣。

1、隊長與排隊長

(1)隊長: 系統中的顧客數(n)期望值記爲Ls ;

(2)排隊長: 系統中排隊等待服務的顧客數;
期望值記爲Lq

2、逗留時間與等待時間

(1)逗留時間:
——指一個顧客在系統中的全部停留時間;
期望值,記爲Ws

(2)等待時間:
——指一個顧客在系統中的排隊等待時間;
期望值,記爲Wq
Ws = Wq + E[服務時間]

3、其他相關指標

(1)忙期: 指從顧客到達空閒服務機構起到服務
機構再次空閒的時間長度;

(2)忙期服務量:指一個忙期內系統平均完成
服務的顧客數;

(3)損失率: 指顧客到達排隊系統,未接受服務
而離去的概率;

(4)服務強度:ρ= λ/sμ;

顧客到達時間間隔分佈

——————————————泊松流與泊松分佈

滿足條件

如果顧客到達滿足如下條件,則稱爲泊松流:
(1) 在不相互重疊的時間區間內,到達顧客數
相互獨立(無後效性).
(2) 對於充分小的時間間隔內,到達
1個顧客的概率與t無關,僅與時間間隔
成正比(平穩性):
(3) 對於充分小的時間間隔,2個及以
上顧客到達的概率可忽略不計(普通性)。

分佈方式

1.泊松流到達間隔服從負指數分佈
若顧客到達間隔T的概率密度爲
在這裏插入圖片描述
則稱T服從負指數分佈,分佈函數如下:
在這裏插入圖片描述
若顧客流是泊松流時,顧客到達的時間間隔
服從上述負指數分佈
E[T]=1/λ; Var[T]=1/λ2; σ[T]=1/λ

2.顧客服務時間分佈服從負指數分佈

(1) 對一個顧客的服務時間Ts,等價於相鄰兩個顧客離開排隊系統的時間間隔。若Ts服從負指數分佈,其概率密度和分佈函數分別爲
在這裏插入圖片描述
則E[Ts]=1/μ; Var[Ts]=1/ μ2; σ[Ts]=1/ μ
(2) E[Ts]=1/μ:每個顧客的平均(期望)服務時間;
μ:單位時間服務的顧客數,平均(期望)服務率;

3.單服務檯負指數分佈M/M/1排隊系統

模型的條件是:

1、輸入過程――顧客源是無限的,顧客到達完全是隨機的,單個到來,到達過程服從泊松分佈且是平穩的

2、排隊規則――單隊,且隊長沒有限制,先到先服務

3、服務機構――單服務檯,服務時間的長短是隨機的,服從相同的指數分佈

對於M/M/1模型有如下公式:

在這裏插入圖片描述

例題:
某醫院急診室同時只能診治一個病人,診治時間服從指數分佈,每個病人平均需要15分鐘。病人按泊松分佈到達,平均每小時到達3人。試對此排隊隊系統進行分析。

解:
對此排隊隊系統分析如下:
(1)先確定參數值:這是單服務檯系統,有:
故服務強度爲:
在這裏插入圖片描述
故服務強度爲:
在這裏插入圖片描述
計算穩態概率:
在這裏插入圖片描述
這就是急診室空閒的概率,也是病人不必等待立即就能就診的概率。而病人需要等待的概率則爲:
ρ =1− P0 = 0.75
這也是急診室繁忙的概率。
(2)計算系統主要工作指標。
急診室內外的病人平均數:
在這裏插入圖片描述
急診室外排隊等待的病人平均數:
在這裏插入圖片描述
病人在急診室內外平均逗留時間:
在這裏插入圖片描述
病人平均等候時間:

4.M/M/S模型
此模型與M/M/1模型不同之處在於有S個服務檯,各服務檯的工作相互獨立,服務率相等,如果顧客到達時,S個服務檯都忙着,則排成一隊等待,先到先服務的單隊模型。

整個系統的平均服務率爲sμ,ρ=λ/sμ,(ρ<1)爲該系統的服務強度。

狀態概率
在這裏插入圖片描述

主要運行指標
在這裏插入圖片描述

系統狀態N ≥S的概率
在這裏插入圖片描述

例題:
承接例1,假設醫院增強急診室的服務能力,使其同時能診治兩個病人,且平均服務率相同,試分析該系統工作情況。

解:
這相當於增加了一個服務檯,故有:
S=2,λ=3人/h,μ=4人/h
在這裏插入圖片描述
在這裏插入圖片描述
病人必須等候的概率,即系統狀態N≥2的概率:
在這裏插入圖片描述

代碼:(只需輸入μ和λ和s)


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.9人,掛號員服務時間服從指數分佈,平均服務率每分鐘0.4人,現假設就診者到達後排成一隊,依次向空閒的窗口掛號,顯然系統的容量和顧客源是不限的,屬於M/M/S型的排隊服務模型。求:該系統的運行指標 :
在這裏插入圖片描述

解:
在這裏插入圖片描述

將前三行代碼修改爲:

s=3;
mu=24;
lambda=54;

輸出結果:

排隊等待的平均人數爲 1.70人
系統內的平均人數爲 3.95人
平均逗留時間爲 4.39分鐘
平均等待時間爲 1.89分種

可得:
(1)整個掛號間空閒的概率

在這裏插入圖片描述
在這裏插入圖片描述

附件:MM1代碼:

clear 
clc 
%***************************************** 
%初始化顧客源 
%***************************************** 
%總仿真時間 
Total_time = 10; 
%隊列最大長度 
N = 10000000000; 
%到達率與服務率 
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

2009.1516

%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;

在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章