1classdef (Sealed) RoutingStrategy
2 % RoutingStrategy Enumeration of job routing policies and load balancing strategies
4 % RoutingStrategy defines constants
for routing policies that determine how
5 % jobs are directed from one node to another in queueing networks. These
6 % strategies control load distribution, traffic balancing, and path selection
7 % throughout the network topology.
9 % @brief Comprehensive enumeration of job routing and load balancing strategies
11 % Key routing categories:
12 % - Probabilistic: RAND, PROB (random and probability-based routing)
13 % - Load balancing: JSQ, SQ (queue length-based decisions)
14 % - Round-robin: RROBIN, WRROBIN (cyclic and weighted distribution)
15 % - Advanced: RL, FIRING (learning and event-based routing)
16 % - Control: DISABLED (no routing
for specific classes)
18 % Common routing strategies:
19 % - RAND: Random routing (equal probability to all destinations)
20 % - PROB: Probabilistic routing (user-specified probabilities)
21 % - RROBIN: Round-robin (cyclic distribution)
22 % - JSQ: Join Shortest Queue (dynamic load balancing)
23 % - SQ: Shortest queue of d, SQ(d) (formerly KCHOICES)
24 % - DISABLED: No routing (class blocked at this node)
26 % RoutingStrategy
is used in:
27 % - Node output section configuration
28 % - Network topology specification
29 % - Load balancing implementation
30 % - Traffic distribution control
31 % - Router and dispatcher configuration
35 % router.setRouting(jobClass, RoutingStrategy.PROB, [queue1, queue2], [0.7, 0.3]);
36 % loadBalancer.setRouting(jobClass, RoutingStrategy.JSQ);
37 % roundRobin.setRouting(jobClass, RoutingStrategy.RROBIN);
40 % Copyright (c) 2012-2026, Imperial College London
41 % All rights reserved.
50 SQ = 6; % KCHOICES
is now SQ: shortest queue of d, SQ(d)
55 methods (Static, Access =
public)
57 function type = fromText(text)
58 % TYPE = FROMTEXT(TEXT)
61 type = RoutingStrategy.RAND;
63 type = RoutingStrategy.PROB;
65 type = RoutingStrategy.RROBIN;
66 case 'WeightedRoundRobin'
67 type = RoutingStrategy.WRROBIN;
68 case 'JoinShortestQueue'
69 type = RoutingStrategy.JSQ;
71 type = RoutingStrategy.FIRING;
72 case 'ShortestQueueOfD'
73 type = RoutingStrategy.SQ;
74 case 'ReinforcementLearning'
75 type = RoutingStrategy.RL;
77 type = RoutingStrategy.DISABLED;
79 line_error(mfilename, 'Unrecognized routing strategy
string.');
83 function
id = toId(type)
86 case RoutingStrategy.RAND
87 id = RoutingStrategy.RAND;
88 case RoutingStrategy.PROB
89 id = RoutingStrategy.PROB;
90 case RoutingStrategy.RROBIN
91 id = RoutingStrategy.RROBIN;
92 case RoutingStrategy.WRROBIN
93 id = RoutingStrategy.WRROBIN;
94 case RoutingStrategy.FIRING
95 id = RoutingStrategy.FIRING;
96 case RoutingStrategy.JSQ
97 id = RoutingStrategy.JSQ;
98 case RoutingStrategy.SQ
99 id = RoutingStrategy.SQ;
100 case RoutingStrategy.RL
101 id = RoutingStrategy.RL;
102 case RoutingStrategy.DISABLED
103 id = RoutingStrategy.DISABLED;
105 line_error(mfilename, 'Unrecognized routing strategy ID.');
109 function feature = toFeature(type)
110 % FEATURE = TOFEATURE(TYPE)
111 if ischar(type) || isstring(type)
113 % section constructors (Linkage, Forker, Firing) leave the
114 % numeric
id there,
while Node.setRouting and Network.link
115 % overwrite it with RoutingStrategy.toText(...). Accept both.
116 % Without
this, getUsedLangFeatures errored on every node whose
117 % routing had been assigned; its enclosing TRY swallowed the
118 % error, so no model ever reported a routing capability and the
119 % solver support gate never saw one (state-dependent routing
120 % passed silently to solvers that cannot represent it).
121 type = RoutingStrategy.fromText(
char(type));
124 case RoutingStrategy.RAND
125 feature =
'RoutingStrategy_RAND';
126 case RoutingStrategy.PROB
127 feature =
'RoutingStrategy_PROB';
128 case RoutingStrategy.RROBIN
129 feature =
'RoutingStrategy_RROBIN';
130 case RoutingStrategy.WRROBIN
131 feature =
'RoutingStrategy_WRROBIN';
132 case RoutingStrategy.FIRING
133 % FIRING (Petri-net transition output) and DISABLED (
class
134 % not routed at
this node) are internal markers, not
135 % user-selectable routing capabilities, so they
map to no
136 % registry name and are skipped by setUsedLangFeature. Same
137 % convention as jar RoutingStrategy.toFeature, which
138 % returns "" for both.
140 case RoutingStrategy.JSQ
141 feature =
'RoutingStrategy_JSQ';
142 case RoutingStrategy.SQ
143 feature =
'RoutingStrategy_SQ';
144 case RoutingStrategy.RL
145 feature =
'RoutingStrategy_RL';
146 case RoutingStrategy.DISABLED
149 line_error(mfilename,
'Unrecognized routing strategy feature.');
153 function text = toText(type)
154 % TEXT = TOTEXT(TYPE)
156 case RoutingStrategy.RAND
158 case RoutingStrategy.PROB
159 text =
'Probabilities';
160 case RoutingStrategy.RROBIN
162 case RoutingStrategy.WRROBIN
163 text =
'WeightedRoundRobin';
164 case RoutingStrategy.FIRING
166 case RoutingStrategy.JSQ
167 text =
'JoinShortestQueue';
168 case RoutingStrategy.SQ
169 text =
'ShortestQueueOfD';
170 case RoutingStrategy.RL
171 text =
'ReinforcementLearning';
172 case RoutingStrategy.DISABLED
175 line_error(mfilename,
'Unrecognized routing strategy type.');