systems.builtin.stochastic.discrete.DiscreteStochasticQueue

systems.builtin.stochastic.discrete.DiscreteStochasticQueue(*args, **kwargs)

Discrete-time stochastic queue with random arrivals and service.

Models a queueing system sampled at discrete time intervals, with random arrivals and state-dependent service. Fundamental for analyzing congestion, capacity planning, and performance under uncertainty.

Queue Dynamics

Basic queue evolution: Q[k+1] = max(0, Q[k] + A[k] - S[k])

where: - Q[k]: Queue length (number in system) at time k - A[k]: Arrivals during slot k (random, ≥ 0) - S[k]: Service completions during slot k (random, ≤ Q[k]) - max(0, …): Queue cannot be negative

Linearized (around equilibrium Q̄): Q[k+1] ≈ Q[k] + (λ - μ) + w_A[k] - w_S[k]

where w_A, w_S represent arrival and service noise.

State-Space (Simplified Diffusion Approximation): Q[k+1] = Q[k] + (λ - μ)·Δt + σ_net·w[k]

where σ_net combines arrival and service variability.

Physical Interpretation

Queue Length Q[k]: - Number of customers/packets/jobs in system - Q = 0: Empty (idle server) - Large Q: Congestion (long waits)

Arrivals A[k]: - New customers entering system - Distribution: Poisson (λ parameter), binomial, general - Typical: 0-10 per slot (depends on λ·Δt)

Service S[k]: - Completions (customers leaving) - Depends on Q: Can’t serve more than present - Capacity: μ (maximum service rate)

Traffic Intensity: ρ = λ/μ

Critical parameter: - ρ < 1: Stable (queue bounded on average) - ρ = 1: Critical (marginal) - ρ > 1: Unstable (queue grows to infinity)

Key Features

Non-Negativity: Q ≥ 0 enforced via max(0, …) operation.

Stability Threshold: ρ = λ/μ determines long-run behavior.

State-Dependent Service: When Q = 0, no service possible (idle server).

Stochastic Fluctuations: Even stable queue (ρ < 1) exhibits large fluctuations.

Heavy Traffic: Near ρ = 1, queue becomes very sensitive to perturbations.

Mathematical Properties

Stability: For ρ < 1, queue has stationary distribution.

Mean Queue Length (Steady-State): Approximate (diffusion limit): E[Q] ≈ ρ/(1-ρ) (for M/M/1 analog)

Waiting Time: Little’s Law (exact): E[W] = E[Q]/λ

Average waiting time = average queue / arrival rate.

Variance: Queue length variance high near ρ = 1.

Distribution: For M/M/1 continuous analog: P(Q = n) = (1-ρ)·ρⁿ (geometric)

Discrete-time: Similar but modified.

Physical Interpretation

Arrival Rate λ: - Units: [customers/time] - Average arrivals per unit time - Typical: 0.1-10 depending on system

Service Rate μ: - Units: [customers/time] - Average service capacity - Must be μ > λ for stability

Traffic Intensity ρ = λ/μ: - Dimensionless (utilization) - ρ = 0.5: 50% utilized (stable, low wait) - ρ = 0.8: 80% utilized (moderate wait) - ρ = 0.95: 95% utilized (high wait, fragile) - ρ > 1: Overloaded (unstable)

Design Rule: Keep ρ < 0.8 for reliable operation. - Buffer for variability - Acceptable waiting times - Robustness to perturbations

State Space

State: Q ∈ ℤ₊ = {0, 1, 2, …} - Non-negative integer (count of items) - Unbounded (unless capacity limit)

Control: u (optional) - Admission control (reject arrivals) - Service rate adjustment - Server allocation

Noise: w_A, w_S - Arrival noise (Poisson fluctuations) - Service noise (randomness in completion)

Parameters

Name Type Description Default
lambda_rate float Mean arrival rate [customers/slot] - Must be positive - Typical: 0.1-10 0.8
mu_rate float Mean service rate [customers/slot] - Must be positive - Must have μ > λ for stability 1.0
sigma_arrival float Arrival noise std dev [customers/slot] - From Poisson: σ_A ≈ √λ - Can be different (overdispersion) 0.3
sigma_service float Service noise std dev [customers/slot] - Variability in service times - Typical: 0.1-1.0 0.3
dt float Time slot duration [s] 1.0

Stochastic Properties

  • System Type: NONLINEAR (max operator)
  • Noise Type: ADDITIVE (approximate)
  • State: Discrete (integer-valued ideally)
  • Stationary: If ρ < 1
  • Heavy Tails: Geometric distribution (M/M/1 analog)

Applications

1. Network Engineering: - Router queue sizing - Bandwidth provisioning - QoS guarantees

2. Call Centers: - Staffing optimization - Service level targets - Abandonment modeling

3. Manufacturing: - WIP inventory control - Buffer sizing - Throughput analysis

4. Healthcare: - ER capacity planning - Surgery scheduling - Bed management

5. Cloud Computing: - Auto-scaling triggers - Load balancing - SLA compliance

Numerical Simulation

Direct Simulation:

Q = np.zeros(N+1)
Q[0] = Q0

for k in range(N):
    A_k = np.random.poisson(lambda_rate)
    S_k = np.random.poisson(min(Q[k], mu_rate))
    Q[k+1] = max(0, Q[k] + A_k - S_k)

