# Queueing Theory - 3.3 Multiserver Queues (M/M/c) contributed by <[`kaeteyaruyo`](https://github.com/kaeteyaruyo)> ###### tags: `Queueing Theory`  > Figure 3.6 Rate transition diagram for the M/M/c queue. * M/M/c 是一種規律的排隊模型,跟 M/M/1 很相似,差別只在 M/M/1 只有一個 server,但是 M/M/c 有 c 個 server * Fig. 3.6 是 M/M/c 的 Rate transition diagram,跟 M/M/1 的圖長的很像,但值得注意的是, M/M/c 的**服務率會跟系統中的人數有關**,並不是一個定值 * 顧客的到達率是定值, $\lambda_n = \lambda$ * 單一一個 server 的服務率依然是 $\mu$,但整個系統的服務率會跟系統中的人數有關 $$ \mu_n = \begin{cases} n \mu, & \; (1 \leq n < c) \\ c \mu, & \; (n \geq c) \\ \end{cases} $$ * M/M/c 模型的 global balance equation 跟 M/M/1 的列法是一樣的,因此我們不需要再重新解一次 global balance equation,只要用 M/M/1 解出來的結果,並且把 $\mu$ 的部份用適當的 $\mu_n$ 替換掉,就可以直接得知 M/M/c 的 steady-state distribution $$ p_n = \begin{cases} \frac{\lambda^n}{n!\mu^n}p_0, (1 \leq n < c) \\ \frac{\lambda^n}{c^{n-c}c!\mu^n}p_0, (n \geq c) \end{cases} $$ * 上式中還有 $p_0$ 這個未知數,可以利用 $\sum p_n = 1$ 的 boundary condition 求得 $$ p_0 = \Big(\sum_{n=0}^{c-1}\frac{r^n}{n!} + \sum_{n=c}^{\infty}\frac{r^n}{c^{n-c}c!}\Big)^{-1}, \text{ where } r = \frac{\lambda}{\mu}, \rho = \frac{r}{c} $$ * 上式中的 $\sum_{n=c}^{\infty}\frac{r^n}{c^{n-c}c!}$ 可以再進一步化簡 $$ \begin{align} \sum_{n=c}^{\infty}\frac{r^n}{c^{n-c}c!} &= \frac{r^c}{c!} \sum_{n=c}^{\infty}\Big(\frac{r}{c}\Big)^{n-c} \\ &= \frac{r^c}{c!} \sum_{m=0}^{\infty}\Big(\frac{r}{c}\Big)^{m} \\ &= \frac{r^c}{c!}\frac{1}{1 - \rho} \end{align} $$ 因此 $p_0$ 可以再簡寫成 $$ p_0 = \Big(\frac{r^c}{c!(1 - \rho)} + \sum_{n=0}^{c-1}\frac{r^n}{n!}\Big)^{-1} $$ * M/M/c 的效能指標 * Mean queue size: 在 M/M/c 系統當中,只有 c 個 server 都滿載了的情況下,才會有開始有人排隊的現象。所以計算 M/M/c 系統的 mean queue size 時,不需要考慮系統人數 $n < c$ 時的狀況,計算起來會算 mean system size 還要容易。 M/M/c 的 mean queue size 為 $$ \begin{align} L_q &= \sum_{n=c+1}^{\infty} (n-c)p_n \\ &= \sum_{n=c+1}^{\infty} (n-c) \frac{r^n}{c^{n-c}c!} p_0 \\ &= \frac{r^c p_0}{c!} \sum_{n=c+1}^{\infty} (n-c) \rho^{n-c} \\ &= \frac{r^c p_0}{c!} \sum_{m=1}^{\infty} m \rho^m = \frac{r^c \rho p_0}{c!(1-\rho)^2} \end{align} $$ 記得要將 $p_0$ 代入才算是 closed form * 知道 $L_q$ 之後,就可以利用 Little's Law 來求取 $L$, $W_q$ 和 $W$ $$ \begin{align} & L_q = \frac{r^c \rho p_0}{c!(1-\rho)^2} \\ & \Rightarrow W_q = \frac{L_q}{\lambda} = \Big(\frac{r^c}{c!(c\mu)(1-\rho)^2}\Big)p_0 \\ & \Rightarrow W = \frac{1}{\mu} + W_q = \frac{1}{\mu} + \Big(\frac{r^c}{c!(c\mu)(1-\rho)^2}\Big)p_0 \\ & \Rightarrow L = r + L_q = r + \frac{r^c \rho p_0}{c!(1-\rho)^2} \end{align} $$ * 上面算的都只是效能指標的平均值,但有時候我們依然需要 M/M/c 那些跟時間有關的效能指標的分佈函數。這些分佈函數的求取方式跟在 M/M/1 時是差不多的,但是在步驟上會因為 M/M/c 有 c 個 server 的關係變得更複雜一點 * Waiting time: 求取方法跟 M/M/1 的情況差不多,分成一定不用等和一定要等的兩個情況討論。在這裡我們不重寫各變數的意義,請參考 [3.2.5](https://hackmd.io/Hc0O0v8CRFO5pEOxBuH3Fw?view#325-Waiting-time-distribution) 中的定義 * $t=0$ 的時候,系統沒半個人,一定是不用等的。事實上,當系統內的人數未達 c 個人的時候,都是不需要等待的 $$ \begin{align} W_q(0) &= Pr\{T_q = 0\} = Pr\{\leq c-1 \text{ in system}\} \\ &= \sum_{n=0}^{c-1} p_n = p_0 \sum_{n=0}^{c-1} \frac{r^n}{n!} \\ &= 1 - \frac{r^c p_0}{c!(1-\rho)} \end{align} $$ * 可以注意到,最後解出來的東西會是一個 1 減掉某個東西的長相。我們原本在計算的東西是 $Pr\{T_q = 0\}$ 的**機率**, 1 - 機率值就是該機率值所描述的事件的互斥事件發生的機率,也就是說 $$ Pr\{T_q = 0\} = 1 - Pr\{T_q > 0\} = 1 - \frac{r^c p_0}{c!(1-\rho)} \\ \Rightarrow Pr\{T_q > 0\} = \frac{r^c p_0}{c!(1-\rho)} $$ 這條式子稍後在計算 system time 的時候會用到 * $t > 0$ 的時候,要分成一定要等跟一定不用等的兩種狀況討論。不用等的部份就是上面算的,而一定要等的狀況,就只有在系統中人數達到 c 個人的時候才會發生 $$ \begin{align} W_q(t) &= Pr\{T_q \leq 0\} \\ &= \sum_{n=c}^{\infty} Pr\{n - c + 1 \text{ completions } \leq t |\text{arrival found n in system}\} \cdot p_n + W_q(0) \\ &= \sum_{n=c}^{\infty} \frac{r^n}{c^{n-c}c!}p_0 \cdot \int_0^t \frac{c \mu (c \mu x)^{n-c}}{(n-c)!}e^{-c \mu x} dx + W_q(0) \\ &= \frac{r^c p_0}{(c-1)!} \int_0^t \mu e^{-c \mu x}\sum_{n=c}^{\infty} \frac{(\mu r x)^{n-c}}{(n-c)!} dx + W_q(0) \\ &= \frac{r^c p_0}{(c-1)!} \int_0^t \mu e^{-\mu x (c-r)} dx + W_q(0) \\ &= \frac{r^c p_0}{(c-1)!(c-r)} \int_0^t \mu (c-r) e^{-\mu x (c-r)} dx + W_q(0) \\ &= \frac{r^c p_0}{c!(1-\rho)} [1-e^{-\mu(c-r)t}] + W_q(0) \\ &= \frac{r^c p_0}{c!(1-\rho)} [1-e^{-\mu(c-r)t}] + \Big(1 - \frac{r^c p_0}{c!(1-\rho)} \Big) \\ &= 1 - \frac{r^c p_0}{c!(1-\rho)}e^{-(c \mu - \lambda)t} \end{align} $$ * 在 M/M/c 系統當中,當某個顧客進入系統時看見有 $n$ 個人在裏面,他必須要等待到**系統裏面只剩下 $c - 1$ 個人**才會有 server 可以服務他,因此他必須等待前面 $n-(c-1)$ 個人被服務完才可以停止等待 * 在 M/M/c 系統當中,因為每個顧客的服務時間都呈現指數分佈,所以「前 $n-c+1$ 個人的服務時間加總」,就是在加總 $n-c+1$ 個指數分佈的隨機變數,也就是 Erlang-type **n-c** 的分佈 * 在把該消的消掉,把跟 $n$ 無關的項提出級數和後,為了得到 $e^{\mu r x}$ 的泰勒展開式 $\sum_{n=c}^{\infty}\frac{(\mu r x)^{n-c}}{(n-c)!}$,我們必須要把 $r^n$ 分出 $n-c$ 個乘入級數和內,所以外面剩下 $r^c$ * 為了把積分式喬成指數分佈的 PDF 的形式(這樣積分就可以不用算,直接用指數分佈的 CDF),我們必須在積分裏面多乘一個 $(c-r)$,而在外面要把他除掉 * 算完積分之後發現前面剩下的項跟 $W_q(0)$ 裏面 1 扣掉的那個東西長的一樣,所以可以把 $W_q(0)$ 代入,該消的對消掉後就得到答案 * 算出答案後發現他也是一個 1 減掉什麼東西,就如同我們剛剛在算 $W_q(0)$ 的時候一樣,我們也可以得到他的互斥事件的機率 $$ Pr\{T_q \leq t\} = 1 - Pr\{T_q > t\} = 1 - \frac{r^c p_0}{c!(1-\rho)}e^{-(c \mu - \lambda)t} \\ \Rightarrow Pr\{T_q > t\} = \frac{r^c p_0}{c!(1-\rho)}e^{-(c \mu - \lambda)t} $$ * 現在我們把剛剛算 $W_q(0)$ 和 $W_q(t)$ 時算出來的副產物給湊起來,變成一個「在一定要等的前提下,等待時間會超過 $t$ 的機率」的條件機率,會得知 $$ Pr\{T_q > t | T_q > 0\} = \frac{Pr\{T_q > t, T_q > 0\}}{Pr\{T_q > 0\}} \\ = \frac{Pr\{T_q > t\}}{Pr\{T_q > 0\}} = \frac{\frac{r^c p_0}{c!(1-\rho)}e^{-(c \mu - \lambda)t}}{\frac{r^c p_0}{c!(1-\rho)}} = e^{-(c \mu - \lambda)t} $$ * 利用這個條件機率,我們可以反過來求「在一定要等的前提下,等待時間不超過 $t$ 的機率」,也就是 $$ Pr\{T_q \leq t | T_q > 0\} = 1 - e^{-(c \mu - \lambda)t} $$ 會發現這是一個指數分佈的 CDF,因此我們可以知道,在一定要等待的前提下,等待時間不超過 $t$ 的機率是呈指數分佈的。這個特性在求取 system time 的時候會用到 * System time(待補充)
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.