Definition · The M/M/1 chainA birth-death chain with λₙ = λ for every n and μₙ = μ for every n ≥ 1. Write ρ = λ/μ, the utilisation.
μ is a rate, not a duration: a service taking 1/5 of a unit of time has μ = 5. That confusion is the single commonest way to get a queueing answer exactly upside down, and it is worth checking in the units before anything else.
Everything about this model follows from feeding two constant lists to the same function the preceding material used. The lab does not switch algorithms; it switches the rate lists. That is the claim “one chain, five readings” being kept rather than asserted.
Theorem · Geometric stationary distributionFor the M/M/1 chain with ρ < 1 on states 0, 1, 2, …, πₙ = (1 − ρ)ρⁿ, L = ρ/(1 − ρ), and P(N > k) = ρ^(k+1).
Each cut gives πₙ₊₁ = πₙ · λ/μ = πₙρ, so πₙ = π₀ρⁿ by induction.
The weights sum to Σₙ ρⁿ = 1/(1 − ρ) for ρ < 1, so π₀ = 1 − ρ. Then P(N > k) = Σ_{n>k} (1 − ρ)ρⁿ = ρ^(k+1), and L = Σ n(1 − ρ)ρⁿ is the standard geometric mean ρ/(1 − ρ). The ρ ≥ 1 case has no distribution at all, because the weights do not sum to anything finite.
□
What the truncation costs, in fractions
λ = 4, μ = 5, ρ = 4/5, chain kept to state 40
from the cut equations from sysdesign_core.mm1
ρ 4/5 4/5
π₀ 0.2000212699 1/5
L 3.99563967 4
Lq 3.19566094 16/5
W 0.99893648 1
gap in L 0.004360
ρ⁴¹ = what the untruncated chain puts above state 40 0.000106
π₀ as an exact fraction: 28 digits over 29
λ = 19, μ = 20, ρ = 19/20, chain kept to state 60
L from the chain 16.20806 closed form 19
ρ⁶¹ 0.043766
π₀ exactly 79 digits over 80
at 90 states, π₀'s denominator runs to 119 digits
Read the two L columns together. They are close at ρ = 4/5 and they are not close at ρ = 19/20, and the reason is entirely in the tail: at four fifths loaded the untruncated chain puts about one part in ten thousand above state 40, and at nineteen twentieths it puts four per cent above state 60. The mean is sensitive to that mass because the mass sits at large n, so a four-per-cent tail moves L from 19 to 16.2.
The chain's π₀ comes out as 0.2000212699 rather than 0.2 for the same reason: the truncation redistributes the lost tail over the states kept, and state 0 gets the largest share of it. That is not error in the arithmetic sense — the fraction is exact, twenty-eight digits over twenty-nine — it is the exact answer to a slightly different question. Pulling the state slider down and watching the two L columns separate is the fastest way to see the difference stop being negligible.
The tail, twice
P(N > k) on the truncated chain is a finite sum of exact fractions; on the untruncated chain it is ρ^(k+1). The page prints both and their difference. At ρ = 4/5 and forty states: 0.79997873 against 0.8 at k = 0, 0.40953721 against 0.4096 at k = 3, 0.00911800 against 0.00922337 at k = 20. The discrepancy grows with k, which is exactly where the missing tail is.
Example · ρ at least 1, and what the finite chain is thenSet λ = 5 and μ = 4. The page reports ρ = 5/4 ≥ 1 in red: there is no untruncated M/M/1 queue here at all, and the backlog grows without bound at rate 1 per unit time.
The finite chain still has a distribution, because it cannot grow past the last state. But that distribution belongs to a different model — one with a buffer — and reporting it as an M/M/1 answer would be reporting a number for a queue that has none. “Finite Buffers, Blocking and the Admitted Rate” is where the buffered model belongs, and there ρ ≥ 1 is not a problem at all.
Example · Half loaded, where the truncation genuinely is negligibleAt λ = 1, μ = 2 and thirty states, ρ = 1/2 and ρ³¹ is about 5 × 10⁻¹⁰. The chain's L is 0.99999999 against the closed form's 1, and π₀ is 0.5000000002 against 1/2.
This is the case people generalise from, and generalising from it is the mistake. The tail mass falls like ρ^N, so halving the load does not halve the error, it changes its exponent; and at ρ = 19/20 the same thirty states would be useless. The page prints the number so that you never have to reason about which case you are in.
One more thing the exact column buys. At sixty states and ρ = 19/20, π₀ is a fraction of seventy-nine digits over eighty, and at ninety states its denominator runs to a hundred and nineteen. Those are carried whole. A double could not hold them, so a decimal implementation would be storing the nearest number it had and calling it π₀ — and it would have no way to tell you that the difference between its L and the closed form's was truncation rather than rounding.