生活随笔
收集整理的這篇文章主要介紹了
排队论及其代码
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
排隊論(Queuing Theory)也稱隨機服務系統理論。
本文主要討論先到先服務 FCFS的情形,顧客流設定為泊松流(一種非負隨機變量的分布)
泊松流
在不相互重疊的時間區間內,到達顧客數相互獨立(無后效性)。對于充分小的時間間隔內,到達1個顧客的概率與t無關,僅與時間間隔成正比(平穩性)。對于充分小的時間間隔,2個及以上顧客到達的概率可忽略不計(普通性)。
泊松流到達間隔服從負指數分布。
系統運行指標
為了研究排隊系統運行的效率,估計其服務質量,確定系統的優參數,評價系統 的結構是否合理并研究其改進的措施,必須確定用以判斷系統運行優劣的基本數量指標,這些數量指標通常是:
平均隊長:指系統內顧客數(包括正被服務的顧客與排隊等待服務的顧客)的數學期望,記作LsL_sLs? 。平均排隊長:指系統內等待服務的顧客數的數學期望,記作 LqL_qLq? 。平均逗留時間:顧客在系統內逗留時間(包括排隊等待的時間和接受服務的時間)的數學期望,記作WsW_sWs? 。平均等待時間:指一個顧客在排隊系統中排隊等待時間的數學期望,記作WqW_qWq? 。平均忙期:指服務機構連續繁忙時間(顧客到達空閑服務機構起,到服務機構再次空閑止的時間)長度的數學期望,記為 TbT_bTb?。
單服務臺系統
模型的條件是:
輸入過程――顧客源是無限的,顧客到達完全是隨機的,單個到來,到達過程服從泊松分布,且是平穩的。排隊規則――單隊,且隊長沒有限制,先到先服務;服務機構――單服務臺,服務時間的長短是隨機的,服從相同的指數分布。
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
%其等待時間為 0events(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;
多服務臺系統
此模型與M/M/1模型不同之處在于有S個服務臺,各服務臺的工作相互獨立,服務率相等,如果顧客到達時,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);
endsum2=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)
總結
以上是生活随笔為你收集整理的排队论及其代码的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。