LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
estimator_qmle.m
1function estVal = estimator_qmle(self, nodes)
2% ESTIMATORQMLE Quick Maximum Likelihood Estimation
3% Estimates service demands from mean queue-lengths using the QMLE
4% closed-form formula. Supports closed, open, and mixed queueing networks.
5% For open classes, uses the open-to-closed equivalence Z_r = N_r / lambda_r.
6%
7% Copyright (c) 2012-2026, Imperial College London
8% All rights reserved.
9% This code is released under the 3-Clause BSD License.
10
11sn = self.model.getStruct;
12
13if ~iscell(nodes)
14 nodes = {nodes};
15end
16
17R = sn.nclasses;
18M = length(nodes);
19
20% Get effective population for open classes
21if isfield(self.options, 'openPopulation') && ~isempty(self.options.openPopulation)
22 Nopen = self.options.openPopulation;
23else
24 Nopen = 100;
25end
26
27% Determine population per class
28N = zeros(1, R);
29for r = 1:R
30 if sn.njobs(r) < Inf
31 N(r) = sn.njobs(r);
32 else
33 N(r) = Nopen;
34 end
35end
36
37% Extract think times: from Delay nodes for closed classes,
38% from Source arrival rates for open classes (Z_r = N_r / lambda_r)
39Z = zeros(1, R);
40allNodes = self.model.getNodes;
41for n = 1:length(allNodes)
42 if isa(allNodes{n}, 'Delay')
43 svcProc = allNodes{n}.getService;
44 for r = 1:R
45 if sn.njobs(r) < Inf
46 Z(r) = Z(r) + svcProc{r}.getMean();
47 end
48 end
49 elseif isa(allNodes{n}, 'Source')
50 svcProc = allNodes{n}.getService;
51 for r = 1:R
52 if sn.njobs(r) == Inf
53 lambda_r = 1 / svcProc{r}.getMean();
54 Z(r) = N(r) / lambda_r;
55 end
56 end
57 end
58end
59
60% extract mean queue-lengths Q(M,R)
61Q = zeros(M, R);
62for n = 1:M
63 for r = 1:R
64 qlData = self.getQLen(nodes{n}, self.model.classes{r});
65 if isempty(qlData)
66 error('Queue-length data for node %s in class %d is missing.', nodes{n}.name, r);
67 end
68 if iscell(qlData)
69 qlData = qlData{1};
70 end
71 Q(n, r) = mean(qlData.data);
72 end
73end
74
75estVal = infer_qmle(Q, N, Z);
76
77end
Definition mmt.m:124