2%% Example: ERPS estimation on an open network
3% Copyright (c) 2012-2026, Imperial College London
7model = Network(
'model');
9node{1} = Delay(model,
'Delay');
10node{2} = Queue(model,
'Queue1', SchedStrategy.PS);
11node{3} = Source(model,
'Source');
12node{4} = Sink(model,
'Sink');
14jobclass{1} = OpenClass(model,
'Class1', 0);
15jobclass{2} = OpenClass(model,
'Class2', 0);
17node{1}.setService(
jobclass{1}, HyperExp(0.5, 3.0, 10.0));
18node{1}.setService(
jobclass{2}, HyperExp(0.5, 2.0, 8.0));
19node{2}.setService(
jobclass{1}, Exp(NaN)); % NaN = to be estimated
20node{2}.setService(
jobclass{2}, Exp(NaN)); % NaN = to be estimated
21node{3}.setArrival(
jobclass{1}, Exp(0.1));
22node{3}.setArrival(
jobclass{2}, Exp(0.05));
24P = model.initRoutingMatrix;
25P{1,1} = [0,1,0,0; 0,0,0,1; 1,0,0,0; 0,0,0,0];
26P{2,2} = [0,1,0,0; 0,0,0,1; 1,0,0,0; 0,0,0,0];
29%% Generate synthetic dataset
32arvr1_samples = ones(n,1) - rand(n,1)*0.15;
33arvr2_samples = 2*ones(n,1) - rand(n,1)*0.15;
34util_samples = 0.1*arvr1_samples + 0.3*arvr2_samples;
35respt1_samples = 0.1./(1 - util_samples);
36respt2_samples = 0.3./(1 - util_samples);
37aqlen1_samples = 1 + util_samples./(1 - util_samples);
38aqlen2_samples = 1 + util_samples./(1 - util_samples);
40%% Create SampledMetric objects
41options = ParamEstimator.defaultOptions;
42options.method =
'erps';
43se = ParamEstimator(model, options);
45aql1 = SampledMetric(MetricType.QLen, ts, aqlen1_samples, node{2});
46aql1.setConditional(Event(EventType.ARV, node{2},
jobclass{1}));
48aql2 = SampledMetric(MetricType.QLen, ts, aqlen2_samples, node{2});
49aql2.setConditional(Event(EventType.ARV, node{2},
jobclass{2}));
51respT1 = SampledMetric(MetricType.RespT, ts, respt1_samples, node{2},
jobclass{1});
52respT2 = SampledMetric(MetricType.RespT, ts, respt2_samples, node{2},
jobclass{2});
59estVal = se.estimateAt(node{2})
62solver{1} = SolverMVA(model);
63fprintf(1,
'\nSOLVER: %s\n', solver{1}.getName());
64AvgTable{1} = solver{1}.getAvgTable();