作者freshair1219 (fresh-air)
看板C_and_CPP
標題[問題] 模擬具Queue的兩個server 服務效能
時間Fri Apr 27 03:21:28 2012
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
dev c++
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
"lcgrand.h"
問題(Question):
程式跑不出來,不知道問題在哪QQ
餵入的資料(Input):
欲模擬的"時間"
預期的正確結果(Expected Output):
統計結果:
1.第一個server的最大服務容量
這邊我定義的是模擬過程中queue數目最大到多少+1
2.平均一個小時從系統一(inspection)成功離開的人數(也就是不須進入系統二的)
在模擬時間內成功從第一個server(inspection server)離開的人數/總模擬時間
3.所有server的使用率(total busy time/total simulation time)
錯誤結果(Wrong Output):
完全跑不出來QQ
程式碼(Code):(請善用置底文網頁, 記得排版)
http://ideone.com/gOQro
這個是lcgrand.c的程式碼
http://www.ie.metu.edu.tr/~ie505/lcgrand.c
補充說明(Supplement):
重新敘述題目,我要模擬兩個系統(inspection,repair)串再一起,
第二個系統(repair)會有0.5的機率feedback回第一個系統(inspection)
也就是說沒修好就繼續去第一個系統檢查,修好機率是0.5
修好就直接離開
也就是說顧客進入第一個系統的來源有兩個,
一個是隨機產生,產生時間遵循exponetial分布(mean是2),
另一個是剛剛從第二個系統(repair)離開的,且需要進入第一個系統(p=0.5)
一離開就馬上進入第一個系統
第一個系統(inspection)的服務時間是uniform(0.25,1.05),
然後有0.3的機率進入第二個系統(repair)
也就是說檢查沒問題就離開,有問題就馬上去第二個系統(repair)修理,
沒問題的機率是0.7
第二個系統(repair)的來源只有一個
就是剛剛從第一個系統(inspection)離開的且需要進入第二個系統的(p=0.3)
第二個系統(repair)的服務時間是uniform(2.1,4.5)
總結就是先檢查,檢查不ok(不ok機率0.7,服務完才知道ok於否)
就去下一站修理,修理不好再檢查(不好機率0.5,服務完才知道修好於否)
模擬時間到就終止,並匯出所需要數據
注意:第一個系統&第二個系統均有Queue,第一個系統有一個server,
第二個系統有兩個server
時間串列是自己產生的~
請高手幫幫忙,題目不難懂,畫個圖就很清楚敘述了
感謝大家QQ
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.233.234
→ EdisonX:敘述不夠。轉去programming較合適,先說明時間離散化是怎處 04/27 07:25
→ EdisonX:理為佳。 04/27 07:25
→ EdisonX:<補>敘述不夠指的是,1. exp分佈除了means,還需要sd<沒有> 04/27 07:36
→ EdisonX:2. 第一個 server 最大服務容量 <未定義,是要算不等待??> 04/27 07:37
→ EdisonX:3. 離開人數未定義 <重回到station1的要再計時?> 04/27 07:38
→ freshair1219:自己做一個時間串列阿 04/27 07:38
→ freshair1219:exp分布只要mean..... 04/27 07:39
→ freshair1219:最大服務容量一般是指 queue大小+server個數 04/27 07:41
→ freshair1219:但這邊queue大小是自己定的,所以我定義的最大容量是 04/27 07:42
→ freshair1219:模擬過程中 queue最大使用數+server數目(就是1) 04/27 07:44
→ freshair1219:3.不懂你的意思= =|||,我只計算模擬時間內共多少人 04/27 07:46
→ freshair1219:從系統離開,然後我要算平均一個小時有幾個是從系統 04/27 07:47
→ freshair1219:一 成功離開.... 04/27 07:47
→ EdisonX:假設系統1裡最終出去的有100人,其中30人是系統2回鍋的, 04/27 07:48
→ EdisonX:所以從系統1離開的是100人還是70人? 04/27 07:49
→ freshair1219:100,回鍋的只要在模擬時間出去都算~ 04/27 07:54
※ 編輯: freshair1219 來自: 140.112.233.234 (04/27 08:22)
→ EdisonX:是個有趣的問題,不過沒時間幫你看.點幾個有問題的地方。 04/27 10:01
→ EdisonX:1. EVENT event, event 變數名稱和 struct event 相衝。 04/27 10:01
→ EdisonX:2. add_queue 裡面,前面有可能有空位<有人離開>,要再修。 04/27 10:02
→ EdisonX:3. 在link做插入比較時,再加一個,若時間一樣,left先處理。 04/27 10:03