LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
qsys_mapmc.m
1function result = qsys_mapmc(D0, D1, mu, c, varargin)
2% QSYS_MAPMC Analyzes a MAP/M/c queue using Q-MAM.
3%
4% RESULT = QSYS_MAPMC(D0, D1, MU, C) analyzes a MAP/M/c queue with:
5% D0 - MAP hidden transition matrix (n x n)
6% D1 - MAP arrival transition matrix (n x n)
7% MU - Exponential service rate
8% C - Number of servers
9%
10% RESULT = QSYS_MAPMC(..., 'maxNumComp', N) sets max queue length probs (default 500)
11%
12% Returns a struct with fields:
13% meanQueueLength - Mean number of customers in system
14% meanWaitingTime - Mean waiting time in queue
15% meanSojournTime - Mean sojourn time (waiting + service)
16% utilization - Server utilization (per server)
17% queueLengthDist - Queue length distribution P(Q=n)
18% waitingTimePH - Struct with alpha and T for waiting time PH
19% analyzer - Name of analyzer used
20%
21% See also Q_CT_MAP_M_C, qsys_mapph1, qsys_mapm1
22
23% Parse optional arguments
24p = inputParser;
25addParameter(p, 'maxNumComp', 500);
26parse(p, varargin{:});
27
28maxNumComp = p.Results.maxNumComp;
29
30% Call Q-MAM solver
31[ql, wait_alpha, Smat] = Q_CT_MAP_M_C(D0, D1, mu, c, 'MaxNumComp', maxNumComp);
32
33% Compute arrival rate from MAP
34theta = ctmc_solve(D0 + D1);
35lambda = sum(theta * D1);
36
37% Compute utilization
38rho = lambda / (mu * c);
39
40% Compute mean queue length from distribution
41meanQL = 0;
42for i = 1:length(ql)
43 meanQL = meanQL + (i - 1) * ql(i);
44end
45
46% Compute mean waiting time from PH representation
47if ~isempty(wait_alpha) && ~isempty(Smat)
48 % Mean of PH distribution = alpha * (-T)^{-1} * e
49 nonzeroIdx = find(wait_alpha > 0);
50 if ~isempty(nonzeroIdx)
51 wait_alpha_nz = wait_alpha(nonzeroIdx);
52 negSinv = inv(-Smat);
53 meanWT = wait_alpha_nz * negSinv * ones(size(Smat, 1), 1);
54 else
55 meanWT = 0;
56 end
57else
58 meanWT = 0;
59end
60
61% Mean service time
62meanService = 1.0 / mu;
63
64% Mean sojourn time = waiting + service
65meanST = meanWT + meanService;
66
67% Build result struct
68result = struct();
69result.meanQueueLength = meanQL;
70result.meanWaitingTime = meanWT;
71result.meanSojournTime = meanST;
72result.utilization = rho;
73result.queueLengthDist = ql;
74result.waitingTimePH = struct('alpha', wait_alpha, 'T', Smat);
75result.analyzer = sprintf('Q-MAM:MAP/M/%d', c);
76
77end