LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
solver_mva_qsys_sizebased_analyzer.m
1function [Q,U,R,T,C,X,lG,runtime,totiter] = solver_mva_qsys_sizebased_analyzer(sn, options, schedType)
2% [Q,U,R,T,C,X,LG,RUNTIME,ITER] = SOLVER_MVA_QSYS_SIZEBASED_ANALYZER(SN, OPTIONS, SCHEDTYPE)
3%
4% Analyzer for M/G/1 queueing systems with size-based scheduling.
5% Supports: SRPT, PSJF, FB/LAS, LRPT, SETF
6%
7% This function handles multiclass open queueing systems with size-based
8% scheduling policies using the analytical formulas from:
9% A. Wierman and M. Harchol-Balter, "Classifying scheduling policies with
10% respect to unfairness in an M/GI/1", SIGMETRICS 2003.
11
12% Copyright (c) 2012-2026, Imperial College London
13% All rights reserved.
14
15T0 = tic;
16Q = []; U = [];
17R = []; T = [];
18C = []; X = [];
19totiter = 1;
20
21% Extract model parameters
22source_ist = sn.nodeToStation(sn.nodetype == NodeType.Source);
23queue_ist = sn.nodeToStation(sn.nodetype == NodeType.Queue);
24
25K = sn.nclasses;
26lambda = zeros(K, 1);
27mu = zeros(K, 1);
28cs = zeros(K, 1);
29
30for k = 1:K
31 lambda(k) = sn.rates(source_ist, k) * sn.visits{source_ist}(sn.stationToStateful(queue_ist), k);
32 mu(k) = sn.rates(queue_ist, k);
33 cs(k) = sqrt(sn.scv(queue_ist, k));
34end
35
36% Check for valid parameters
37if any(lambda <= 0) || any(mu <= 0)
38 line_error(mfilename, 'Invalid arrival or service rates (must be positive).');
39end
40
41% Compute total utilization
42rho = sum(lambda ./ mu);
43if rho >= 1
44 line_warning(mfilename, 'System is unstable (rho = %.4f >= 1).', rho);
45end
46
47% Call appropriate qsys function based on scheduling type
48switch schedType
49 case SchedStrategy.SRPT
50 line_debug('Using M/G/1/SRPT exact solution');
51 [W, ~] = qsys_mg1_srpt(lambda, mu, cs);
52 case SchedStrategy.PSJF
53 line_debug('Using M/G/1/PSJF exact solution');
54 [W, ~] = qsys_mg1_psjf(lambda, mu, cs);
55 case SchedStrategy.FB
56 line_debug('Using M/G/1/FB (LAS) exact solution');
57 [W, ~] = qsys_mg1_fb(lambda, mu, cs);
58 case SchedStrategy.LRPT
59 line_debug('Using M/G/1/LRPT exact solution');
60 [W, ~] = qsys_mg1_lrpt(lambda, mu, cs);
61 case SchedStrategy.SETF
62 line_debug('Using M/G/1/SETF (non-preemptive FB) exact solution');
63 [W, ~] = qsys_mg1_setf(lambda, mu, cs);
64 otherwise
65 line_error(mfilename, 'Unsupported scheduling type for size-based analyzer.');
66end
67
68% Initialize result matrices
69M = sn.nstations;
70R = zeros(M, K);
71Q = zeros(M, K);
72U = zeros(M, K);
73T = zeros(M, K);
74C = zeros(M, K);
75X = zeros(M, K);
76
77% Populate results
78for k = 1:K
79 visits = sn.visits{source_ist}(sn.stationToStateful(queue_ist), k);
80 R(queue_ist, k) = W(k) * visits;
81 T(source_ist, k) = lambda(k);
82 T(queue_ist, k) = lambda(k);
83 X(queue_ist, k) = lambda(k);
84 U(queue_ist, k) = lambda(k) / mu(k);
85 Q(queue_ist, k) = lambda(k) * W(k);
86 C(queue_ist, k) = R(queue_ist, k);
87end
88
89lG = 0;
90runtime = toc(T0);
91end