系統(tǒng)模擬實驗的三個案例_第1頁
系統(tǒng)模擬實驗的三個案例_第2頁
系統(tǒng)模擬實驗的三個案例_第3頁
系統(tǒng)模擬實驗的三個案例_第4頁
系統(tǒng)模擬實驗的三個案例_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、系統(tǒng)模擬實驗的三個案例實驗案例   趕上火車的概率    1實驗案例 1.1    趕上火車的概率 1.1.1     問題描述 如圖,一列火車從A站開往B站,某人每天趕往B站上這趟火車。他已了解到: (1)   火車從A站到B站的運行時間是均值為30分鐘,標(biāo)準(zhǔn)差為2分鐘的隨機(jī)變量; (2)   火車在下午大約1點離開A站,離開時刻的頻率分布如下:   出發(fā)時刻 午后1:00 午后1:05 午后1:10 頻率 0.7 0.2 0.1 &

2、#160; 此人到達(dá)B站的時刻頻率分布為: 時刻 午后1:28 午后1:30 午后1:32 午后1:34 頻率 0.3 0.4 0.2 0.1 問他能趕上火車的概率是多少?   1.1.2    變量說明 :火車從A站出發(fā)的時刻; :火車從A站到B站的運行時間;單位:分鐘 :他到達(dá)B站的時刻 1.1.3    問題分析與假設(shè) 此問題包含多個隨機(jī)因素。 這里假設(shè),都是隨機(jī)變量,其中服從正態(tài)分布。 1.1.4    模型建立 很顯然,他能及時趕上火車的條件是:。為了簡化計算,將下午1點記為初始時刻。

3、和的分布律如下: /min 0 5 10 0.7 0.2 0.1   /min 28 30 32 34 0.3 0.4 0.2 0.1 為了模擬隨機(jī)變量。如果為在均勻分布的隨機(jī)數(shù),為了模擬隨機(jī)變量,可以通過如下方法。 ,。 其中,和分別用來模擬隨機(jī)變量和。   1.1.5    模擬算法 變量說明: k    臨時變量,存儲當(dāng)前累計模擬次數(shù) count  存儲趕上火車的次數(shù)   第 1 步       輸入模擬次數(shù)n 第 2 步

4、0;      k=1,count=0 第 3 步       當(dāng)k<=n,執(zhí)行第4步,否則執(zhí)行第12步 第 4 步       生成均勻分布隨機(jī)數(shù)賦給r 第 5 步       由r及公式確定T1模擬火車出發(fā)時刻 第 6 步       生成均勻分布隨機(jī)數(shù)賦給r; 第 7 步  &

5、#160;    由r及公式確定T3模擬人達(dá)到時刻 第 8 步       生成正態(tài)分布隨機(jī)數(shù)T2模擬火車運行時間 第 9 步       IF T1+T2 > T3, count=count+1,END 第 10 步  k = k + 1 第 11 步  執(zhí)行第3步 第 12 步  輸出趕上火車頻率p=count/n   1.1.6    模擬程序 %sim_train

6、.m total=input('輸入模擬次數(shù):'); count=0; for i=1:total,       %模擬隨機(jī)變量t1(火車從A站出發(fā)的時刻)    rt1=rand;    if rt1<0.7          T1=0;    elseif rt1>=0.7 & rt1<0.9       

7、60; T1=5;    else         T1=10;    end       %模擬隨機(jī)變量t2(火車的運行時間)      T2=30+randn*2;         %模擬隨機(jī)變量t3(他到達(dá)B站的時刻)      rt3=rand;    if rt3<0.3&

8、#160;        T3=28;    elseif rt3>=0.3 & rt3<0.7          T3=30;    elseif rt3>=0.7 & rt3<0.9          T3=32;    else    

9、0;       T3=34;    end      if T3 < T1 + T2,%趕上了            count=count+1;      end end%for prob=count/total   1.1.7    模擬結(jié)果   命令行中輸入以下語句: sim_trai

