1% Finds the response times along each path leading out of start until endNode
2function ri = findPaths(sn,
P, start, endNode, r, toMerge, QN, TN, currentTime, fjclassmap, fjforkmap, nonfjmodel)
4 % Add the current response time of the parallel branch to the list, but subtract the synchronisation time
5 qLen = sum(QN(sn.nodeToStation(start), toMerge));
6 tput = sum(TN(sn.nodeToStation(start), toMerge));
7 ri = currentTime - qLen / tput;
11 for i=find(
P(start, :))
14 if ~isnan(sn.nodeToStation(i))
15 qLen = sum(QN(sn.nodeToStation(i), toMerge));
16 tput = sum(TN(sn.nodeToStation(i), toMerge));
18 if sn.nodetype(i) == NodeType.Fork
19 joinIdx = find(sn.fj(i,:));
20 s = find(fjforkmap == i & fjclassmap == r);
21 paths = ModelAdapter.findPaths(sn,
P, i, joinIdx, r, [toMerge,s], QN, TN, 0, fjclassmap, fjforkmap, nonfjmodel);
24 parallel_branches = length(paths);
25 for pow=0:(parallel_branches - 1)
26 current_sum = sum(1./sum(nchoosek(lambdai, pow + 1),2));
27 d0 = d0 + (-1)^pow * current_sum;
30 nonfjmodel.nodes{joinIdx}.setService(nonfjmodel.classes{cls}, Exp.fitMean(d0 - mean(paths)));
32 ri = [ri, ModelAdapter.findPaths(sn,
P, joinIdx, endNode, r, toMerge, QN, TN, currentTime + d0, fjclassmap, fjforkmap, nonfjmodel)];
34 ri = [ri, ModelAdapter.findPaths(sn,
P, i, endNode, r, toMerge, QN, TN, currentTime + qLen/tput, fjclassmap, fjforkmap, nonfjmodel)];