LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
lqn_bpmn_quick_test.m
1% Quick test for LN(MVA) fix
2model = LayeredNetwork('myLayeredModel');
3
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);
11
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());
19
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});
36
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});
66
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}));
78
79lnoptions = LN.defaultOptions;
80lnoptions.verbose = 0;
81lnoptions.iter_max = 50;
82options = MVA.defaultOptions;
83options.verbose = 0;
84solverLN = LN(model, @(model) MVA(model, options), lnoptions);
85AvgTable = solverLN.getAvgTable();
86
87disp('=== MATLAB LN(MVA) Task Throughputs ===');
88taskNames = {'R1_Task', 'R2_Task', 'R3_Task', 'R1A_Task', 'R1B_Task', 'R2A_Task', 'R2B_Task'};
89for i = 1:length(taskNames)
90 idx = find(strcmp(AvgTable.Node, taskNames{i}));
91 if ~isempty(idx)
92 tput = AvgTable.Tput(idx);
93 disp([taskNames{i} ': Tput=' num2str(tput, '%.6f')]);
94 end
95end
96
97disp('');
98disp('=== Full AvgTable (first 10 rows) ===');
99disp(AvgTable(1:min(10,height(AvgTable)),:));