10、n   運行結(jié)果輸出:   輸入模擬次數(shù):100   prob =   0.6302 此次運行結(jié)果顯示趕上火車的近似概率為0.6左右。下面列表給出多次運行模擬程序的結(jié)果。   序號 模擬次數(shù) 近似概率p 1 500 0.6280 2 500 0.6920 3 1000 0.6530 4 1000 0.6490 5 5000 0.6260 6 5000 0.6288   1.1.8    評價與改進(jìn)方向 為了計算趕上火車的概率,本文采用了隨機(jī)系統(tǒng)模擬的方法。如果能夠從模型出發(fā),對趕上火車的概率進(jìn)行近似計算,

11、然后與模擬結(jié)果進(jìn)行對比,這樣模擬會更有說明力。 1.1.9    思考題 (1)   請思考用其它方法計算趕上火車的概率或近似概率。 (2)   如果要使得他趕上火車的概率大于95%,你有什么辦法?結(jié)合上面的數(shù)學(xué)模型及模擬程序來思考。 (3)   通過該問題的建模求解,你能歸納出一般系統(tǒng)模擬的方法步驟么?   實驗案例       理發(fā)店模擬     1     &#

12、160; 實驗案例 1.1    案例:理發(fā)店模擬 例子:一個理發(fā)店有兩位服務(wù)員A和B,顧客們隨機(jī)到達(dá)店內(nèi),其中60的顧客僅需剪發(fā),每位花5分鐘時間,另外40顧客既要剪發(fā)又要洗發(fā),每位用時8分鐘。 理發(fā)店是個含有多種隨機(jī)因素的系統(tǒng),請對該系統(tǒng)進(jìn)行模擬,并對其進(jìn)行評判。(準(zhǔn)備怎么做)可供參考內(nèi)容“排隊論”,“系統(tǒng)模擬”,“離散系統(tǒng)模擬”,“事件調(diào)度法” 1.1.1    問題分析 理發(fā)店系統(tǒng)包含諸多隨機(jī)因素,為了對其進(jìn)行評判就是要研究其運行效率,從理發(fā)店自身利益來說,要看服務(wù)員工作負(fù)荷是否合理,是否需要增加員工等考慮。從顧客角度講,還要

13、看顧客的等待時間,顧客的等待隊長,如等待時間過長或者等待的人過多,則顧客會離開。理發(fā)店系統(tǒng)是一個典型的排隊系統(tǒng),可以用排隊論有關(guān)知識來研究。  1.1.2    模型假設(shè) 1            60的顧客只需剪發(fā),40的顧客既要剪發(fā),又要洗發(fā); 2            每個服務(wù)員剪發(fā)需要的時間均為5分鐘,既剪發(fā)又洗發(fā)則花8分鐘; 3

14、            顧客的到達(dá)間隔時間服從指數(shù)分布;4            服務(wù)中服務(wù)員不休息。1.1.3    變量說明 u:剪發(fā)時間(單位:分鐘),u=5m; v:  既剪發(fā)又理發(fā)花的時間(單位:分鐘),v=8m; T: 顧客到達(dá)的間隔時間,是隨機(jī)變量,服從參數(shù)為 的指數(shù)分布,(單位:分鐘)T0:顧客到達(dá)的平均間隔時間(單位:秒

15、),T0 ;  1.1.4    模型建立 由于該系統(tǒng)包含諸多隨機(jī)因素,很難給出解析的結(jié)果,因此可以借助計算機(jī)模擬對該系統(tǒng)進(jìn)行模擬??紤]一般理發(fā)店的工作模式,一般是上午9:00開始營業(yè),晚上10:00左右結(jié)束,且一般是連續(xù)工作的,因此一般營業(yè)時間為13小時左右。 這里以每天運行12小時為例,進(jìn)行模擬。 這里假定顧客到達(dá)的平均間隔時間T0服從均值3分鐘的指數(shù)分布, 則有3小時到達(dá)人數(shù)約為 人,6小時到達(dá)人數(shù)約為 人,10小時到達(dá)人數(shù)約為 人,這里模擬顧客到達(dá)數(shù)為60人的情況。 (如何選擇模擬的總?cè)藬?shù)或模擬總時間)1.1.5   

