LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
fcr_constraints.m
1%% Finite Capacity Region - Constraint Types
2% This example demonstrates different FCR constraint types:
3% - Global max jobs: limits total jobs across all classes
4% - Per-class max jobs: limits jobs of a specific class
5% - Drop rule: determines blocking vs dropping behavior
6
7clear; clc;
8
9%% Create a multiclass open network
10model = Network('FCR Constraints Demo');
11
12% Nodes
13source = Source(model, 'Source');
14queue1 = Queue(model, 'Queue1', SchedStrategy.FCFS);
15queue2 = Queue(model, 'Queue2', SchedStrategy.FCFS);
16sink = Sink(model, 'Sink');
17
18% Job classes
19class1 = OpenClass(model, 'HighPriority', 0);
20class2 = OpenClass(model, 'LowPriority', 1);
21
22% Arrival and service rates
23source.setArrival(class1, Exp(0.3)); % High priority: lower arrival rate
24source.setArrival(class2, Exp(0.5)); % Low priority: higher arrival rate
25queue1.setService(class1, Exp(1.0));
26queue1.setService(class2, Exp(0.8));
27queue2.setService(class1, Exp(1.2));
28queue2.setService(class2, Exp(1.0));
29
30% Routing: both classes go through both queues
31P = model.initRoutingMatrix();
32P.set(class1, class1, source, queue1, 1.0);
33P.set(class1, class1, queue1, queue2, 1.0);
34P.set(class1, class1, queue2, sink, 1.0);
35P.set(class2, class2, source, queue1, 1.0);
36P.set(class2, class2, queue1, queue2, 1.0);
37P.set(class2, class2, queue2, sink, 1.0);
38model.link(P);
39
40%% Add Finite Capacity Region with multiple constraints
41fcr = model.addRegion({queue1, queue2});
42
43% Global constraint: max 6 jobs total in the region
44fcr.setGlobalMaxJobs(2);
45
46% Per-class constraints: high priority gets more space
47fcr.setClassMaxJobs(class1, 2); % HighPriority: max 1 jobs
48fcr.setClassMaxJobs(class2, 2); % LowPriority: max 2 jobs
49% Note: per-class limits must sum to >= global limit for consistent behavior
50
51% Drop rules: all classes use the same rule (required by LINE)
52% true = drop jobs when limit reached, false = block (wait)
53fcr.setDropRule(class1, true); % true = drop
54fcr.setDropRule(class2, true); % true = drop
55
56%% Solve with JMT
57solver = JMT(model, 'seed', 23000, 'samples', 100000);
58avgTable = solver.getAvgTable()