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

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

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

  • 服務系統達到穩態時,
    • 客戶進入等候系統人數 λ 為常數。
    • 平均服務客戶人數 μ 為常數。
  • 在任何一個時段,
    • 客戶進入等候系統事件為獨立。
    • 客戶進入等候系統機率相同。
    • 客戶進入等候系統人數與時段長度成正比。
    • 在極短時間內,超過 1 人進入等候系統機率為 0。

應用一

工廠只有 3 名維修員,平均每小時有 6 部設備維修,設備維修平均需要 20 分鐘時間方能正常運轉求算:
  1. 維修員閒置機率。
  2. 分別有 1~3 部設備發生維修機率。
  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
ċ
Queuing_Formula_4.R
(2k)
李智,
2013年8月22日 上午4:57