Content deleted Content added
m Made the mathematical aspects of the algorithm more accessible to non-specialists. |
m Bot: http → https |
||
(5 intermediate revisions by 4 users not shown) | |||
Line 1:
In [[queueing theory]], a discipline within the mathematical [[probability theory|theory of probability]], '''Buzen's algorithm''' (or '''convolution algorithm''') is an algorithm for calculating the [[normalization constant]] G(''N'') in the [[Gordon–Newell theorem]]. This method was first proposed by [[Jeffrey P. Buzen]] in his 1971 PhD dissertation<ref name=":0">{{Cite book |last=
Performing a naïve computation of the normalizing constant requires enumeration of all states. For a closed network with ''N'' circulating customers and ''M'' service facilities, G(''N'') is the sum of <math>\tbinom{N+M-1}{M-1}</math> individual terms, with each term consisting of ''M'' factors raised to powers whose
==Problem setup==
Line 7:
Consider a closed queueing network with ''M'' service facilities and ''N'' circulating customers. Assume that the service time for a customer at service facility ''i'' is given by an [[exponentially distributed]] random variable with parameter ''μ''<sub>''i''</sub> and that, after completing service at service facility ''i'', a customer will proceed next to service facility ''j'' with probability ''p''<sub>''ij''</sub>.<ref name="gn" />
Let <math>\mathbb P(n_1,n_2,\cdots,n_M) </math> be the steady state probability that the number of customers at service facility ''i'' is equal to ''n<sub>i</sub>'' for ''i'' = 1, 2, ... , ''M .'' It follows from the [[Gordon–Newell theorem]] that
<math>\mathbb P(n_1,n_2,\cdots,n_M) = \frac{1}{\text{G}(N)}</math><math> \left( X_1 \right)^{n_1}</math><math> \left( X_2 \right)^{n_2}</math> .... <math> \left( X_M \right)^{n_M}</math>
Line 19:
<math>\mu_j X_j = \sum_{i=1}^M \mu_i X_i p_{ij}\quad\text{ for }j=1,\ldots,M.</math>
''G''(''N'') is a normalizing constant chosen so that the sum of all <math>\tbinom{N+M-1}{M-1}</math> values of <math>\mathbb P(n_1,n_2,\cdots,n_M) </math> is equal to 1. Buzen's algorithm
==Algorithm description==
Line 27:
<math> \left( X_1 \right)^{n_1}</math><math> \left( X_2 \right)^{n_2}</math> .... <math> \left( X_M \right)^{n_M}</math>. Note that this set of terms can be partitioned into two groups. The first group comprises all terms for which the exponent of <math> \left( X_M \right)</math> is greater than or equal to 1. This implies that <math> \left( X_M \right)</math> raised to the power 1 can be factored out of each of these terms.
After factoring out <math> \left( X_M \right)</math>, a surprising result emerges: the modified terms in the first group are identical to the terms used to compute the normalizing constant for the same network with one customer removed.
Next consider the second group. The exponent of ''X''<sub>''M''</sub> for every term in this group is zero. As a result, service facility ''M'' effectively disappears from all terms in this group (since it reduces in every case to a factor of 1). This leaves the total number of customers at the remaining ''M'' -1 service facilities equal to ''N''. The second group includes all possible arrangements of these N customers.
To express this
Given this definition, the sum of the terms in the second group can now be written as g(''N'', ''M'' -1).
It also follows immediately that
In addition, the normalizing constant G(''N'') in the Gordon-Newell theorem can now be re-written as g(''N'',''M'').
Since G(''N'') is equal to the combined sum of the terms in the first and second groups,
G(''N'') = g(''N'', ''M'' ) = X<sub>M</sub> g(''N'' -1,''M'' ) + g(''N'',''M'' -1)▼
This same recurrence relation clearly exists for any intermediate value of n from 1 to ''N'', and for any intermediate value of m from 1 to ''M'' . ▼
▲This same recurrence relation clearly exists for any intermediate value of ''n'' from 1 to ''N'', and for any intermediate value of ''m'' from 1 to ''M'' .
This implies g(n,m) = X<sub>m</sub> g(n-1,m) + g(n,m-1). Buzen’s algorithm is simply the iterative application of this fundamental recurrence relation, along with the following boundary conditions.▼
▲This implies g(''n,m'') = ''X<sub>m</sub>'' g(''n'' -1,''m'') + g(''n,m'' -1). Buzen’s algorithm is simply the iterative application of this fundamental recurrence relation, along with the following boundary conditions.
g(
g(''n'',1) = (''X''<sub>i</sub>)<sup>''n''</sup> for ''n'' = 0, 1, … ''N''
==Marginal distributions, expected number of customers==
The Gordon-Newell theorem enables analysts to determine the stationary probability associated with each individual state of a closed queueing network. These individual probabilities must then be added together to evaluate other important probabilities. For example P(''n<sub>i</sub>
Many of these marginal probabilities can be computed with minimal additional effort. This is easy to see for the case of P(''n<sub>i</sub>
P(''n<sub>i</sub>
This relationship can then be used to compute the [[marginal distribution]]s and [[expected value|expected]] number of customers at each service facility.
Line 67 ⟶ 69:
<math>\mathbb E(n_i) = \sum_{k=1}^N X_i^k \frac{G(N-k)}{G(N)}.</math>
These characterizations of quantities of interest in terms of the G(''n'') are also due to Buzen.<ref name="buzen-1973"
==Implementation==
It will be assumed that the ''X<sub>m</sub>'' have been computed by solving the relevant equations and are available as an input to our routine. Although g(''n,m'') is in principle a two dimensional matrix, it can be computed in a column by column fashion starting from the top of the leftmost column and running down each column to the bottom before proceeding to the next column on the right. The routine uses a single column vector ''C'' to represent the current column of ''g''.
The first loop in the algorithm below initializes the column vector C[n] so that C[0] = 1 and C(n) = 0 for n≥1. Note that C[0] remains equal to 1 throughout all subsequent iterations.
In the second loop, each successive value of C(n) for n≥1 is set equal to the corresponding value of g(''n,m)'' as the algorithm proceeds down column m. This is achieved by setting each successive value of C(n) equal to:
g(''n,m-1'') plus ''X<sub>m</sub>'' times g(''n-1,m'').
Note that g(''n,m-1'') is the previous value of C(n), and g(''n-1,m'') is the current value of C(n-1)
<syntaxhighlight lang="pascal">
Line 82 ⟶ 92:
</syntaxhighlight>
At completion, the final values of C[n] correspond to column ''
==References==
Line 88 ⟶ 98:
{{reflist}}
*[
*[
{{Queueing theory}}
|