16、; 系統(tǒng)模擬 根據(jù)系統(tǒng)模擬的一般方法,需要考慮系統(tǒng)的如下數(shù)據(jù)、參數(shù)。1.        狀態(tài)(變量)    (1)     等待服務(wù)的顧客數(shù);(2)     A 是否正在服務(wù); (3)     B 是否正在服務(wù); 2.        實體:兩名服務(wù)員、顧客們3.      

17、60; 事件: (1)     一名新顧客的到達(dá);(2)     A 開始服務(wù); (3)     A 結(jié)束服務(wù); (4)     B 開始服務(wù); (5)     B 結(jié)束服務(wù); 4.        活動:(1)     顧客排隊時間(2)     顧客們到達(dá)的間隔時間(3)     A 的

18、服務(wù)時間 (4)     B 的服務(wù)時間;  在系統(tǒng)模擬時,為了研究系統(tǒng)的整體情況,這里考慮顧客到達(dá)后不離開,且等待隊長不限。要考慮如果服務(wù)員均空閑時,顧客先選擇誰服務(wù)?要考慮模擬的時間設(shè)置還有顧客數(shù)目。模擬終止條件是根據(jù)顧客數(shù)目還是根據(jù)營業(yè)時間終止? 1.1.6    計算機(jī)模擬算法設(shè)計 自行設(shè)計finished=0; 初始化運行時鐘 while finished=0              if &#

19、160; 產(chǎn)生的顧客數(shù)不到規(guī)定數(shù)目時 then, 產(chǎn)生該顧客的有關(guān)數(shù)據(jù); 將顧客加入等待隊列; else 運行時鐘繼續(xù); endif 處理服務(wù)員的狀態(tài)(包括工作狀態(tài),空閑時間); 獲得服務(wù)員的服務(wù)優(yōu)先順序; 根據(jù)服務(wù)員優(yōu)先順序從等待隊列中安排服務(wù); endwhile 有無參考算法?  離散系統(tǒng)仿真算法:事件調(diào)度法 1.1.7    計算機(jī)模擬程序 顧客到達(dá)的間隔時間T的計算機(jī)產(chǎn)生方法,利用T=,   %理發(fā)店系統(tǒng)的模擬(案例分析之一) %關(guān)鍵詞:面向事件的計算機(jī)模擬技術(shù) clear all   curclock=0;%當(dāng)前時刻,動態(tài)變

20、化   totalcustomer=0;%總共服務(wù)的顧客數(shù) numsrv=2; srvstatus=zeros(numsrv,5);%服務(wù)員有關(guān)數(shù)據(jù) %srvstatus 第1列:服務(wù)狀態(tài)(0空閑,1正在服務(wù));第2列:當(dāng)前服務(wù)顧客編號; %   第3列:當(dāng)前服務(wù)結(jié)束時刻;第4列:服務(wù)員空閑時間;第5列:服務(wù)的顧客總數(shù)   endtime =0;%結(jié)束時間 waiting=;%等待隊列數(shù)據(jù) %waiting 第1列:顧客編號;第2列:顧客到達(dá)時刻;第3列:顧客開始接受服務(wù)時刻; %      第4列:接受服務(wù)時間;

21、第5列:顧客結(jié)束服務(wù)時刻;第6列:間隔時間 cur=zeros(1,6);%當(dāng)前產(chǎn)生顧客的數(shù)據(jù),對應(yīng)關(guān)系同waiting avgwaitlen=;%平均等待隊長 avgwaittime =;% 平均等待時間 ujiange=5;%平均間隔時間 finished=0; numsimucustumer=yesinput('輸入等待模擬的顧客數(shù):',10,10 1000); while   finished=0,       if totalcustomer < numsimucustumer   

