LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
example_infer_erps_open.m
1clear node jobclass solver AvgTable
2%% Example: ERPS estimation on an open network
3% Copyright (c) 2012-2026, Imperial College London
4% All rights reserved.
5
6%% define model
7model = Network('model');
8
9node{1} = Delay(model, 'Delay');
10node{2} = Queue(model, 'Queue1', SchedStrategy.PS);
11node{3} = Source(model, 'Source');
12node{4} = Sink(model, 'Sink');
13
14jobclass{1} = OpenClass(model, 'Class1', 0);
15jobclass{2} = OpenClass(model, 'Class2', 0);
16
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));
23
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];
27model.link(P);
28
29%% Generate synthetic dataset
30n = 1000;
31ts = 1:n;
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);
39
40%% Create SampledMetric objects
41options = ParamEstimator.defaultOptions;
42options.method = 'erps';
43se = ParamEstimator(model, options);
44
45aql1 = SampledMetric(MetricType.QLen, ts, aqlen1_samples, node{2});
46aql1.setConditional(Event(EventType.ARV, node{2}, jobclass{1}));
47
48aql2 = SampledMetric(MetricType.QLen, ts, aqlen2_samples, node{2});
49aql2.setConditional(Event(EventType.ARV, node{2}, jobclass{2}));
50
51respT1 = SampledMetric(MetricType.RespT, ts, respt1_samples, node{2}, jobclass{1});
52respT2 = SampledMetric(MetricType.RespT, ts, respt2_samples, node{2}, jobclass{2});
53
54se.addSamples(aql1);
55se.addSamples(aql2);
56se.addSamples(respT1);
57se.addSamples(respT2);
58se.interpolate();
59estVal = se.estimateAt(node{2})
60
61%% Solve model
62solver{1} = SolverMVA(model);
63fprintf(1, '\nSOLVER: %s\n', solver{1}.getName());
64AvgTable{1} = solver{1}.getAvgTable();
65AvgTable{1}