用蒙特卡洛法实现对排队等待问题的计算机模拟
在日常生活中,我們每天都會遇到各種各樣的排隊(duì)。比如:銀行中取款要排隊(duì),火車站買票要排隊(duì),超市、商場中購物付款要排隊(duì),預(yù)訂旅館或機(jī)票時(shí)也要排隊(duì),人們仿佛置身于一個(gè)排隊(duì)的社會。
所謂排隊(duì),就是等候消費(fèi)服務(wù)的顧客在進(jìn)入點(diǎn)前排隊(duì)(意大利G·佩里切利)。排隊(duì)的類型一般來說有以下幾種:
一個(gè)服務(wù)點(diǎn)。即只有一個(gè)點(diǎn)可供顧客選擇等候服務(wù),顧客只能按順序一個(gè)接一個(gè)等侯,這樣排隊(duì),顧客多的時(shí)候最混亂。現(xiàn)在這種排隊(duì)類型已不多見。
多個(gè)服務(wù)點(diǎn)。即有兩個(gè)或兩個(gè)以上的點(diǎn)可供顧客選擇,每一點(diǎn)都可排成一條隊(duì)。多個(gè)服務(wù)點(diǎn)可減輕一個(gè)服務(wù)點(diǎn)的負(fù)擔(dān),增加顧客選擇服務(wù)點(diǎn)的靈活性,同時(shí)顧客還可選擇自己喜歡的服務(wù)員。
專門服務(wù)點(diǎn)。即專門為某些特殊的顧客開辟的服務(wù)點(diǎn)。專門的服務(wù)點(diǎn)可以保證某些特殊顧客的特殊權(quán)益,如:減少顧客等待服務(wù)時(shí)間,同時(shí)使一些顧客分離出來,減輕其服務(wù)口的壓力。
我們拿一個(gè)理發(fā)店的實(shí)際例子來分析:
某理發(fā)館每天早晨開業(yè)后,顧客的到來總是陸續(xù)不斷的,他們到來的間隔時(shí)間,給統(tǒng)計(jì)如下:
| 到達(dá)時(shí)間間隔(分鐘) | 頻率 |
| 4 | 0.07 |
| 5 | 0.10 |
| 6 | 0.52 |
| 7 | 0.20 |
| 8 | 0.11 |
顧客到來后,由管理人員引導(dǎo)至A、B、C三個(gè)服務(wù)椅(理發(fā)員固定在服務(wù)椅上),各服務(wù)椅的服務(wù)內(nèi)容相同,但服務(wù)時(shí)間有多有少,根據(jù)以往統(tǒng)計(jì)資料,他們的服務(wù)時(shí)間分布如下:
| A | B | C | |||
| 時(shí)間(分) | 頻率 | 時(shí)間(分) | 頻率 | 時(shí)間(分) | 頻率 |
| 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 | |||
當(dāng)有一個(gè)以上服務(wù)椅空閑時(shí),管理人員按字母排列次序引導(dǎo)顧客至服務(wù)椅去進(jìn)行服務(wù)。顧客中有10%屬“特殊顧客”理發(fā)很費(fèi)時(shí)間,每人需多4分鐘。現(xiàn)模擬10位顧客的到來和服務(wù)情況,并分析三個(gè)服務(wù)椅的忙閑情況。
| 顧客到達(dá)時(shí)間間隔 | 頻率 | 累計(jì)頻率 | 對應(yīng)的 隨機(jī)數(shù) | A服務(wù)時(shí)間 | 頻率 | 累計(jì)頻率 | 對應(yīng)的隨機(jī)數(shù) |
| 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服務(wù)時(shí)間 | 頻率 | 累計(jì)頻率 | 對應(yīng)的 隨機(jī)數(shù) | C服務(wù)時(shí)間 | 頻率 | 累計(jì)頻率 | 對應(yīng)的 隨機(jī)數(shù) |
| 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 |
我們采用二位隨機(jī)數(shù)來模擬顧客到來間隔和服務(wù)情況,并選定碰到個(gè)位數(shù)是5,就作為“特殊顧”(占10%)現(xiàn)從隨機(jī)數(shù)中抽取隨機(jī)數(shù)如下:
| 顧客 | 顧客到來時(shí)間間隔 | 服務(wù)隨機(jī)數(shù) | |
| 隨機(jī)數(shù) | 時(shí)間間隔(分) | ||
| 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 |
設(shè)第一個(gè)顧客到達(dá)的時(shí)間是在3點(diǎn)正,隨機(jī)數(shù)是14,此數(shù)本不需要,主要是看一下是不是“特殊顧客”,現(xiàn)此數(shù)尾數(shù)不是5說明第一位不是“特殊顧客”。第一個(gè)顧客到達(dá),按字母的順序應(yīng)到A服務(wù)椅,隨機(jī)數(shù)00,表示要服務(wù)8分鐘,第二個(gè)顧客到達(dá)與第一個(gè)顧客的間隔時(shí)間,按隨機(jī)數(shù)46應(yīng)為6分鐘,即在8.06時(shí),服務(wù)椅A正在使用,因此到服務(wù)椅B,服務(wù)隨機(jī)數(shù)99,應(yīng)服務(wù)13分鐘,如此編成表如下:
| 顧客 | 到達(dá)時(shí)間 | 服務(wù)椅 | 等待時(shí)間 | 服務(wù) 時(shí)間 | A | B | C | |||
| 到達(dá) | 離開 | 到達(dá) | 離開 | 到達(dá) | 離開 | |||||
| 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 | |||||
| 共計(jì) | 109 | |||||||||
*為“特殊顧客”服務(wù)時(shí)間8(分)+4(分)=12(分)
10個(gè)顧客在系統(tǒng)內(nèi)的總時(shí)間為63分。
分析:
1.10個(gè)顧客在系統(tǒng)(理發(fā)館內(nèi))的總時(shí)間為69分,平均每人69/10=6.9分
2.10個(gè)顧客總的服務(wù)時(shí)間為109分。平均每人服務(wù)109/10=10.9分
3.統(tǒng)內(nèi)無等待時(shí)間,即沒出現(xiàn)顧客排隊(duì)等待問題.
4.椅的服務(wù)情況如下:
| A | B | C | |
| 服務(wù)顧客數(shù) 總的服務(wù)時(shí)間(分) 為每個(gè)顧客的平均服務(wù)時(shí)間 空閑時(shí)間 空閑占總的時(shí)間% | 5 50 10 19 27.3% | 4 46 11.5 23 33.3% | 1 13 13 56 81.2% |
在此基礎(chǔ)上,可用計(jì)算機(jī)編寫程序,在計(jì)算機(jī)上實(shí)現(xiàn)仿真模擬,用以模擬更多時(shí)間和更多顧客時(shí)的情況。以下用Matlab編寫的模擬程序的算法部分:
function [num,pass]=computing(tim0)seat=[0 0 0];%服務(wù)員屬性 pass=rand(1,4);%顧客信息:序號、到達(dá)時(shí)間、特殊要求時(shí)間、正常理發(fā)時(shí)間 pass(5)=0;%理發(fā)員 pass(6)=0;%離開時(shí)間 pass(7)=0;%等待時(shí)間 num=1;%服務(wù)人數(shù)初始化 tim=0;%時(shí)間計(jì)數(shù)器 temp=0;%while tim<=tim0 pass(num,1)=num; %裝入序號pass(num,2)=rand;pass(num,3)=rand;pass(num,4)=rand;%計(jì)算顧客到達(dá)時(shí)間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; %裝入顧客到達(dá)時(shí)間pass(num,2)=tim;if pass(num,3)<=0.1 pass(num,3)=4; %裝入需要特殊服務(wù)的時(shí)間else pass(num,3)=0;endnum=num+1; end num=num-1;for i=1:num%計(jì)算顧客的理發(fā)席位if seat(1)<=pass(i,2)+pass(i,7)pass(i,5)=1; %由1號服務(wù)員理發(fā)temp1=timinge1(1,pass(i,4));seat(1)=pass(i,2)+pass(i,3)+temp1;pass(i,4)=temp1; %裝入正常理發(fā)所需時(shí)間else if seat(2)<=pass(i,2)+pass(i,7)pass(i,5)=2; %由2號服務(wù)員理發(fā)temp1=timinge1(2,pass(i,4));seat(2)=pass(i,2)+pass(i,3)+temp1;pass(i,4)=temp1; %裝入正常理發(fā)所需時(shí)間else if seat(3)<=pass(i,2)+pass(i,7)pass(i,5)=3; %由2號服務(wù)員理發(fā)temp1=timinge1(3,pass(i,4));seat(3)=pass(i,2)+pass(i,3)+temp1;pass(i,4)=temp1; else %計(jì)算等待時(shí)間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更多數(shù)學(xué)建模模型與算法可以關(guān)注數(shù)模樂園公主號的更新,具體數(shù)學(xué)建模基礎(chǔ)課程可以在數(shù)模樂園微小店觀看。
總結(jié)
以上是生活随笔為你收集整理的用蒙特卡洛法实现对排队等待问题的计算机模拟的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 千里马 android framewor
- 下一篇: 灰度图的理解