LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
saveRoutingStrategy.m
1function [simDoc, section] = saveRoutingStrategy(self, simDoc, section, ind)
2% [SIMDOC, SECTION] = SAVEROUTINGSTRATEGY(SIMDOC, SECTION, NODEIDX)
3
4% Copyright (c) 2012-2026, Imperial College London
5% All rights reserved.
6strategyNode = simDoc.createElement('parameter');
7strategyNode.setAttribute('array', 'true');
8strategyNode.setAttribute('classPath', 'jmt.engine.NetStrategies.RoutingStrategy');
9strategyNode.setAttribute('name', 'RoutingStrategy');
10
11sn = self.getStruct;
12M = sn.nnodes;
13K = sn.nclasses;
14exportClasses = self.getExportableClasses();
15i = ind;
16% since the class switch node always outputs to a single node, it is faster
17% to translate it to RAND. Also some problems with sn.rt value otherwise.
18if sn.nodetype(i) == NodeType.ClassSwitch
19 sn.routing(i,:) = RoutingStrategy.RAND;
20end
21for r=1:K
22 % Skip classes that should not be exported to JMT
23 if ~exportClasses(r)
24 continue;
25 end
26
27 refClassNode = simDoc.createElement('refClass');
28 refClassNode.appendChild(simDoc.createTextNode(sn.classnames{r}));
29 strategyNode.appendChild(refClassNode);
30 switch sn.routing(i,r)
31 case RoutingStrategy.RAND
32 concStratNode = simDoc.createElement('subParameter');
33 concStratNode.setAttribute('classPath', 'jmt.engine.NetStrategies.RoutingStrategies.RandomStrategy');
34 concStratNode.setAttribute('name', 'Random');
35 case RoutingStrategy.RROBIN
36 concStratNode = simDoc.createElement('subParameter');
37 concStratNode.setAttribute('classPath', 'jmt.engine.NetStrategies.RoutingStrategies.RoundRobinStrategy');
38 concStratNode.setAttribute('name', 'Round Robin');
39 case RoutingStrategy.JSQ
40 concStratNode = simDoc.createElement('subParameter');
41 concStratNode.setAttribute('classPath', 'jmt.engine.NetStrategies.RoutingStrategies.ShortestQueueLengthRoutingStrategy');
42 concStratNode.setAttribute('name', 'Join the Shortest Queue (JSQ)');
43 case RoutingStrategy.SQ
44 concStratNode = simDoc.createElement('subParameter');
45 concStratNode.setAttribute('classPath', 'jmt.engine.NetStrategies.RoutingStrategies.PowerOfKRoutingStrategy');
46 concStratNode.setAttribute('name', 'Power of k');
47 concStratNode2 = simDoc.createElement('subParameter');
48 concStratNode2.setAttribute('classPath', 'java.lang.Integer');
49 concStratNode2.setAttribute('name', 'k');
50 concStratNode2ValueNode = simDoc.createElement('value');
51 concStratNode2ValueNode.appendChild(simDoc.createTextNode(sprintf('%d',sn.nodeparam{ind}{r}.d)));
52 concStratNode2.appendChild(concStratNode2ValueNode);
53 concStratNode3 = simDoc.createElement('subParameter');
54 concStratNode3.setAttribute('classPath', 'java.lang.Boolean');
55 concStratNode3.setAttribute('name', 'withMemory');
56 concStratNode3ValueNode = simDoc.createElement('value');
57 % Always false: LINE implements SQ(d) only. JMT's <withMemory>
58 % selects Anselmi & Dufour SQ(d,N), a different policy that LINE
59 % does not support.
60 concStratNode3ValueNode.appendChild(simDoc.createTextNode('false'));
61 concStratNode3.appendChild(concStratNode3ValueNode);
62 concStratNode.appendChild(concStratNode2);
63 concStratNode.appendChild(concStratNode3);
64 case RoutingStrategy.WRROBIN
65 concStratNode = simDoc.createElement('subParameter');
66 concStratNode.setAttribute('classPath', 'jmt.engine.NetStrategies.RoutingStrategies.WeightedRoundRobinStrategy');
67 concStratNode.setAttribute('name', 'Weighted Round Robin');
68 concStratNode2 = simDoc.createElement('subParameter');
69 concStratNode2.setAttribute('array', 'true');
70 concStratNode2.setAttribute('classPath', 'jmt.engine.NetStrategies.RoutingStrategies.WeightEntry');
71 concStratNode2.setAttribute('name', 'WeightEntryArray');
72 for j=find(sn.connmatrix(i,:)) % linked stations
73 weight = sn.nodeparam{ind}{r}.weights(j);
74 concStratNode3 = simDoc.createElement('subParameter');
75 concStratNode3.setAttribute('classPath', 'jmt.engine.NetStrategies.RoutingStrategies.WeightEntry');
76 concStratNode3.setAttribute('name', 'WeightEntry');
77 concStratNode4Station = simDoc.createElement('subParameter');
78 concStratNode4Station.setAttribute('classPath', 'java.lang.String');
79 concStratNode4Station.setAttribute('name', 'stationName');
80 concStratNode4StationValueNode = simDoc.createElement('value');
81 concStratNode4StationValueNode.appendChild(simDoc.createTextNode(sprintf('%s',sn.nodenames{j})));
82 concStratNode4Station.appendChild(concStratNode4StationValueNode);
83 concStratNode3.appendChild(concStratNode4Station);
84 concStratNode4Weight = simDoc.createElement('subParameter');
85 concStratNode4Weight.setAttribute('classPath', 'java.lang.Integer');
86 concStratNode4Weight.setAttribute('name', 'weight');
87 concStratNode4WeightValueNode = simDoc.createElement('value');
88 concStratNode4WeightValueNode.appendChild(simDoc.createTextNode(sprintf('%d',weight)));
89 concStratNode4Weight.appendChild(concStratNode4WeightValueNode);
90 concStratNode3.appendChild(concStratNode4Station);
91 concStratNode3.appendChild(concStratNode4Weight);
92 concStratNode2.appendChild(concStratNode3);
93 end
94 concStratNode.appendChild(concStratNode2);
95 case RoutingStrategy.PROB
96 concStratNode = simDoc.createElement('subParameter');
97 concStratNode.setAttribute('classPath', 'jmt.engine.NetStrategies.RoutingStrategies.EmpiricalStrategy');
98 concStratNode.setAttribute('name', RoutingStrategy.toText(RoutingStrategy.PROB));
99 concStratNode2 = simDoc.createElement('subParameter');
100 concStratNode2.setAttribute('array', 'true');
101 concStratNode2.setAttribute('classPath', 'jmt.engine.random.EmpiricalEntry');
102 concStratNode2.setAttribute('name', 'EmpiricalEntryArray');
103 for j=find(sn.connmatrix(i,:)) % linked stations
104 probRouting = sn.rtnodes((i-1)*K+r,(j-1)*K+r);
105 if probRouting > 0
106 concStratNode3 = simDoc.createElement('subParameter');
107 concStratNode3.setAttribute('classPath', 'jmt.engine.random.EmpiricalEntry');
108 concStratNode3.setAttribute('name', 'EmpiricalEntry');
109 concStratNode4Station = simDoc.createElement('subParameter');
110 concStratNode4Station.setAttribute('classPath', 'java.lang.String');
111 concStratNode4Station.setAttribute('name', 'stationName');
112 concStratNode4StationValueNode = simDoc.createElement('value');
113 concStratNode4StationValueNode.appendChild(simDoc.createTextNode(sprintf('%s',sn.nodenames{j})));
114 concStratNode4Station.appendChild(concStratNode4StationValueNode);
115 concStratNode3.appendChild(concStratNode4Station);
116 concStratNode4Probability = simDoc.createElement('subParameter');
117 concStratNode4Probability.setAttribute('classPath', 'java.lang.Double');
118 concStratNode4Probability.setAttribute('name', 'probability');
119 concStratNode4ProbabilityValueNode = simDoc.createElement('value');
120 concStratNode4ProbabilityValueNode.appendChild(simDoc.createTextNode(sprintf('%12.12f',probRouting)));
121 concStratNode4Probability.appendChild(concStratNode4ProbabilityValueNode);
122 concStratNode3.appendChild(concStratNode4Station);
123 concStratNode3.appendChild(concStratNode4Probability);
124 concStratNode2.appendChild(concStratNode3);
125 end
126 end
127 concStratNode.appendChild(concStratNode2);
128 otherwise
129 concStratNode = simDoc.createElement('subParameter');
130 concStratNode.setAttribute('classPath', 'jmt.engine.NetStrategies.RoutingStrategies.DisabledRoutingStrategy');
131 concStratNode.setAttribute('name', 'Random');
132 end
133 strategyNode.appendChild(concStratNode);
134 section.appendChild(strategyNode);
135end
136end