1% Debug trace
for LN(MVA) fix
2model = LayeredNetwork(
'myLayeredModel');
4P{1} = Processor(model,
'R1_Processor', 100, SchedStrategy.FCFS);
5P{2} = Processor(model,
'R2_Processor', Inf, SchedStrategy.INF);
6P{3} = Processor(model,
'R3_Processor', 2, SchedStrategy.FCFS);
7P{4} = Processor(model,
'R1A_Processor', 7, SchedStrategy.FCFS);
8P{5} = Processor(model,
'R1B_Processor', 3, SchedStrategy.FCFS);
9P{6} = Processor(model,
'R2A_Processor', 4, SchedStrategy.FCFS);
10P{7} = Processor(model,
'R2B_Processor', 5, SchedStrategy.FCFS);
12T{1} = Task(model,
'R1_Task', 100, SchedStrategy.REF).on(
P{1}).setThinkTime(Exp.fitMean(20));
13T{2} = Task(model,
'R2_Task', Inf, SchedStrategy.INF).on(
P{2}).setThinkTime(Immediate());
14T{3} = Task(model,
'R3_Task', 2, SchedStrategy.FCFS).on(
P{3}).setThinkTime(Immediate());
15T{4} = Task(model,
'R1A_Task', 7, SchedStrategy.FCFS).on(
P{4}).setThinkTime(Immediate());
16T{5} = Task(model,
'R1B_Task', 3, SchedStrategy.FCFS).on(
P{5}).setThinkTime(Immediate());
17T{6} = Task(model,
'R2A_Task', 4, SchedStrategy.FCFS).on(
P{6}).setThinkTime(Immediate());
18T{7} = Task(model,
'R2B_Task', 5, SchedStrategy.FCFS).on(
P{7}).setThinkTime(Immediate());
20E{1} = Entry(model,
'R1_Ref_Entry').on(T{1});
21E{2} = Entry(model,
'R2_Synch_A2_Entry').on(T{2});
22E{3} = Entry(model,
'R2_Synch_A5_Entry').on(T{2});
23E{4} = Entry(model,
'R3_Synch_A9_Entry').on(T{3});
24E{5} = Entry(model,
'R1A_Synch_A1_Entry').on(T{4});
25E{6} = Entry(model,
'R1A_Synch_A2_Entry').on(T{4});
26E{7} = Entry(model,
'R1A_Synch_A3_Entry').on(T{4});
27E{8} = Entry(model,
'R1B_Synch_A4_Entry').on(T{5});
28E{9} = Entry(model,
'R1B_Synch_A5_Entry').on(T{5});
29E{10} = Entry(model,
'R1B_Synch_A6_Entry').on(T{5});
30E{11} = Entry(model,
'R2A_Synch_A7_Entry').on(T{6});
31E{12} = Entry(model,
'R2A_Synch_A8_Entry').on(T{6});
32E{13} = Entry(model,
'R2A_Synch_A11_Entry').on(T{6});
33E{14} = Entry(model,
'R2B_Synch_A9_Entry').on(T{7});
34E{15} = Entry(model,
'R2B_Synch_A10_Entry').on(T{7});
35E{16} = Entry(model,
'R2B_Synch_A12_Entry').on(T{7});
37A{1} = Activity(model,
'A1_Empty', Immediate()).on(T{1}).boundTo(E{1}).synchCall(E{5},1);
38A{2} = Activity(model,
'A2_Empty', Immediate()).on(T{1}).synchCall(E{6},1);
39A{3} = Activity(model,
'A5_Empty', Immediate()).on(T{1}).synchCall(E{9},1);
40A{4} = Activity(model,
'A6_Empty', Immediate()).on(T{1}).synchCall(E{10},1);
41A{5} = Activity(model,
'A3_Empty', Immediate()).on(T{1}).synchCall(E{7},1);
42A{6} = Activity(model,
'A4_Empty', Immediate()).on(T{1}).synchCall(E{8},1);
43A{7} = Activity(model,
'E4_Empty', Immediate()).on(T{2}).boundTo(E{2});
44A{8} = Activity(model,
'A7_Empty', Immediate()).on(T{2}).synchCall(E{11},1);
45A{9} = Activity(model,
'A8_Empty', Immediate()).on(T{2}).synchCall(E{12},1);
46A{10} = Activity(model,
'A9_Empty', Immediate()).on(T{2}).synchCall(E{14},1);
47A{11} = Activity(model,
'A11_Empty', Immediate()).on(T{2}).synchCall(E{13},1).repliesTo(E{2});
48A{12} = Activity(model,
'A12_Empty', Immediate()).on(T{2}).boundTo(E{3}).synchCall(E{16},1).repliesTo(E{3});
49A{13} = Activity(model,
'A10_Empty', Immediate()).on(T{2}).synchCall(E{15},1);
50A{14} = Activity(model,
'A13', Exp.fitMean(10)).on(T{3}).boundTo(E{4}).repliesTo(E{4});
51A{15} = Activity(model,
'A1', Exp.fitMean(7)).on(T{4}).boundTo(E{5}).repliesTo(E{5});
52A{16} = Activity(model,
'A2', Exp.fitMean(4)).on(T{4}).boundTo(E{6});
53A{17} = Activity(model,
'A3', Exp.fitMean(5)).on(T{4}).boundTo(E{7}).repliesTo(E{7});
54A{18} = Activity(model,
'A2_Res_Empty', Immediate()).on(T{4}).synchCall(E{2},1).repliesTo(E{6});
55A{19} = Activity(model,
'A4', Exp.fitMean(8)).on(T{5}).boundTo(E{8}).repliesTo(E{8});
56A{20} = Activity(model,
'A5', Exp.fitMean(4)).on(T{5}).boundTo(E{9});
57A{21} = Activity(model,
'A6', Exp.fitMean(6)).on(T{5}).boundTo(E{10}).repliesTo(E{10});
58A{22} = Activity(model,
'A5_Res_Empty', Immediate()).on(T{5}).synchCall(E{3},1).repliesTo(E{9});
59A{23} = Activity(model,
'A7', Exp.fitMean(6)).on(T{6}).boundTo(E{11}).repliesTo(E{11});
60A{24} = Activity(model,
'A8', Exp.fitMean(8)).on(T{6}).boundTo(E{12}).repliesTo(E{12});
61A{25} = Activity(model,
'A11', Exp.fitMean(4)).on(T{6}).boundTo(E{13}).repliesTo(E{13});
62A{26} = Activity(model,
'A9', Exp.fitMean(4)).on(T{7}).boundTo(E{14});
63A{27} = Activity(model,
'A10', Exp.fitMean(6)).on(T{7}).boundTo(E{15}).repliesTo(E{15});
64A{28} = Activity(model,
'A12', Exp.fitMean(8)).on(T{7}).boundTo(E{16}).repliesTo(E{16});
65A{29} = Activity(model,
'A9_Res_Empty', Immediate()).on(T{7}).synchCall(E{4},1).repliesTo(E{14});
67T{1}.addPrecedence(ActivityPrecedence.Serial(A{1}, A{2}));
68T{1}.addPrecedence(ActivityPrecedence.Serial(A{3}, A{4}));
69T{2}.addPrecedence(ActivityPrecedence.Serial(A{7}, A{8}));
70T{2}.addPrecedence(ActivityPrecedence.Serial(A{10}, A{13}));
71T{4}.addPrecedence(ActivityPrecedence.Serial(A{16}, A{18}));
72T{5}.addPrecedence(ActivityPrecedence.Serial(A{20}, A{22}));
73T{7}.addPrecedence(ActivityPrecedence.Serial(A{26}, A{29}));
74T{1}.addPrecedence(ActivityPrecedence.OrFork(A{2},{A{5}, A{6}},[0.6,0.4]));
75T{2}.addPrecedence(ActivityPrecedence.AndFork(A{8},{A{9}, A{10}}));
76T{1}.addPrecedence(ActivityPrecedence.OrJoin({A{5}, A{6}}, A{3}));
77T{2}.addPrecedence(ActivityPrecedence.AndJoin({A{9}, A{13}}, A{11}));
79lnoptions = LN.defaultOptions;
81lnoptions.iter_max = 10;
82options = MVA.defaultOptions;
84solverLN = LN(model, @(model) MVA(model, options), lnoptions);
86disp(
'=== Running LN solver with tracing ===');
90 disp([
'=== Iteration ' num2str(it)
' ===']);
92 for e = 1:solverLN.nlayers
93 [results{it,e}, ~] = solverLN.analyze(it, e);
94 if ~isempty(results{it,e})
95 maxTN = max(results{it,e}.TN(:));
96 maxQN = max(results{it,e}.QN(:));
97 if maxTN > 1e-10 || maxQN > 1e-10
98 disp([
' Layer ' num2str(e)
': max(TN)=' num2str(maxTN,
'%.4e')
', max(QN)=' num2str(maxQN,
'%.4e')]);
102 solverLN.results = results;
105 if solverLN.converged(it)
106 disp([
'Converged at iteration ' num2str(it)]);
111disp([
'=== Final check: Getting AvgTable ===']);
112AvgTable = solverLN.getAvgTable();
113taskNames = {
'R1_Task',
'R2_Task',
'R3_Task',
'R1A_Task',
'R1B_Task',
'R2A_Task',
'R2B_Task'};
114for i = 1:length(taskNames)
115 idx = find(strcmp(AvgTable.Node, taskNames{i}));
117 disp([taskNames{i}
': Tput=' num2str(AvgTable.Tput(idx),
'%.6f')]);