LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
qsys_mxm1.m
1function [W, Wq, U, Q] = qsys_mxm1(lambda_batch, mu, E_X, E_X2_or_Var_X, varargin)
2% QSYS_MXM1 - MX/M/1 queue with batch arrivals
3%
4% [W, Wq, U, Q] = QSYS_MXM1(LAMBDA_BATCH, MU, E_X, E_X2)
5% [W, Wq, U, Q] = QSYS_MXM1(LAMBDA_BATCH, MU, BATCH_SIZES, PMF)
6%
7% Analytical solution for MX/M/1 queueing system with batch Markovian arrivals
8% and exponential service.
9%
10% Input formats:
11% 1. Moment-based: qsys_mxm1(lambda_batch, mu, E_X, E_X2)
12% - lambda_batch: Batch arrival rate
13% - mu: Service rate
14% - E_X: Mean batch size
15% - E_X2: Second moment of batch size
16%
17% 2. PMF-based: qsys_mxm1(lambda_batch, mu, batch_sizes, pmf)
18% - lambda_batch: Batch arrival rate
19% - mu: Service rate
20% - batch_sizes: Array of batch sizes (e.g., [1, 2, 4, 8])
21% - pmf: Probability mass function for batch sizes
22%
23% 3. Variance-based: qsys_mxm1(lambda_batch, mu, E_X, Var_X, 'variance')
24% - lambda_batch: Batch arrival rate
25% - mu: Service rate
26% - E_X: Mean batch size
27% - Var_X: Variance of batch size
28% - 'variance': Flag to indicate variance mode
29%
30% Outputs:
31% W - Mean time in system
32% Wq - Mean waiting time in queue
33% U - Server utilization
34% Q - Mean queue length (including service)
35%
36% The formula accounts for both queueing delay and internal batch delay:
37% Wq = rho/(mu*(1-rho)) + (E[X²] - E[X])/(2*mu*E[X]*(1-rho))
38% ^M/M/1 term ^Internal batch delay
39%
40% Copyright (c) 2012-2026, Imperial College London
41% All rights reserved.
42
43% Determine which input format is used
44if nargin >= 5 && ischar(varargin{1}) && strcmpi(varargin{1}, 'variance')
45 % Format 3: Variance-based
46 E_X = E_X;
47 Var_X = E_X2_or_Var_X;
48 E_X2 = Var_X + E_X^2;
49elseif nargin == 4 && isvector(E_X) && length(E_X) > 1
50 % Format 2: PMF-based (E_X is actually batch_sizes, E_X2_or_Var_X is pmf)
51 batch_sizes = E_X;
52 pmf = E_X2_or_Var_X;
53
54 % Validate inputs
55 if length(batch_sizes) ~= length(pmf)
56 line_error(mfilename, 'Batch sizes and PMF must have the same length');
57 end
58
59 % Normalize PMF
60 pmf = pmf / sum(pmf);
61
62 % Compute moments
63 E_X = sum(batch_sizes .* pmf);
64 E_X2 = sum(batch_sizes.^2 .* pmf);
65else
66 % Format 1: Moment-based (default)
67 E_X2 = E_X2_or_Var_X;
68end
69
70% Compute effective job arrival rate
71lambda = lambda_batch * E_X;
72
73% Compute utilization
74rho = lambda / mu;
75
76% Check stability condition
77if rho >= 1
78 line_error(mfilename, sprintf('System is unstable: rho = %.6f >= 1', rho));
79end
80
81% Mean waiting time in queue includes:
82% 1. M/M/1 queueing delay: rho/(mu*(1-rho))
83% 2. Internal batch delay: (E[X²] - E[X])/(2*mu*E[X]*(1-rho))
84Wq = rho / (mu * (1 - rho)) + (E_X2 - E_X) / (2 * mu * E_X * (1 - rho));
85
86% Mean time in system
87W = Wq + 1/mu;
88
89% Server utilization
90U = rho;
91
92% Mean queue length (Little's Law)
93Q = lambda * W;
94
95end