多站平行等候模式 (M/M/C):(N/N/FCFS)

(M/M/C):(N/N/FCFS) 提示:

客戶以隨機方式 (依卜瓦松分布) 請求服務,由於請求複雜度不一,因此服務者需要隨機時間 (依指數分布) 提供服務,

待服務總量及等候量均為固定,服務當服務者正在執行某項服務時,其他客戶便必須等候服務者完成前項服務。

    • 服務系統達到穩態時,

      • 客戶進入等候系統人數 λ 為常數。

      • 平均服務客戶人數 μ 為常數。

    • 在任何一個時段,

      • 客戶進入等候系統事件為獨立。

      • 客戶進入等候系統機率相同。

      • 客戶進入等候系統人數與時段長度成正比。

      • 在極短時間內,超過 1 人進入等候系統機率為 0。

應用

工廠只有 2 名維修員,負責保養維護 6 部設備,設備平均運轉 6 日便必須保養維護設備維修平均需要 2 日方能准許上線運轉, 求算:

    1. 維修員閒置機率。

    2. 分別有 1~2 部設備發生維修機率。

    3. 設備等候維修機率。

    4. 至少有 1 名維修員閒置機率。

    5. 某一位維修員閒置機率。

    6. 服務系統內平均客戶數 L。

    7. 服務系統內平均處理時間 W。

    8. 等候線內平均客戶數 Lq

    9. 等候線內平均處理時間 Wq

options(digits=4) rm(list=ls()) # 顧客到達率 requestPeriod <- function(lamda, n, numOfRequestCanHold) { ans <- lamda if (n < numOfRequestCanHold) { ans <- lamda * (numOfRequestCanHold - n + 1) } ans } # 服務率 serviceTime <- function(avgServiceTime, n, numOfServant) { ans <- avgServiceTime if (n >= numOfServant) { ans <- numOfServant * avgServiceTime } else { ans <- n * avgServiceTime } ans } # 第 (n > 0) 位顧客機率係數 probabilityWeightOfNumRequest <- function(lamda, mu, numOfServant, numOfRequestCanHold, n) { ans <- 1 for (i in (1:n)) { lamdaN <- requestPeriod(lamda, i, numOfRequestCanHold) muN <- serviceTime(avgServiceTime=mu, i, numOfServant) rhoN <- lamdaN / muN ans <- ans * rhoN } ans } # 無設備待修機率 probabilityOfNoRequest <- function(lamda, mu, numOfServant, numOfRequestCanHold) { ans <- 1 for (i in 1:numOfRequestCanHold) { ans <- ans + probabilityWeightOfNumRequest(lamda, mu, numOfServant, numOfRequestCanHold, n=i) } ans <- 1/ans } # 第 (n > 0) 位顧客機率 probabilityOfNumRequest <- function(P0, lamda, mu, numOfServant, numOfRequestCanHold, n) { ans <- 1 for (i in (1:n)) { lamdaN <- requestPeriod(lamda, i, numOfRequestCanHold) muN <- serviceTime(avgServiceTime=mu, i, numOfServant) rhoN <- lamdaN / muN ans <- ans * rhoN } ans * P0 } # 求算基本值 valuesOfQueue <- function(lamda, mu, numOfServant, numOfRequestCanHold) { rho <- lamda / mu P0 <- probabilityOfNoRequest(lamda, mu, numOfServant, numOfRequestCanHold) Pn <- matrix(0, nrow=1, ncol=numOfRequestCanHold) for (i in 1:numOfRequestCanHold) { Pn[i] <- probabilityOfNumRequest(P0, lamda, mu, numOfServant, numOfRequestCanHold, n=i) } L <- 0 for (i in 1:numOfRequestCanHold) { L <- L + i * Pn[i] } lamdaBar <- lamda * (numOfRequestCanHold - L) W <- L / lamdaBar Wq <- W - (1/mu) Lq <- lamdaBar * Wq ans <- list(Pn=Pn, values=c(rho, P0, L, W, Lq, Wq)) return(ans) } # 主程式 numOfServant <-2 numOfRequestCanHold <- 6 avgRequestPeriod <- 1/6 avgServiceTime <- 1/2 retList <- valuesOfQueue(lamda=avgRequestPeriod, mu=avgServiceTime, numOfServant, numOfRequestCanHold) Pn <- retList$Pn ans <- retList$values P0 <- ans[2] print(sprintf("無設備維修機率=%.4f", P0)) print(sprintf("服務系統內平均設備數=%.4f", ans[3])) print(sprintf("服務系統內平均處理時間=%.4f", ans[4])) print(sprintf("等候線內平均設備數=%.4f", ans[5])) print(sprintf("等候線內平均處理時間=%.4f", ans[6])) # 所有設備維修機率 for (i in 1:numOfRequestCanHold) { print(sprintf("有 %d 設備維修機率=%.4f", i, Pn[i])) } # 服務者 2 位,無設備維修機率,第一位服務者維修設備機率,第二位服務者維修設備機率 PanyCustomer <- 1 - (P0 + Pn[1] + Pn[2]) print(sprintf("任一設備維修等候機率=%.4f", PanyCustomer)) # 服務者 2 位,無設備維修機率,任一位服務者維修一個設備機率 PanyServant <- P0 + Pn[1] print(sprintf("任一服務者閒置機率=%.4f", PanyServant)) # 服務者 2 位,無設備維修機率,某一位服務者維修一個設備機率 PparticularServant <- P0 + (Pn[1]*2)/numOfServant print(sprintf("某一服務者閒置機率=%.4f", PparticularServant))

[ 1] 無設備維修機率=0.1527 [ 2] 服務系統內平均設備數=1.8322 [ 3] 服務系統內平均處理時間=2.6377 [ 4] 等候線內平均設備數=0.4430 [ 5] 等候線內平均處理時間=0.6377 [ 6] 有 1 設備維修機率=0.3054 [ 7] 有 2 設備維修機率=0.2545 [ 8] 有 3 設備維修機率=0.1697 [ 9] 有 4 設備維修機率=0.0848 [10] 有 5 設備維修機率=0.0283 [11] 有 6 設備維修機率=0.0047 [12] 任一設備維修等候機率=0.2875 [13] 任一服務者閒置機率=0.4581 [14] 某一服務者閒置機率=0.4581