Issues: - Integer-valued (exact Poisson) - Max operator (non-smooth) - State-dependent service

Diffusion Approximation: For large λ, μ, treat as continuous: Q[k+1] ≈ Q[k] + (λ-μ)·Δt + σ_net·w[k]

Smoother, easier analysis.

Performance Metrics

Mean Queue Length: E[Q] (average number waiting)

Mean Waiting Time: E[W] = E[Q]/λ (Little’s Law)

Server Utilization: ρ = λ/μ (fraction time busy)

Probability of Delay: P(Q > 0) (chance of waiting)

Percentiles: P(Q ≤ q_95) = 0.95 (95th percentile)

Comparison with M/M/1

M/M/1 (Continuous-Time): - Poisson arrivals (rate λ) - Exponential service (rate μ) - Analytical formulas

Discrete Queue: - Arrivals per slot (mean λ·Δt) - Service per slot (mean μ·Δt) - Numerical/simulation

Convergence: As Δt → 0, discrete → continuous M/M/1.

Limitations

  • Single server (extend to M/M/c)
  • Infinite capacity (no buffer limit)
  • FIFO discipline (no priorities)
  • Stationary (time-invariant λ, μ)
  • Independence (no batch arrivals)

Extensions

  • M/M/c: Multiple servers
  • Finite capacity: M/M/1/K
  • Priority queues
  • Time-varying rates: λ(t), μ(t)
  • Network of queues (Jackson networks)

See Also

DiscreteAR1 : Simpler linear stochastic system DiscreteRandomWalk : No bounds (queue has Q ≥ 0)

Methods

Name Description
define_system Define discrete stochastic queue dynamics.
get_mean_queue_length Get theoretical mean queue length E[Q] ≈ ρ/(1-ρ).
get_mean_waiting_time Get mean waiting time via Little’s Law: E[W] = E[Q]/λ.
get_utilization Get server utilization (traffic intensity) ρ = λ/μ.

define_system

systems.builtin.stochastic.discrete.DiscreteStochasticQueue.define_system(
    lambda_rate=0.8,
    mu_rate=1.0,
    sigma_arrival=0.3,
    sigma_service=0.3,
    dt=1.0,
)

Define discrete stochastic queue dynamics.

Parameters

Name Type Description Default
lambda_rate float Mean arrival rate [customers/slot] - Must be positive - Typical: 0.1-10 0.8
mu_rate float Mean service rate [customers/slot] - Must be positive - Must have μ > λ for stability 1.0
sigma_arrival float Arrival noise std dev - For Poisson: σ_A = √λ - Can differ (overdispersion) 0.3
sigma_service float Service noise std dev 0.3
dt float Time slot duration [s] 1.0

Raises

Name Type Description
ValueError If λ ≤ 0, μ ≤ 0, or ρ ≥ 1
UserWarning If ρ > 0.9 (near critical, fragile)

Notes

Traffic Intensity: ρ = λ/μ

Stability: - ρ < 1: Stable (queue finite on average) - ρ ≥ 1: Unstable (queue → ∞)

Mean Queue (Approximate): E[Q] ≈ ρ/(1-ρ)

For ρ = 0.8: E[Q] ≈ 4 For ρ = 0.9: E[Q] ≈ 9 For ρ = 0.95: E[Q] ≈ 19

Design Guideline: Keep ρ < 0.8 for good performance: - Reasonable wait times - Robustness to variability - Avoid heavy traffic regime

Noise Structure:

Arrival noise: From Poisson statistics σ_A ≈ √λ (for Poisson)

Service noise: From variability σ_S depends on distribution

Net noise: σ_net = √(σ_A² + σ_S²)

Simplified Model:

This uses diffusion approximation: Q[k+1] = max(0, Q[k] + (λ-μ) + w[k])

where w[k] ~ N(0, σ_net²).

More accurate: Exact Poisson simulation (Gillespie-like).

get_mean_queue_length

systems.builtin.stochastic.discrete.DiscreteStochasticQueue.get_mean_queue_length(
)

Get theoretical mean queue length E[Q] ≈ ρ/(1-ρ).

Returns

Name Type Description
float Mean queue length (steady-state)

Notes

Approximate formula (diffusion/M/M/1 analog).

Examples

>>> queue = DiscreteStochasticQueue(lambda_rate=0.8, mu_rate=1.0)
>>> E_Q = queue.get_mean_queue_length()
>>> print(f"Mean queue: {E_Q:.2f}")

get_mean_waiting_time

systems.builtin.stochastic.discrete.DiscreteStochasticQueue.get_mean_waiting_time(
)

Get mean waiting time via Little’s Law: E[W] = E[Q]/λ.

Returns

Name Type Description
float Mean waiting time [slots]

Examples

>>> queue = DiscreteStochasticQueue(lambda_rate=0.8, mu_rate=1.0)
>>> E_W = queue.get_mean_waiting_time()
>>> print(f"Mean wait: {E_W:.2f} slots")

get_utilization

systems.builtin.stochastic.discrete.DiscreteStochasticQueue.get_utilization()

Get server utilization (traffic intensity) ρ = λ/μ.

Returns

Name Type Description
float Utilization (0 to 1)

Examples

>>> queue = DiscreteStochasticQueue(lambda_rate=0.8, mu_rate=1.0)
>>> util = queue.get_utilization()
>>> print(f"Utilization: {util:.1%}")