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

下載本文檔

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

文檔簡介

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

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

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    臨時(shí)變量,存儲當(dāng)前累計(jì)模擬次數(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ā)時(shí)刻 第 6 步       生成均勻分布隨機(jī)數(shù)賦給r; 第 7 步  &

5、#160;    由r及公式確定T3模擬人達(dá)到時(shí)刻 第 8 步       生成正態(tài)分布隨機(jī)數(shù)T2模擬火車運(yùn)行時(shí)間 第 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ā)的時(shí)刻)    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(火車的運(yùn)行時(shí)間)      T2=30+randn*2;         %模擬隨機(jī)變量t3(他到達(dá)B站的時(shí)刻)      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   運(yùn)行結(jié)果輸出:   輸入模擬次數(shù):100   prob =   0.6302 此次運(yùn)行結(jié)果顯示趕上火車的近似概率為0.6左右。下面列表給出多次運(yùn)行模擬程序的結(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    評價(jià)與改進(jìn)方向 為了計(jì)算趕上火車的概率,本文采用了隨機(jī)系統(tǒng)模擬的方法。如果能夠從模型出發(fā),對趕上火車的概率進(jìn)行近似計(jì)算,

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

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

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

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

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

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

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

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

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

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

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

24、#160;     else          cur(4) = 8;       end       %放入等待隊(duì)列       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<          %分配等待隊(duì)列(看是否有服務(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)空閑的時(shí)間       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)空閑的時(shí)間       end         end    %處理服務(wù)員服務(wù)的先后順序(依據(jù)空閑時(shí)間)(精細(xì)處理)    tmp=srvstatus(:,4);    for i=1:num

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

30、;    i=b(j);%確定服務(wù)員的序號       if(srvstatus(i,1)=0)          %找一個(gè)顧客開始服務(wù),同時(shí)計(jì)算該顧客什么時(shí)候接受服務(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é)束時(shí)刻             srvstatus(i,1)=1;%設(shè)置為忙狀態(tài)     

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

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

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

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

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

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

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

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

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輛。        模擬修理情況:由于一天最多修好一輛,而一個(gè)時(shí)段內(nèi)一輛汽車修好的概率為0.7,則模擬每兩車的修理情況,如果這些車所能修好數(shù)目大于等于1輛,則以當(dāng)天修好1輛計(jì)。 1.1.3    模擬程序    

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

43、天末還有i-1輛車在沒有修好的時(shí)段頻數(shù)   leave_norepair=0;%存儲來到,但沒有停車位置而離開的車輛數(shù)   for days=1:numdays%主循環(huán),模擬numdays個(gè)時(shí)段    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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論