LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
debug_tut10.m
1% Debug script for tut10 - compare layer results with Python
2clear;
3model = LayeredNetwork('ClientDBSystem');
4
5% Create processors
6P1 = Processor(model, 'ClientProcessor', 1, SchedStrategy.PS);
7P2 = Processor(model, 'DBProcessor', 1, SchedStrategy.PS);
8
9% Create tasks
10T1 = Task(model, 'ClientTask', 10, SchedStrategy.REF).on(P1);
11T1.setThinkTime(Exp.fitMean(5.0));
12T2 = Task(model, 'DBTask', Inf, SchedStrategy.INF).on(P2);
13
14% Create entries
15E1 = Entry(model, 'ClientEntry').on(T1);
16E2 = Entry(model, 'DBEntry').on(T2);
17
18% Define activities
19A1 = Activity(model, 'ClientActivity', Exp.fitMean(1.0)).on(T1);
20A1.boundTo(E1).synchCall(E2, 2.5);
21
22A2 = Activity(model, 'DBActivity', Exp.fitMean(0.8)).on(T2);
23A2.boundTo(E2).repliesTo(E2);
24
25% Create solver and build layers
26solver = SolverLN(model, @(m) SolverMVA(m));
27solver.buildLayers();
28
29fprintf('\n=== Number of layers: %d ===\n', solver.nlayers);
30fprintf('=== Ensemble size: %d ===\n\n', length(solver.ensemble));
31
32for e = 1:length(solver.ensemble)
33 layer = solver.ensemble{e};
34 if isempty(layer)
35 continue;
36 end
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);
41
42 nodes = layer.nodes;
43 classes = layer.classes;
44
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}));
48 end
49
50 fprintf('\n Classes (%d):\n', length(classes));
51 for j = 1:length(classes)
52 cls = classes{j};
53 if isa(cls, 'ClosedClass')
54 pop = cls.population;
55 else
56 pop = NaN;
57 end
58 fprintf(' %s: pop=%g\n', cls.name, pop);
59 end
60end
61
62% Run one iteration
63fprintf('\n\n=== Running solver iteration 1 ===\n');
64solver.iterate();
65
66% Print results for each layer
67for e = 1:length(solver.ensemble)
68 layer = solver.ensemble{e};
69 if isempty(layer)
70 continue;
71 end
72 result = solver.results{end, e};
73 if isempty(result)
74 continue;
75 end
76
77 fprintf('\n--- Layer %d (%s) results ---\n', e-1, layer.name);
78
79 RN = result.RN;
80 WN = result.WN;
81
82 nodes = layer.nodes;
83 classes = layer.classes;
84
85 fprintf(' RN (response times per visit):\n');
86 for i = 1:size(RN, 1)
87 for j = 1:size(RN, 2)
88 if RN(i,j) > 0
89 fprintf(' %s, %s: RN=%.6f\n', nodes{i}.name, classes{j}.name, RN(i,j));
90 end
91 end
92 end
93
94 fprintf(' WN (residence times):\n');
95 for i = 1:size(WN, 1)
96 for j = 1:size(WN, 2)
97 if WN(i,j) > 0
98 fprintf(' %s, %s: WN=%.6f\n', nodes{i}.name, classes{j}.name, WN(i,j));
99 end
100 end
101 end
102end
103
104% Print servt/residt
105fprintf('\n\n=== Activity servt/residt ===\n');
106lqn = solver.lqn;
107for a = 1:lqn.nacts
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));
111 end
112end
113
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));
118 end
119end
120
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));
126 end
127end
Definition mmt.m:92