3model = Network(
'model');
5node{1} = Delay(model,
'Delay');
6node{2} = Queue(model,
'Queue1', SchedStrategy.FCFS);
7jobclass{1} = ClosedClass(model,
'Class1', 3, node{2}, 0);
8jobclass{2} = ClosedClass(model,
'Class2', 2, node{2}, 0);
9node{2}.setNumServers(3);
11node{1}.setService(
jobclass{1}, Exp(1));
12node{1}.setService(
jobclass{2}, Exp(1));
13node{2}.setService(
jobclass{1}, Exp(1.2));
14node{2}.setService(
jobclass{2}, Erlang.fitMeanAndSCV(1.0,0.5));
16M = model.getNumberOfStations();
17K = model.getNumberOfClasses();
20P{1,1} = [0.3,0.1; 0.2,0];
21P{1,2} = [0.6,0; 0.8,0];
26[Qt,Ut,Tt] = model.getTranHandles();
27options = Solver.defaultOptions;
31options.timespan = [0,5];
32%% This part illustrates
the execution of different
solvers
33solver{1} = CTMC(model,options);
34%solver{end+1} = JMT(model,options);
35%solver{end+1} = SSA(model,options);
36solver{end+1} = FLD(model,options);
37% If
this call
is re-enabled, keep SolverMVA
's own iter_tol (1e-6): the generic
38% Solver.defaultOptions value (1e-4) stops the AMVA fixed point early.
39%mvaOptions = options; mvaOptions.iter_tol = SolverMVA.defaultOptions.iter_tol;
40%solver{end+1} = MVA(model,mvaOptions);
43sn = model.getStruct();
45disp('Prior 1: prior all on
default initialization
')
47disp('Initial state
is:
')
48[sn.space{1}(1,:),sn.space{2}(1,:)]
50 fprintf(1,'SOLVER: %s\n
',strrep(solver{s}.getName(),'Solver
',''));
51 [QNt,UNt,TNt] = solver{s}.getTranAvg(Qt,Ut,Tt);
52 fprintf('SteadyStateQLen[%s/Prior1]: %.6f\n
', strrep(solver{s}.getName(),'Solver
',''), QNt{2,1}.metric(end));
54 plot(QNt{2,1}.t,QNt{2,1}.metric,dashing{s}); hold on
57title('Prior on
default state
');
58ylabel('QLen- station 2,
class 1');
64disp('Prior 2: prior all on first found state with
the same number of jobs')
65model.initFromMarginal([0,0;4,1]);
67disp('Initial state
is:')
68[sn.space{1}(1,:),sn.space{2}(1,:)]
71 fprintf(1,
'SOLVER: %s\n',strrep(solver{s}.getName(),
'Solver',
''));
72 [QNt_marg,UNt_marg,TNt_marg] = solver{s}.getTranAvg(Qt,Ut,Tt);
73 fprintf(
'SteadyStateQLen[%s/Prior2]: %.6f\n', strrep(solver{s}.getName(),
'Solver',
''), QNt_marg{2,1}.metric(end));
75 plot(QNt_marg{2,1}.t,QNt_marg{2,1}.metric,dashing{s}); hold on
78title(
'Prior on first state with the same number of jobs');
79ylabel(
'QLen- station 2, class 1');
85disp('Prior 3: uniform prior over all states with
the same number of jobs')
86model.initFromMarginal([0,0;4,1]);
87disp('Initial states are:')
89[repmat(space{1}(1,:),size(space{2},1),1),space{2}]
90prior = node{2}.getStatePrior;
91prior = 0*prior; prior=ones(size(prior))/length(prior);
92node{2}.setStatePrior(prior);
95 %fprintf(1,
'SOLVER: %s\n',strrep(solver{s}.getName(),
'Solver',
''));
96 [QNt_unif,UNt_unif,TNt_unif] = solver{s}.getTranAvg(Qt,Ut,Tt);
97 fprintf(
'SteadyStateQLen[%s/Prior3]: %.6f\n', strrep(solver{s}.getName(),
'Solver',
''), QNt_unif{2,1}.metric(end));
99 plot(QNt_unif{2,1}.t,QNt_unif{2,1}.metric,dashing{s}); hold on
101title(
'Uniform prior on states with the same number of jobs');
102ylabel(
'QLen- station 2, class 1');
105xlim(options.timespan)
106legend('ctmc','fluid')