4model = Network(
'model');
6node{1} = Delay(model,
'Delay');
7node{2} = Queue(model,
'Queue1', SchedStrategy.PS);
8jobclass{1} = ClosedClass(model,
'Class1', 1, node{1}, 0);
9jobclass{2} = ClosedClass(model,
'Class2', 3, node{1}, 0);
11node{1}.setService(
jobclass{1}, Exp.fitMean(1.0));
12node{1}.setService(
jobclass{2}, Exp.fitMean(1.0));
14node{2}.setService(
jobclass{1}, Exp(NaN)); % NaN = to be estimated
15node{2}.setService(
jobclass{2}, Exp(NaN)); % NaN = to be estimated
17P = model.initRoutingMatrix;
22%% Generate random dataset
for utilization and average arrival rate
26arvr1_samples = ones(n,1)-rand(n,1)*0.15;
27arvr2_samples = 2*ones(n,1)-rand(n,1)*0.15;
28util_samples = 0.1 * arvr1_samples + 0.3 * arvr2_samples;
29respt1_samples = 0.1./(1-util_samples);
30respt2_samples = 0.3./(1-util_samples);
31aqlen1_samples = 1 + util_samples ./ (1-util_samples);
32aqlen2_samples = 1 + util_samples ./ (1-util_samples);
35options = ParamEstimator.defaultOptions;
36options.method =
'erps';
37se = ParamEstimator(model, options);
39aql1 = SampledMetric(MetricType.QLen, ts, aqlen1_samples, node{2}); % aggregate queue-length
40aql1.setConditional(Event(EventType.ARV, node{2},
jobclass{1})); % set that
this metric
is conditional on
class-1 arrivals at node 2
42aql2 = SampledMetric(MetricType.QLen, ts, aqlen2_samples, node{2}); % aggregate queue-length
43aql2.setConditional(Event(EventType.ARV, node{2},
jobclass{2})); % set that
this metric
is conditional on
class-2 arrivals at node 2
45respT1 = SampledMetric(MetricType.RespT, ts, respt1_samples, node{2},
jobclass{1});
46respT2 = SampledMetric(MetricType.RespT, ts, respt2_samples, node{2},
jobclass{2});
53estVal = se.estimateAt(node{2}) % assigns the newly estimated parameters to the model
55%% Solve model with newly estimated parameters
57solver{end+1} = SolverMVA(model);
59AvgTable = cell(1,length(solver));
61 fprintf(1,
'SOLVER: %s\n',solver{s}.getName());
62 AvgTable{s} = solver{s}.getAvgTable();