LINE Solver
MATLAB API documentation
Loading...
Searching...
No Matches
fcr_lossn.m
1%% Loss Network with Finite Capacity Region (NC Solver)
2% This example demonstrates the NC solver's ability to analyze open
3% loss networks using the Erlang fixed-point approximation.
4% The model has a multiclass Delay node inside an FCR with DROP policy.
5
6clear; clc;
7
8%% Create network
9model = Network('FCR Loss Network');
10
11%% Add nodes
12source = Source(model, 'Source');
13delay = Delay(model, 'Delay');
14sink = Sink(model, 'Sink');
15
16%% Add job classes
17class1 = OpenClass(model, 'Class1', 0);
18class2 = OpenClass(model, 'Class2', 1);
19
20%% Set arrival and service rates
21lambda1 = 0.3; lambda2 = 0.2; % arrival rates
22mu1 = 1.0; mu2 = 0.8; % service rates
23
24source.setArrival(class1, Exp(lambda1));
25source.setArrival(class2, Exp(lambda2));
26delay.setService(class1, Exp(mu1));
27delay.setService(class2, Exp(mu2));
28
29%% Create routing matrix
30P = model.initRoutingMatrix();
31P.set(class1, class1, source, delay, 1.0);
32P.set(class1, class1, delay, sink, 1.0);
33P.set(class2, class2, source, delay, 1.0);
34P.set(class2, class2, delay, sink, 1.0);
35model.link(P);
36
37%% Add finite capacity region with constraints
38% When region is full, arriving jobs are dropped (lost)
39fcr = model.addRegion({delay});
40fcr.setGlobalMaxJobs(5); % Global: max 5 jobs in region
41fcr.setClassMaxJobs(class1, 3); % Class1: max 3 jobs
42fcr.setClassMaxJobs(class2, 3); % Class2: max 3 jobs
43fcr.setDropRule(class1, true); % true = drop jobs
44fcr.setDropRule(class2, true); % true = drop jobs
45
46%% Run NC solver (uses Erlang fixed-point for loss networks)
47fprintf('Running NC solver (lossn method)...\n');
48solverNC = SolverNC(model);
49avgTableNC = solverNC.getAvgTable();
50
51fprintf('\nNC Results:\n');
52disp(avgTableNC);
53
54%% Run JMT for comparison
55fprintf('Running JMT for comparison...\n');
56solverJMT = SolverJMT(model, 'seed', 23000, 'samples', 500000);
57avgTableJMT = solverJMT.getAvgTable();
58
59fprintf('\nJMT Results:\n');
60disp(avgTableJMT);
61
62%% Compare results
63fprintf('\n=== Comparison ===\n');
64fprintf('%-15s %12s %12s %12s\n', 'Metric', 'NC', 'JMT', 'Rel Err');
65fprintf('%s\n', repmat('-', 1, 55));
66
67% Extract Delay node throughputs
68delayRowsNC = strcmp(string(avgTableNC.Station), 'Delay');
69delayRowsJMT = strcmp(string(avgTableJMT.Station), 'Delay');
70
71tputNC = avgTableNC.Tput(delayRowsNC);
72tputJMT = avgTableJMT.Tput(delayRowsJMT);
73
74for i = 1:length(tputNC)
75 relErr = abs(tputNC(i) - tputJMT(i)) / tputJMT(i) * 100;
76 classNames = avgTableNC.JobClass(delayRowsNC);
77 fprintf('Tput %-10s %12.4f %12.4f %10.2f%%\n', ...
78 string(classNames(i)), tputNC(i), tputJMT(i), relErr);
79end
80
81fprintf('\nNote: NC uses analytical Erlang fixed-point approximation.\n');
82fprintf('JMT uses discrete-event simulation.\n');