1function [simDoc, section] = saveRoutingStrategy(self, simDoc, section, ind)
2% [SIMDOC, SECTION] = SAVEROUTINGSTRATEGY(SIMDOC, SECTION, NODEIDX)
4% Copyright (c) 2012-2026, Imperial College London
6strategyNode = simDoc.createElement(
'parameter');
7strategyNode.setAttribute(
'array',
'true');
8strategyNode.setAttribute(
'classPath',
'jmt.engine.NetStrategies.RoutingStrategy');
9strategyNode.setAttribute(
'name',
'RoutingStrategy');
14exportClasses = self.getExportableClasses();
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;
22 % Skip
classes that should not be exported to JMT
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.KCHOICES
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}.k)));
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 if sn.nodeparam{ind}{r}.withMemory
58 concStratNode3ValueNode.appendChild(simDoc.createTextNode(
'true'));
60 concStratNode3ValueNode.appendChild(simDoc.createTextNode(
'false'));
62 concStratNode3.appendChild(concStratNode3ValueNode);
63 concStratNode.appendChild(concStratNode2);
64 concStratNode.appendChild(concStratNode3);
65 case RoutingStrategy.WRROBIN
66 concStratNode = simDoc.createElement(
'subParameter');
67 concStratNode.setAttribute(
'classPath',
'jmt.engine.NetStrategies.RoutingStrategies.WeightedRoundRobinStrategy');
68 concStratNode.setAttribute(
'name',
'Weighted Round Robin');
69 concStratNode2 = simDoc.createElement(
'subParameter');
70 concStratNode2.setAttribute(
'array',
'true');
71 concStratNode2.setAttribute(
'classPath',
'jmt.engine.NetStrategies.RoutingStrategies.WeightEntry');
72 concStratNode2.setAttribute(
'name',
'WeightEntryArray');
73 for j=find(sn.connmatrix(i,:)) % linked stations
74 weight = sn.nodeparam{ind}{r}.weights(j);
75 concStratNode3 = simDoc.createElement(
'subParameter');
76 concStratNode3.setAttribute(
'classPath',
'jmt.engine.NetStrategies.RoutingStrategies.WeightEntry');
77 concStratNode3.setAttribute(
'name',
'WeightEntry');
78 concStratNode4Station = simDoc.createElement(
'subParameter');
79 concStratNode4Station.setAttribute(
'classPath',
'java.lang.String');
80 concStratNode4Station.setAttribute(
'name',
'stationName');
81 concStratNode4StationValueNode = simDoc.createElement(
'value');
82 concStratNode4StationValueNode.appendChild(simDoc.createTextNode(sprintf(
'%s',sn.nodenames{j})));
83 concStratNode4Station.appendChild(concStratNode4StationValueNode);
84 concStratNode3.appendChild(concStratNode4Station);
85 concStratNode4Weight = simDoc.createElement(
'subParameter');
86 concStratNode4Weight.setAttribute(
'classPath',
'java.lang.Integer');
87 concStratNode4Weight.setAttribute(
'name',
'weight');
88 concStratNode4WeightValueNode = simDoc.createElement(
'value');
89 concStratNode4WeightValueNode.appendChild(simDoc.createTextNode(sprintf(
'%d',weight)));
90 concStratNode4Weight.appendChild(concStratNode4WeightValueNode);
91 concStratNode3.appendChild(concStratNode4Station);
92 concStratNode3.appendChild(concStratNode4Weight);
93 concStratNode2.appendChild(concStratNode3);
95 concStratNode.appendChild(concStratNode2);
96 case RoutingStrategy.PROB
97 concStratNode = simDoc.createElement(
'subParameter');
98 concStratNode.setAttribute(
'classPath',
'jmt.engine.NetStrategies.RoutingStrategies.EmpiricalStrategy');
99 concStratNode.setAttribute(
'name', RoutingStrategy.toText(RoutingStrategy.PROB));
100 concStratNode2 = simDoc.createElement(
'subParameter');
101 concStratNode2.setAttribute(
'array',
'true');
102 concStratNode2.setAttribute(
'classPath',
'jmt.engine.random.EmpiricalEntry');
103 concStratNode2.setAttribute(
'name',
'EmpiricalEntryArray');
104 for j=find(sn.connmatrix(i,:)) % linked stations
105 probRouting = sn.rtnodes((i-1)*K+r,(j-1)*K+r);
107 concStratNode3 = simDoc.createElement(
'subParameter');
108 concStratNode3.setAttribute(
'classPath',
'jmt.engine.random.EmpiricalEntry');
109 concStratNode3.setAttribute(
'name',
'EmpiricalEntry');
110 concStratNode4Station = simDoc.createElement(
'subParameter');
111 concStratNode4Station.setAttribute(
'classPath',
'java.lang.String');
112 concStratNode4Station.setAttribute(
'name',
'stationName');
113 concStratNode4StationValueNode = simDoc.createElement(
'value');
114 concStratNode4StationValueNode.appendChild(simDoc.createTextNode(sprintf(
'%s',sn.nodenames{j})));
115 concStratNode4Station.appendChild(concStratNode4StationValueNode);
116 concStratNode3.appendChild(concStratNode4Station);
117 concStratNode4Probability = simDoc.createElement(
'subParameter');
118 concStratNode4Probability.setAttribute(
'classPath',
'java.lang.Double');
119 concStratNode4Probability.setAttribute(
'name',
'probability');
120 concStratNode4ProbabilityValueNode = simDoc.createElement(
'value');
121 concStratNode4ProbabilityValueNode.appendChild(simDoc.createTextNode(sprintf(
'%12.12f',probRouting)));
122 concStratNode4Probability.appendChild(concStratNode4ProbabilityValueNode);
123 concStratNode3.appendChild(concStratNode4Station);
124 concStratNode3.appendChild(concStratNode4Probability);
125 concStratNode2.appendChild(concStratNode3);
128 concStratNode.appendChild(concStratNode2);
130 concStratNode = simDoc.createElement(
'subParameter');
131 concStratNode.setAttribute(
'classPath',
'jmt.engine.NetStrategies.RoutingStrategies.DisabledRoutingStrategy');
132 concStratNode.setAttribute(
'name',
'Random');
134 strategyNode.appendChild(concStratNode);
135 section.appendChild(strategyNode);