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

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

客戶以隨機方式 (依卜瓦松分布) 請求服務,由於請求複雜度不一,因此服務者需要隨機時間 (依指數分布) 提供服務,待服務總量為固定,當服務者正在執行某項服務時,其他客戶便必須等候服務者完成前項服務。

    • 服務系統達到穩態時,

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

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

    • 在任何一個時段,

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

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

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

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

應用

工廠只有 2 名維修員,平均每小時有 6 部設備維修,設備維修平均需要 30 分鐘時間方能正常運轉, 有 3 個維修台,當維修台已滿時,則不再接受維修申請,求算:

    1. 維修員閒置機率。

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

    3. 設備等候維修機率。

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

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

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

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

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

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

rm(list=ls()) options(digits=4) QueuingFullCapacity <- function(lamda, mu, numOfServant) { rho <- lamda / mu P0_1 <- (numOfServant * (rho ^ numOfServant)) / ((numOfServant - rho) * factorial(numOfServant)) P0_2 <- 0 for (i in 0:(numOfServant-1)) { P0_2 <- P0_2 + (rho ^ i) / (factorial(i)) } P0 <- 1/ (P0_1 + P0_2) Lq <- (P0 * numOfServant * (rho ^ (numOfServant+1))) /

(factorial(numOfServant) * ((numOfServant - rho) ^ 2)) Wq <- Lq / lamda W <- Wq + 1/mu L <- W * lamda ans <- c(rho, P0, L, W, Lq, Wq) ans } queuing <- function(lamda, mu, numOfServant, numOfCustomer, P0) { rho <- lamda / mu if (numOfCustomer < numOfServant) { Pn <- (P0 * (lamda ^ numOfCustomer)) / (factorial(numOfCustomer) * (mu ^ numOfCustomer)) } else { Pn <- (P0 * (lamda ^ numOfCustomer)) / (factorial(numOfServant) * (numOfServant ^ (numOfCustomer - numOfServant)) * (mu ^ numOfCustomer)) } ans <- Pn ans } avgNumOfCustomer <- 6 numOfRequestCanHold <- 3 numOfServant <-3 if (avgNumOfCustomer < numOfServant * numOfRequestCanHold) { ans <- QueuingFullCapacity(lamda=avgNumOfCustomer, mu=numOfRequestCanHold, numOfServant) 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])) Pn <- c(0, 0, 0) for (i in 1:numOfRequestCanHold) { Pn[i] <- queuing(lamda=avgNumOfCustomer, mu=numOfRequestCanHold, numOfServant=3, numOfCustomer=i, P0) print(sprintf("客人有 %d 人機率=%.4f", i, Pn[i])) } PanyCustomer <- 1 - (P0 + Pn[1] + Pn[2] + Pn[3]) print(sprintf("任一客戶等候機率=%.4f", PanyCustomer)) PanyServant <- P0 + Pn[1] + Pn[2] print(sprintf("任一服務者閒置機率=%.4f", PanyServant)) PparticularServant <- P0 + (Pn[1]*2)/numOfServant + Pn[2]/numOfServant print(sprintf("某一服務者閒置機率=%.4f", PparticularServant)) } else { print(sprintf("平均來客數=%d >= 服務者數=%d * 最大服務量=%d", avgNumOfCustomer, numOfServant, numOfRequestCanHold)) }

[ 1] 無客人機率=0.1111 [ 2] 服務系統內平均客戶數=2.8889 [ 3] 服務系統內平均處理時間=0.4815 [ 4] 等候線內平均客戶數=0.8889 [ 5] 等候線內平均處理時間=0.1481 [ 6] 客人有 1 人機率=0.2222 [ 7] 客人有 2 人機率=0.2222 [ 8] 客人有 3 人機率=0.1481 [ 9] 任一客戶等候機率=0.2963 [10] 任一服務者閒置機率=0.5556 [11] 某一服務者閒置機率=0.3333