22、    %產(chǎn)生一個顧客的到達(dá)及其有關(guān)性質(zhì)的數(shù)據(jù)            totalcustomer = totalcustomer+1;            jiange= -log(rand)*ujiange;%與上一個顧客的到達(dá)的間隔時間       curclock = curclock + jiange; &#

23、160;     cur(1)= totalcustomer ;% 第1列:顧客編號       cur(2) = curclock;%第2列:顧客到達(dá)時刻 cur(6) = jiange; 第6列:間隔時間 %下面產(chǎn)生接受服務(wù)時間(可改進(jìn)模型)       if rand<0.6, %產(chǎn)生顧客有關(guān)性質(zhì):這里是產(chǎn)生接受服務(wù)時間          cur(4) = 5; &

24、#160;     else          cur(4) = 8;       end       %放入等待隊列       if isempty(waiting),          waiting= cur;   

25、60;   else          m,n=size(waiting);          waiting(m+1,:)= cur;       end    else       curclock = curclock + (-log(rand)*ujiange);   

26、end%if totalcustomer<          %分配等待隊列(看是否有服務(wù)員空閑,如果有則分配;否則繼續(xù)執(zhí)行)     %處理服務(wù)員的服務(wù)狀態(tài)    for i=1:numsrv,       if srvstatus(i,1)=1 & srvstatus(i,3) <= curclock,          srvstatus(i

27、,1)=0;%設(shè)置為空閑狀態(tài)          srvstatus(i,4)= curclock-srvstatus(i,3);%目前已經(jīng)空閑的時間       elseif srvstatus(i,1)=1 & srvstatus(i,3) > curclock,          srvstatus(i,4)= 0;%沒有休息(正在忙)   

28、0;   else          srvstatus(i,4)= curclock-srvstatus(i,3);%目前已經(jīng)空閑的時間       end         end    %處理服務(wù)員服務(wù)的先后順序(依據(jù)空閑時間)(精細(xì)處理)    tmp=srvstatus(:,4);    for i=1:num

29、srv,       value,id=max(tmp);       b(i)=id;       tmp(id)=0;%已經(jīng)排序了         end             %此時等待隊列必然不為空    for j=1:numsrv,   

30、;    i=b(j);%確定服務(wù)員的序號       if(srvstatus(i,1)=0)          %找一個顧客開始服務(wù),同時計算該顧客什么時候接受服務(wù),結(jié)束服務(wù);          m,n=size(waiting);          if m=0, 

31、0;           break;          end                        if waiting(1,5)=0,%還沒有開始接受服務(wù)    &#

32、160;        waiting(1,3)= curclock;             waiting(1,5)= waiting(1,3)+waiting(1,4);%結(jié)束時刻             srvstatus(i,1)=1;%設(shè)置為忙狀態(tài)     

33、        srvstatus(i,2)=waiting(1,1);%顧客編號             srvstatus(i,3)= waiting(1,5);%結(jié)束時刻             srvstatus(i,5)=srvstatus(i,5)+1;%又服務(wù)了一個顧客    

34、;           %計算等待時間             avgwaittime(end+1) = waiting(1,3)-waiting(1,2);                    &

35、#160;   disp(sprintf('間隔時間(%8.2f) 顧客編號:%5d 接受服務(wù)員(%4d)服務(wù)(到達(dá)時刻%10.2f)',waiting(1,6),waiting(1,1),i,waiting(1,2)             endtime=max(endtime,waiting(1,5)             waiti

