1classdef OpenClass < JobClass
2 % OpenClass Job
class for external arrivals with infinite population
4 % OpenClass represents a job
class where jobs arrive from an external source
5 % with potentially infinite population. Jobs enter the network through a
6 % Source node, traverse the network according to routing probabilities,
7 % and exit through a Sink node. Open
classes are essential
for modeling
8 % systems with external arrival streams.
10 % @brief Job
class for modeling external arrivals with infinite population
12 % Key characteristics:
13 % - Infinite external population
14 % - Jobs arrive from Source
nodes
15 % - Jobs exit through Sink
nodes
16 % - Variable network population over time
17 % - Arrival rate determines load intensity
18 % - Priority-based service differentiation
20 % Open
class features:
21 % - External arrival process modeling
22 % - Unlimited population size
23 % - Dynamic network population
24 % - Priority assignment for service
25 % - Integration with routing strategies
26 % - Performance metrics per class
28 % OpenClass
is used for:
29 % - Web server request modeling
30 % - Call center customer arrivals
31 % - Manufacturing job arrivals
32 % - Network packet flows
33 % - Service request streams
37 % model = Network('OpenSystem');
38 % source = Source(model, 'Arrivals');
39 % sink = Sink(model, 'Departures');
40 % job_class = OpenClass(model, 'WebRequests', 1); % Priority 1
41 % source.setArrival(job_class, Exp(2.0)); % Poisson arrivals, rate 2
44 % Copyright (c) 2012-2026, Imperial College London
45 % All rights reserved.
50 function self = OpenClass(model, name, prio, deadline)
51 % OPENCLASS Create an open job class instance
53 % @brief Creates an OpenClass for external arrival modeling
54 % @param model Network model to add the open class to
55 % @param name String identifier for the job class
56 % @param prio Optional priority level (default: 0, higher = more priority)
57 % @param deadline Optional relative deadline from arrival (default: Inf, no deadline)
58 % @return self OpenClass instance ready for arrival specification
60 self@JobClass(JobClassType.OPEN, name);
67 if model.isMatlabNative()
68 if isempty(model.getSource)
69 line_error(mfilename,'The model requires a Source prior to instantiating open classes.');
71 if isempty(model.getSink)
72 line_error(mfilename,'The model requires a Sink prior to instantiating open classes.');
74 if nargin >= 3 && isa(prio,'Source')
75 % user error, source passed as ref station
80 if nargin>=3 %exist('prio','var')
84 self.deadline = deadline;
86 model.addJobClass(self);
87 setReferenceStation(self, model.getSource());
89 % set default scheduling for this class at all
nodes
90 for i=1:length(model.nodes)
91 if isa(model.nodes{i},'Join')
92 model.
nodes{i}.setStrategy(self,JoinStrategy.STD);
93 model.nodes{i}.setRequired(self,-1);
95 if ~isempty(model.nodes{i})
96 model.
nodes{i}.setRouting(self, RoutingStrategy.RAND);
99 elseif model.isJavaNative()
100 self.index = model.getNumberOfClasses + 1;
101 self.obj = jline.lang.OpenClass(model.obj, name, prio, deadline);
105 function setReferenceStation(
class, source)
106 % SETREFERENCESTATION(CLASS, SOURCE)
108 if ~isa(source,
'Source')
109 line_error(mfilename,'The reference station for an open class must be a Source.');
111 setReferenceStation@JobClass(class, source);