LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
RoutingStrategy.m
1classdef (Sealed) RoutingStrategy
2 % RoutingStrategy Enumeration of job routing policies and load balancing strategies
3 %
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.
8 %
9 % @brief Comprehensive enumeration of job routing and load balancing strategies
10 %
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)
17 %
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)
25 %
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
32 %
33 % Example:
34 % @code
35 % router.setRouting(jobClass, RoutingStrategy.PROB, [queue1, queue2], [0.7, 0.3]);
36 % loadBalancer.setRouting(jobClass, RoutingStrategy.JSQ);
37 % roundRobin.setRouting(jobClass, RoutingStrategy.RROBIN);
38 % @endcode
39 %
40 % Copyright (c) 2012-2026, Imperial College London
41 % All rights reserved.
42
43 properties (Constant)
44 RAND = 0;
45 PROB = 1;
46 RROBIN = 2;
47 WRROBIN = 3;
48 JSQ = 4;
49 FIRING = 5;
50 SQ = 6; % KCHOICES is now SQ: shortest queue of d, SQ(d)
51 RL = 7;
52 DISABLED = -1;
53 end
54
55 methods (Static, Access = public)
56
57 function type = fromText(text)
58 % TYPE = FROMTEXT(TEXT)
59 switch text
60 case 'Random'
61 type = RoutingStrategy.RAND;
62 case 'Probabilities'
63 type = RoutingStrategy.PROB;
64 case 'RoundRobin'
65 type = RoutingStrategy.RROBIN;
66 case 'WeightedRoundRobin'
67 type = RoutingStrategy.WRROBIN;
68 case 'JoinShortestQueue'
69 type = RoutingStrategy.JSQ;
70 case 'Firing'
71 type = RoutingStrategy.FIRING;
72 case 'ShortestQueueOfD'
73 type = RoutingStrategy.SQ;
74 case 'ReinforcementLearning'
75 type = RoutingStrategy.RL;
76 case 'Disabled'
77 type = RoutingStrategy.DISABLED;
78 otherwise
79 line_error(mfilename, 'Unrecognized routing strategy string.');
80 end
81 end
82
83 function id = toId(type)
84 % ID = TOID(TYPE)
85 switch 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;
104 otherwise
105 line_error(mfilename, 'Unrecognized routing strategy ID.');
106 end
107 end
108
109 function feature = toFeature(type)
110 % FEATURE = TOFEATURE(TYPE)
111 if ischar(type) || isstring(type)
112 % output.outputStrategy{r}{2} is heterogeneously typed: the
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));
122 end
123 switch 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.
139 feature = '';
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
147 feature = '';
148 otherwise
149 line_error(mfilename, 'Unrecognized routing strategy feature.');
150 end
151 end
152
153 function text = toText(type)
154 % TEXT = TOTEXT(TYPE)
155 switch type
156 case RoutingStrategy.RAND
157 text = 'Random';
158 case RoutingStrategy.PROB
159 text = 'Probabilities';
160 case RoutingStrategy.RROBIN
161 text = 'RoundRobin';
162 case RoutingStrategy.WRROBIN
163 text = 'WeightedRoundRobin';
164 case RoutingStrategy.FIRING
165 text = '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
173 text = 'Disabled';
174 otherwise
175 line_error(mfilename, 'Unrecognized routing strategy type.');
176 end
177 end
178 end
179end