哲學家聚餐問題的計算機仿真.docx_第1頁
哲學家聚餐問題的計算機仿真.docx_第2頁
哲學家聚餐問題的計算機仿真.docx_第3頁
哲學家聚餐問題的計算機仿真.docx_第4頁
哲學家聚餐問題的計算機仿真.docx_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

哲學家聚餐仿真實驗 2008011464 楊盛哲學家聚餐實驗報告2008011464 楊盛一實驗內容哲學家用餐問題是由E.J.Dijkstra提出,目的是解決資源的共享與訪問控制。五位“哲學家”均勻地圍坐在一張圓桌周圍,他們一邊討論一邊用餐。每人面前有一盤佳肴,每個盤子之間有一把叉子,如下圖所示:1)說話(思考)時不吃也不占用叉子;2)吃食物時不說話也不思考;3)等待時不說話也不思考;4)任何一個哲學家在任何時候要么處于說話(思考)狀態(tài),要么處于吃食物狀態(tài),要么處于等待叉子的狀態(tài);允許同時有多人說話(思考)或多人吃食物;5)當某人要吃食物時,必須同時占用靠近他的兩把叉子,當不夠兩把叉子時,他處于等待叉子的狀態(tài);叉子一旦被某人占用,就處于被占用狀態(tài),直到該人的吃食物的活動完成后才被釋放;6)任何一把叉子,均可被靠近它的哲學家占用,也只能被靠近它的哲學家占用,按FIFO規(guī)則;7)食物充足,也不考慮吃飽了不想吃的問題。設每一位哲學家每一次說話或思考的時間長度服從正態(tài)分布N(5,4),每次吃食物的時間長度x服從如下形式的分布的隨機變量。二實驗要求設每一位哲學家每一次說話或思考的時間長度服從正態(tài)分布N(5,4),每次吃食物的時間長度x服從如下形式的分布的隨機變量。自行編制程序,仿真時,采用如下隨機數: ,種子值為1。初始狀態(tài)為:哲學家1、3、5為說話或思考狀態(tài),2、4吃食物狀態(tài)。1)可任選采用事件調度法或活動掃描法建模; 2)仿真運行時間長度:24小時,仿真計算在24小時內,每位哲學家的平均說話或思考時間、等待用餐時間和吃食物時間; 3)自行確定仿真運行時間長度,用批均值法,統(tǒng)計估計每位哲學家的穩(wěn)態(tài)平均說話或思考時間、等待用餐時間和吃食物時間,以及相應的置信區(qū)間三項目目的1)掌握用事件調度法或活動掃描法進行仿真建模的方法2)掌握離散事件系統(tǒng)仿真方法3)掌握用批均值法進行離散事件系統(tǒng)仿真輸出數據分析的方法四仿真程序流程圖事件判斷五部分程序說明本次仿真采用的是事件調度法。隨機數發(fā)生器采用題目要求的線性同余法隨機數發(fā)生器/*線性同余法生成隨機數*/double Random_Z()double z=16807*z1;z1=z-B*(int)(z/B);return (z1/B);用舍選法產生符合實驗要求的分布/* 舍選法用U(0,1)生成F(x) */double Random_F()double u1,u2;while(1)u2=2+Random_Z()*2;/2-4均勻分布u1=Random_Z()*2/3;/0-2/3均勻分布if(u2=2.5)if(u1=(u2-2)*(2.0/3)+(1.0/3) return u2;elseif(u1=(2.0/3-(u2-2.5)*(2.0/9) return u2;/*舍選法用U(0,1)生成N(u,th2) */double Random_N(double u,double th)if (s=1) s=0;return N;double v1,v2,w;while(1)v1=Random_Z()*2-1;v2=Random_Z()*2-1;w=v1*v1+v2*v2;if(w=1)s=1;N=(v2*sqrt(-2*log(w)/w)*th+u;return (v1*sqrt(-2*log(w)/w)*th+u;定義哲學家的三種狀態(tài)enum stateeating,talkingOrThinking,waiting;/枚舉狀態(tài)定義哲學家類型typedef struct Philosopher state NowState;double timeToFinishCurrentFair;/如果在吃,還要多久吃完;如果在思考,還要思考多久;如果在等,等了多少時間(負數表示)double totalTimeOfEating;/吃飯總時間double totalTimeOfThinking;/思考總時間double totalTimeOfWaiting;/等待總時間Philosopher;/哲學家類型哲學家類型包含:當前狀態(tài)NowState,timeToFinishCurrentFair表示結束當前狀態(tài)還需要的時間,應當注意的是,當哲學家A處于等叉狀態(tài)時,何時退出等叉狀態(tài)取決于相鄰的兩位哲學家的狀態(tài),即當兩個哲學家均處于說話狀態(tài)或等叉但是等待時間不及哲學家A/*為分析設置的記錄resi0k是第i位哲學家第k批仿真的吃飯時間resi1k是第i位哲學家第k批仿真的思考時間resi2k是第i位哲學家第k批仿真的等待時間k=0時是相應的總時間resInPercenti0k是第i位哲學家第k批仿真的吃飯時間的百分比resInPercenti1k是第i位哲學家第k批仿真的思考時間的百分比resInPercenti2k是第i位哲學家第k批仿真的等待時間的百分比*/double res63100=0;double resInPercent63100=0;switch(desireTurns)case 10:tp=1.8331;break;case 20:tp=1.7291;case 30:tp=1.6991;case 40:tp=1.6849;default:tp=6.3138;為了減少批均值法結果分析的計算量,程序里直接給出置信度為0.9的置信區(qū)間。輸入了預定的仿真批次后,查表確定t分布分位數。for (int i=0;ideltaT)if(activePher=-1) activePher=i;else if(pheri.timeToFinishCurrentFairpheractivePher.timeToFinishCurrentFair)activePher=i;程序用的是事件調度法,定義事件:開始吃飯/開始說話/開始等叉。上面的程序段用于確定下一個發(fā)生的事件。這里的deltaT有些講究。a) 初始化后,deltaT的值為負無窮;b) 某個事件處理完后,若這個哲學家進入了吃飯狀態(tài)或講話狀態(tài),則deltaT置為負無窮,也就是說,下一輪確定將要發(fā)生的事件時,會從所有哲學家中選出timeToFinishCurrentFair最小的一個,包括負數;c) 某個事件處理完后,若這個哲學家想吃飯卻沒能吃上,即進入了等待狀態(tài),則deltaT置為0,也就是說,下一輪確定將要發(fā)生的事件時,不可能由處于等待狀態(tài)的哲學家觸發(fā);d) 若被處理的哲學家剛剛為等叉狀態(tài),事件處理的結果他仍然是等叉狀態(tài),則下一輪確定將要發(fā)生的事件時,不可能由他和比他等得久得更久的哲學家來觸發(fā)。六結果分析進行了40個批次的仿真,單次仿真時長為24小時可見,在實驗給定的條件下,各哲學家在24小時的聚餐中,吃飯的時間約為30%,思考的時間占51%,等叉時間為19%。精確的置信區(qū)間參見上面截圖。七總結和感想這次的仿真跟前面兩次有很大的不同。我三次作業(yè)都是用的事件調度法,給我的感覺是,單服務臺排隊系統(tǒng)和庫存系統(tǒng)仿真中,

溫馨提示

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

評論

0/150

提交評論