【数学建模】排队论(最优化)
生活随笔
收集整理的這篇文章主要介紹了
【数学建模】排队论(最优化)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 一、算法介紹
- 1.算法介紹
- 2.模型介紹
- 二、適用問題
- 三、算法總結
- 1.M/M/1排隊系統
- 2.M/M/S排隊系統
- 四、應用場景舉例
- 1.M/M/1排隊系統
- 2.M/M/S排隊系統1
- 2.M/M/S排隊系統2
- 五、MATLAB代碼
- 1.M/M/1
- 2.M/M/S
- 六、實際案例
- 七、論文案例片段(待完善)
排隊論主要針對數學建模問題中的一些小的子問題進行求解,如果想直接使用請跳轉至——四、五
視頻回顧
一、算法介紹
1.算法介紹
?排隊論發源于上世紀初。當時美國貝爾電話公司發明了自動電話,以適應日益繁忙的工商業電話通訊需要。這個新發明帶來了一個新問題,即通話線路與電話用戶呼叫的數量關系應如何妥善解決,這個問題久久未能解決。
?1909年,丹麥的哥本哈根電話公司A. K.埃爾浪(Er lang)在熱力學統計平衡概念的啟發下解決了這個問題。
?(1)由于顧客到達和服務時間的隨機性,現實中的排隊現象幾乎不可避免;
?(2)排隊過程,通常是一個隨機過程,排隊論又稱“隨機服務系統理論”
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/∞,。。。
- 評價參數???
?1、隊長與排隊長
?(1)隊長: 系統中的顧客數(n)期望值記為Ls ;
?(2)排隊長: 系統中排隊等待服務的顧客數;期望值記為Lq
?2、逗留時間與等待時間
?(1)逗留時間:指一個顧客在系統中的全部停留時間;期望值,記為Ws
?(2)等待時間:指一個顧客在系統中的排隊等待時間;期望值,記為Wq
Ws = Wq + E[服務時間]
3、其他相關指標
?(1)忙期: 指從顧客到達空閑服務機構起到服務
機構再次空閑的時間長度;
?(2)忙期服務量:指一個忙期內系統平均完成
服務的顧客數;
?(3)損失率: 指顧客到達排隊系統,未接受服務
而離去的概率;
??(4)服務強度:ρ= λ/sμ;
二、適用問題
- 排隊問題
- 例如:
三、算法總結
1.M/M/1排隊系統
2.M/M/S排隊系統
四、應用場景舉例
1.M/M/1排隊系統
2.M/M/S排隊系統1
2.M/M/S排隊系統2
五、MATLAB代碼
1.M/M/1
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 %其等待時間為 02009.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;2.M/M/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)六、實際案例
七、論文案例片段(待完善)
總結
以上是生活随笔為你收集整理的【数学建模】排队论(最优化)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CSS实用技巧第一讲:文字处理
- 下一篇: mencoder使用