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.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'));
59 else
60 concStratNode3ValueNode.appendChild(simDoc.createTextNode('false'));
61 end
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);
94 end
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);
106 if probRouting > 0
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);
126 end
127 end
128 concStratNode.appendChild(concStratNode2);
129 otherwise
130 concStratNode = simDoc.createElement('subParameter');
131 concStratNode.setAttribute('classPath', 'jmt.engine.NetStrategies.RoutingStrategies.DisabledRoutingStrategy');
132 concStratNode.setAttribute('name', 'Random');
133 end
134 strategyNode.appendChild(concStratNode);
135 section.appendChild(strategyNode);
136end
137end