36、ng(1,:)=;%從等待隊列中離開                      end       end%if         end%for        m,n=size(waiting);    %計算隊長(這里

37、的計算式子可以參考排隊論有關(guān)術(shù)語進(jìn)行確定)    if totalcustomer < numsimucustumer       avgwaitlen(end+1)=m;    end    if sum(srvstatus(:,5)>=numsimucustumer,%隊列為空,結(jié)束       finished=1;    end      end%while 

38、0; disp('服務(wù)顧客數(shù):') disp(srvstatus(:,5)') disp('平均隊長'); disp(mean(avgwaitlen); disp('運行時間(分鐘,小時)'); disp(sprintf('%8.f%8.f',curclock,curclock/60);   disp('平均等待時間(分鐘)'); disp(mean(avgwaittime ); disp('結(jié)束時間(分鐘)'); disp(endtime );   figure his

39、t(avgwaitlen)   title('平均隊長')   figure hist(avgwaittime) title('平均等待時間');    1.1.8    思考題 請運行模擬程序,并分析運行結(jié)果。 實驗案例 一個修理廠的模擬     1       實驗案例   1.1    案例:一個修理廠的模擬 1.1.1  

40、60; 問題描述 某修理廠設(shè)有3個停車位置,其中一個位置供正在修理的汽車停放?,F(xiàn)以一天為一個時段,每天最多修好一輛車,每天到達(dá)修理站的汽車數(shù)有如下概率分布:   到達(dá)數(shù) 0 1 2 概率 06 02 02 假定在一個時段內(nèi)一輛汽車能夠修好的概率為0.7,本時段內(nèi)未能完成修理的汽車于正在等待修理的汽車一起進(jìn)入下一時段。試問:該停車廠有無必要增加停車位置,并說明理由。   1.1.2    模擬模型        這種排隊論方面的問題采用固定時間增量法模擬。模擬以一天為一個時段,模擬縱時間

41、最好在1000天以上。        模擬汽車到達(dá)數(shù)量,根據(jù)概率分布:產(chǎn)生在0,1上均勻分布的隨機(jī)數(shù)t,如果,則認(rèn)為當(dāng)天到達(dá)的車輛數(shù)為0輛;如果,則認(rèn)為當(dāng)天到達(dá)的車輛數(shù)為1輛,如果,則認(rèn)為當(dāng)天到達(dá)的車輛數(shù)為2輛。        模擬修理情況:由于一天最多修好一輛,而一個時段內(nèi)一輛汽車修好的概率為0.7,則模擬每兩車的修理情況,如果這些車所能修好數(shù)目大于等于1輛,則以當(dāng)天修好1輛計。 1.1.3    模擬程序    

42、    本模擬程序編寫了一個主函數(shù)queue,另外在函數(shù)queue中編寫了2個子函數(shù): getcome:模擬車輛到來情況,返回當(dāng)天到來的車輛數(shù)目 getrepaired:模擬修理情況,返回修好的車輛數(shù)目 整個模擬程序如下:(2005/6/6新版本) function queue %2005-6-6 %排隊模擬主程序 %排隊問題模擬 % numdays=input('請輸入模擬天數(shù):') numstay=0;%假定最初修理站還沒有待修理的汽車   LEN=6;%定義常量 matfrequence=zeros(1,LEN);%第i個元素表示當(dāng)

43、天末還有i-1輛車在沒有修好的時段頻數(shù)   leave_norepair=0;%存儲來到,但沒有停車位置而離開的車輛數(shù)   for days=1:numdays%主循環(huán),模擬numdays個時段    temp= getcome;    if numstay + temp>3 ,       leave_norepair = leave_norepair + (numstay + temp - 3);    end     

44、60; %numcome=numstay+getcome;%2004-10-10:這里有問題,受限制與停車位置數(shù)量       numcome=min(3,numstay + temp);%        %頭一天還沒有修好的車輛數(shù)當(dāng)天新到來的車輛數(shù)    %numstay表示當(dāng)天末還沒有修理好的車輛數(shù)目       numstay=max(0,numcome - getrepaired(numcome);%      matfrequence(numstay+1)=matfrequence(numstay+1) + 1 ;  end matfrequence prob=matfrequence/numdays   disp(sprintf('平均每天夜里停放在修理站的車輛數(shù)=%4.2f',.    sum(matfrequence/numdays.*0:LEN-1) %sprintf

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論