基本等候模式 (M/M/1):(N/∞/FCFS)

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

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

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

應用一

工廠只有一名維修員,維修員在其工作檯修理半成品瑕疵,生產線作業員將待修半成品交由維修員修理,工作檯旁配置有 2 個待修籃。
當維修員正修理其他半成品時,若維修員有空,作業員交待修品給維修員修理,否則將待修品置放於待修籃內等候修理。
但若待修籃內已滿,作業員會等下次有空時再嘗試送修。
經過工管人員觀察分析,作業員送修半成品與維修員修理均成指數分配,作業員平均每小時送修 2 件半成品,而維修員平均需要 20 分鐘修理時間。求算:
  1. 無待修品機率。
  2. 分別有 1~2 個待修品送修機率。
  3. 待修品送修等候修理機率。
  4. 服務系統內平均客戶數 L。
  5. 服務系統內平均處理時間 W。
  6. 等候線內平均客戶數 Lq
  7. 等候線內平均處理時間 Wq
rm(list=ls())

options(digits=4)

QueuingFullCapacity <- function(lamda, mu, maxNumOfCustomer) {
  rho <- lamda / mu
  
  if (rho==1) {
    P0 <- 1 / (maxNumOfCustomer + 1)
    Pn <- P0
    L <- maxNumOfCustomer / 2
  }
  else {
    P0 <- (1 - rho) / (1 - rho ^ (maxNumOfCustomer + 1))
    Pn <- P0 * rho ^ maxNumOfCustomer
    L <- (rho / (1 - rho)) - 
      ((maxNumOfCustomer + 1)*rho ^ (maxNumOfCustomer + 1) / 
         (1 - rho ^ (maxNumOfCustomer + 1)))
  }
  
  Lq <- P0 + L - 1 
  W <-  L / (lamda * (1 - Pn))
  Wq <- Lq / (lamda * (1 - Pn))
  
  ans <- c(rho, P0, Pn, L, W, Lq, Wq)
  ans
}

queuing <- function(lamda, mu, maxNumOfCustomer, numOfCustomer, P0, L) {
    rho <- lamda / mu
  
  if (rho==1) {
    Pn <- P0
  }
  else {
    Pn <- P0 * rho ^ numOfCustomer
  }

  Lq <- P0 + L - 1 
  W <-  L / (lamda * (1 - Pn))
  Wq <- Lq / (lamda * (1 - Pn))
  
  ans <- c(rho, P0, Pn, L, W, Lq, Wq)
  ans
}

avgNumOfCustomer <- 2
numOfRequestCanHold <- 3

ans <- QueuingFullCapacity(lamda=avgNumOfCustomer, mu=numOfRequestCanHold, maxNumOfCustomer=3)
P0 <- ans[2]
L <- ans[4]
  
print(sprintf("無客人機率=%.4f", P0))
print(sprintf("服務系統內平均客戶數=%.4f", ans[4]))
print(sprintf("服務系統內平均處理時間=%.4f", ans[5]))
print(sprintf("等候線內平均客戶數=%.4f", ans[6]))
print(sprintf("等候線內平均處理時間=%.4f", ans[7]))

ans <- queuing(lamda=2, mu=3, maxNumOfCustomer=3, numOfCustomer=1, P0, L)
print(sprintf("客人等待機率=%.4f", 1- ans[2] - ans[3]))

for (i in 1:2) {
  ans <- queuing(lamda=2, mu=3, maxNumOfCustomer=3, numOfCustomer=i, P0, L)
  print(sprintf("客人有 %d 人機率=%.4f", i, ans[3]))
}
[1] 無客人機率=0.4154
[2] 服務系統內平均客戶數=1.0154
[3] 服務系統內平均處理時間=0.5789
[4] 等候線內平均客戶數=0.4308
[5] 等候線內平均處理時間=0.2456
[6] 客人等待機率=0.3077
[7] 客人有 1 人機率=0.2769
[8] 客人有 2 人機率=0.1846
ċ
Queuing_Formula_2.R
(2k)
李智,
2013年8月22日 上午4:58