1% Debug script
for tut10 - compare layer results with Python
3model = LayeredNetwork(
'ClientDBSystem');
6P1 = Processor(model,
'ClientProcessor', 1, SchedStrategy.PS);
7P2 = Processor(model,
'DBProcessor', 1, SchedStrategy.PS);
10T1 = Task(model,
'ClientTask', 10, SchedStrategy.REF).on(P1);
11T1.setThinkTime(Exp.fitMean(5.0));
12T2 = Task(model,
'DBTask', Inf, SchedStrategy.INF).on(P2);
15E1 = Entry(model,
'ClientEntry').on(T1);
16E2 = Entry(model,
'DBEntry').on(T2);
19A1 = Activity(model,
'ClientActivity', Exp.fitMean(1.0)).on(T1);
20A1.boundTo(E1).synchCall(E2, 2.5);
22A2 = Activity(model,
'DBActivity', Exp.fitMean(0.8)).on(T2);
23A2.boundTo(E2).repliesTo(E2);
25% Create solver and build layers
26solver = SolverLN(model, @(m) SolverMVA(m));
29fprintf(
'\n=== Number of layers: %d ===\n', solver.nlayers);
30fprintf(
'=== Ensemble size: %d ===\n\n', length(solver.ensemble));
32for e = 1:length(solver.ensemble)
33 layer = solver.ensemble{e};
37 fprintf(
'\n--- Layer %d: %s ---\n', e-1, layer.name);
38 fprintf(
' clientIdx: %d\n', layer.attribute.clientIdx);
39 fprintf(
' serverIdx: %d\n', layer.attribute.serverIdx);
40 fprintf(
' ishost: %d\n', isfield(layer.attribute,
'ishost') && layer.attribute.ishost);
45 fprintf(
'\n Nodes (%d):\n', length(
nodes));
46 for i = 1:length(
nodes)
47 fprintf(
' [%d] %s (%s)\n', i,
nodes{i}.name,
class(
nodes{i}));
50 fprintf(
'\n Classes (%d):\n', length(
classes));
53 if isa(cls,
'ClosedClass')
58 fprintf(' %s: pop=%g\n', cls.name, pop);
63fprintf('\n\n=== Running solver iteration 1 ===\n');
66% Print results for each layer
67for e = 1:length(solver.ensemble)
68 layer = solver.ensemble{e};
72 result = solver.results{end, e};
77 fprintf(
'\n--- Layer %d (%s) results ---\n', e-1, layer.name);
85 fprintf(
' RN (response times per visit):\n');
89 fprintf(' %s, %s: RN=%.6f\n',
nodes{i}.name,
classes{j}.name, RN(i,j));
94 fprintf(
' WN (residence times):\n');
98 fprintf(' %s, %s: WN=%.6f\n',
nodes{i}.name,
classes{j}.name, WN(i,j));
105fprintf(
'\n\n=== Activity servt/residt ===\n');
108 aidx = lqn.ashift + a;
109 if solver.servt(aidx) > 0 || solver.residt(aidx) > 0
110 fprintf(
' Activity %d (aidx=%d): servt=%.6f, residt=%.6f\n', a, aidx, solver.servt(aidx), solver.residt(aidx));
114fprintf(
'\n=== Call servt/residt ===\n');
115for cidx = 1:lqn.ncalls
116 if solver.callservt(cidx) > 0 || solver.callresidt(cidx) > 0
117 fprintf(
' Call %d: callservt=%.6f, callresidt=%.6f\n', cidx, solver.callservt(cidx), solver.callresidt(cidx));
121fprintf(
'\n=== Entry servt ===\n');
122for e = 1:lqn.nentries
123 eidx = lqn.eshift + e;
124 if solver.entry_servt(eidx) > 0
125 fprintf(
' Entry %d (eidx=%d): entry_servt=%.6f\n', e, eidx, solver.entry_servt(eidx));