LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
OpenClass.m
1classdef OpenClass < JobClass
2 % OpenClass Job class for external arrivals with infinite population
3 %
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.
9 %
10 % @brief Job class for modeling external arrivals with infinite population
11 %
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
19 %
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
27 %
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
34 %
35 % Example:
36 % @code
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
42 % @endcode
43 %
44 % Copyright (c) 2012-2026, Imperial College London
45 % All rights reserved.
46
47 methods
48
49 %Constructor
50 function self = OpenClass(model, name, prio, deadline)
51 % OPENCLASS Create an open job class instance
52 %
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
59
60 self@JobClass(JobClassType.OPEN, name);
61 if nargin<3
62 prio = 0;
63 end
64 if nargin<4
65 deadline = Inf;
66 end
67 if model.isMatlabNative()
68 if isempty(model.getSource)
69 line_error(mfilename,'The model requires a Source prior to instantiating open classes.');
70 end
71 if isempty(model.getSink)
72 line_error(mfilename,'The model requires a Sink prior to instantiating open classes.');
73 end
74 if nargin >= 3 && isa(prio,'Source')
75 % user error, source passed as ref station
76 prio = 0;
77 end
78 self.priority = 0;
79 self.deadline = Inf;
80 if nargin>=3 %exist('prio','var')
81 self.priority = prio;
82 end
83 if nargin>=4
84 self.deadline = deadline;
85 end
86 model.addJobClass(self);
87 setReferenceStation(self, model.getSource());
88
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);
94 end
95 if ~isempty(model.nodes{i})
96 model.nodes{i}.setRouting(self, RoutingStrategy.RAND);
97 end
98 end
99 elseif model.isJavaNative()
100 self.index = model.getNumberOfClasses + 1;
101 self.obj = jline.lang.OpenClass(model.obj, name, prio, deadline);
102 end
103 end
104
105 function setReferenceStation(class, source)
106 % SETREFERENCESTATION(CLASS, SOURCE)
107
108 if ~isa(source,'Source')
109 line_error(mfilename,'The reference station for an open class must be a Source.');
110 end
111 setReferenceStation@JobClass(class, source);
112 end
113 end
114
115end
116
Definition mmt.m:92