用蒙特卡洛法实现对排队等待问题的计算机模拟
在日常生活中,我們每天都會遇到各種各樣的排隊。比如:銀行中取款要排隊,火車站買票要排隊,超市、商場中購物付款要排隊,預訂旅館或機票時也要排隊,人們仿佛置身于一個排隊的社會。
所謂排隊,就是等候消費服務的顧客在進入點前排隊(意大利G·佩里切利)。排隊的類型一般來說有以下幾種:
一個服務點。即只有一個點可供顧客選擇等候服務,顧客只能按順序一個接一個等侯,這樣排隊,顧客多的時候最混亂。現在這種排隊類型已不多見。
多個服務點。即有兩個或兩個以上的點可供顧客選擇,每一點都可排成一條隊。多個服務點可減輕一個服務點的負擔,增加顧客選擇服務點的靈活性,同時顧客還可選擇自己喜歡的服務員。
專門服務點。即專門為某些特殊的顧客開辟的服務點。專門的服務點可以保證某些特殊顧客的特殊權益,如:減少顧客等待服務時間,同時使一些顧客分離出來,減輕其服務口的壓力。
我們拿一個理發店的實際例子來分析:
某理發館每天早晨開業后,顧客的到來總是陸續不斷的,他們到來的間隔時間,給統計如下:
| 到達時間間隔(分鐘) | 頻率 |
| 4 | 0.07 |
| 5 | 0.10 |
| 6 | 0.52 |
| 7 | 0.20 |
| 8 | 0.11 |
顧客到來后,由管理人員引導至A、B、C三個服務椅(理發員固定在服務椅上),各服務椅的服務內容相同,但服務時間有多有少,根據以往統計資料,他們的服務時間分布如下:
| A | B | C | |||
| 時間(分) | 頻率 | 時間(分) | 頻率 | 時間(分) | 頻率 |
| 8 9 10 11 | 0.18 0.22 0.33 0.27 | 10 11 12 13 | 0.18 0.19 0.35 0.28 | 12 13 14 15 | 0.15 0.22 0.36 0.27 |
| 1.00 | 1.00 | 1.00 | |||
當有一個以上服務椅空閑時,管理人員按字母排列次序引導顧客至服務椅去進行服務。顧客中有10%屬“特殊顧客”理發很費時間,每人需多4分鐘。現模擬10位顧客的到來和服務情況,并分析三個服務椅的忙閑情況。
| 顧客到達時間間隔 | 頻率 | 累計頻率 | 對應的 隨機數 | A服務時間 | 頻率 | 累計頻率 | 對應的隨機數 |
| 4 | 0.07 | 0.07 | 0.00~0.06 | 8 | 0.18 | 0.18 | 0.00~0.17 |
| 5 | 0.10 | 0.17 | 0.07~0.16 | 9 | 0.22 | 0.40 | 0.18~0.39 |
| 6 | 0.52 | 0.69 | 0.17~0.68 | 10 | 0.33 | 0.73 | 0.40~0.72 |
| 7 | 0.20 | 0.89 | 0.69~0.88 | 11 | 0.27 | 1.00 | 1.00 |
| 8 | 0.11 | 1.00 | 0.89~1.00 |
| B服務時間 | 頻率 | 累計頻率 | 對應的 隨機數 | C服務時間 | 頻率 | 累計頻率 | 對應的 隨機數 |
| 10 | 0.18 | 0.18 | 0.00~0.17 | 12 | 0.15 | 0.15 | 0.00~0.14 |
| 11 | 0.19 | 0.37 | 0.18~0.36 | 13 | 0.22 | 0.37 | 0.15~0.36 |
| 12 | 0.35 | 0.72 | 0.37~0.71 | 14 | 0.36 | 0.73 | 0.37~0.72 |
| 13 | 0.28 | 1.00 | 0.72~1.00 | 15 | 0.37 | 1.00 | 0.72~1.00 |
我們采用二位隨機數來模擬顧客到來間隔和服務情況,并選定碰到個位數是5,就作為“特殊顧”(占10%)現從隨機數中抽取隨機數如下:
| 顧客 | 顧客到來時間間隔 | 服務隨機數 | |
| 隨機數 | 時間間隔(分) | ||
| 1 2 3 4 5 6 7 8 9 10 | (14) 46 11 66 60 90 33 65 72 92 | 6 5 6 6 8 6 6 7 8 | 00 99 20 19 32 40 20 01(特殊顧客) 68 87 |
設第一個顧客到達的時間是在3點正,隨機數是14,此數本不需要,主要是看一下是不是“特殊顧客”,現此數尾數不是5說明第一位不是“特殊顧客”。第一個顧客到達,按字母的順序應到A服務椅,隨機數00,表示要服務8分鐘,第二個顧客到達與第一個顧客的間隔時間,按隨機數46應為6分鐘,即在8.06時,服務椅A正在使用,因此到服務椅B,服務隨機數99,應服務13分鐘,如此編成表如下:
| 顧客 | 到達時間 | 服務椅 | 等待時間 | 服務 時間 | A | B | C | |||
| 到達 | 離開 | 到達 | 離開 | 到達 | 離開 | |||||
| 1 | 8:00 | A | 8 | 8:00 | 8:08 | |||||
| 2 | 8:06 | B | 13 | 8:06 | 8:19 | |||||
| 3 | 8:11 | C | 13 | 8:11 | 8:24 | |||||
| 4 | 8:17 | A | 9 | 8:17 | 8:26 | |||||
| 5 | 8:23 | B | 11 | 8:23 | 8:34 | |||||
| 6 | 8:31 | A | 10 | 8:31 | 8:41 | |||||
| 7 | 8:37 | B | 10 | 8:37 | 8:47 | |||||
| 8 | 8:43 | A | 12 | 8:43 | 8:55 | |||||
| 9 | 8:50 | B | 12 | 8:50 | 9:02 | |||||
| 10 | 8:58 | A | 11 | 8:58 | 9:09 | |||||
| 共計 | 109 | |||||||||
*為“特殊顧客”服務時間8(分)+4(分)=12(分)
10個顧客在系統內的總時間為63分。
分析:
1.10個顧客在系統(理發館內)的總時間為69分,平均每人69/10=6.9分
2.10個顧客總的服務時間為109分。平均每人服務109/10=10.9分
3.統內無等待時間,即沒出現顧客排隊等待問題.
4.椅的服務情況如下:
| A | B | C | |
| 服務顧客數 總的服務時間(分) 為每個顧客的平均服務時間 空閑時間 空閑占總的時間% | 5 50 10 19 27.3% | 4 46 11.5 23 33.3% | 1 13 13 56 81.2% |
在此基礎上,可用計算機編寫程序,在計算機上實現仿真模擬,用以模擬更多時間和更多顧客時的情況。以下用Matlab編寫的模擬程序的算法部分:
function [num,pass]=computing(tim0)seat=[0 0 0];%服務員屬性 pass=rand(1,4);%顧客信息:序號、到達時間、特殊要求時間、正常理發時間 pass(5)=0;%理發員 pass(6)=0;%離開時間 pass(7)=0;%等待時間 num=1;%服務人數初始化 tim=0;%時間計數器 temp=0;%while tim<=tim0 pass(num,1)=num; %裝入序號pass(num,2)=rand;pass(num,3)=rand;pass(num,4)=rand;%計算顧客到達時間if pass(num,2)<=0.07temp=4;else if pass(num,2)<=0.17temp=5;else if pass(num,2)<=0.69temp=6;else if pass(num,2)<=0.89temp=7;else temp=8;endendendendtim=tim+temp; %裝入顧客到達時間pass(num,2)=tim;if pass(num,3)<=0.1 pass(num,3)=4; %裝入需要特殊服務的時間else pass(num,3)=0;endnum=num+1; end num=num-1;for i=1:num%計算顧客的理發席位if seat(1)<=pass(i,2)+pass(i,7)pass(i,5)=1; %由1號服務員理發temp1=timinge1(1,pass(i,4));seat(1)=pass(i,2)+pass(i,3)+temp1;pass(i,4)=temp1; %裝入正常理發所需時間else if seat(2)<=pass(i,2)+pass(i,7)pass(i,5)=2; %由2號服務員理發temp1=timinge1(2,pass(i,4));seat(2)=pass(i,2)+pass(i,3)+temp1;pass(i,4)=temp1; %裝入正常理發所需時間else if seat(3)<=pass(i,2)+pass(i,7)pass(i,5)=3; %由2號服務員理發temp1=timinge1(3,pass(i,4));seat(3)=pass(i,2)+pass(i,3)+temp1;pass(i,4)=temp1; else %計算等待時間x=seat(1);y=1; if x>seat(2)x=seat(2);y=2;endif x>seat(3)x=seat(3);y=3;endpass(i,5)=y;temp1=timinge1(y,pass(i,4));pass(i,7)=seat(y)-pass(i,2);seat(y)=seat(y)+temp1+pass(i,3);pass(i,4)=temp1;endendend pass(i,6)=pass(i,2)+pass(i,3)+pass(i,4); endfunction xxxx=timinge1(vect1,vect)switch vect1case 1 if vect<=0.18xxxx=8;else if vect<=0.4xxxx=9;else if vect<=0.77xxxx=10;else xxxx=11;endendendcase 2 if vect<=0.18xxxx=10;else if vect<=0.37xxxx=11;else if vect<=0.72xxxx=12;else xxxx=13;endendendotherwise if vect<=0.15xxxx=12;else if vect<=0.37xxxx=13;else if vect<=0.74xxxx=14;else xxxx=15;endendend end更多數學建模模型與算法可以關注數模樂園公主號的更新,具體數學建模基礎課程可以在數模樂園微小店觀看。
總結
以上是生活随笔為你收集整理的用蒙特卡洛法实现对排队等待问题的计算机模拟的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 千里马 android framewor
- 下一篇: 灰度图的理解