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.
9model = Network('FCR Loss Network
');
12source = Source(model, 'Source
');
13delay = Delay(model, 'Delay
');
14sink = Sink(model, 'Sink
');
17class1 = OpenClass(model, 'Class1
', 0);
18class2 = OpenClass(model, 'Class2
', 1);
20%% Set arrival and service rates
21lambda1 = 0.3; lambda2 = 0.2; % arrival rates
22mu1 = 1.0; mu2 = 0.8; % service rates
24source.setArrival(class1, Exp(lambda1));
25source.setArrival(class2, Exp(lambda2));
26delay.setService(class1, Exp(mu1));
27delay.setService(class2, Exp(mu2));
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);
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
46%% Run NC solver (uses Erlang fixed-point for loss networks)
47fprintf('Running NC solver (lossn method)...\n
');
48solverNC = SolverNC(model);
49avgTableNC = solverNC.getAvgTable();
51fprintf('\nNC Results:\n
');
54%% Run JMT for comparison
55fprintf('Running JMT
for comparison...\n
');
56solverJMT = SolverJMT(model, 'seed
', 23000, 'samples
', 500000);
57avgTableJMT = solverJMT.getAvgTable();
59fprintf('\nJMT Results:\n
');
63fprintf('\n=== Comparison ===\n
');
64fprintf('%-15s %12s %12s %12s\n
', 'Metric
', 'NC
', 'JMT
', 'Rel Err
');
65fprintf('%s\n
', repmat('-
', 1, 55));
67% Extract Delay node throughputs
68delayRowsNC = strcmp(string(avgTableNC.Station), 'Delay
');
69delayRowsJMT = strcmp(string(avgTableJMT.Station), 'Delay
');
71tputNC = avgTableNC.Tput(delayRowsNC);
72tputJMT = avgTableJMT.Tput(delayRowsJMT);
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);
81fprintf('\nNote: NC uses analytical Erlang fixed-point approximation.\n
');
82fprintf('JMT uses discrete-
event simulation.\n
');