1%% Finite Capacity Region with Dropping vs M/M/1/K
2% This example shows that an FCR with dropping around a single queue
3% behaves like an M/M/1/K queue, where K
is the FCR capacity.
4% Jobs arriving when the region
is full are dropped (lost).
13%% Model 1: Queue with FCR (dropping)
14model1 = Network(
'FCR Dropping');
16source1 = Source(model1,
'Source');
17queue1 = Queue(model1,
'Queue', SchedStrategy.FCFS);
18sink1 = Sink(model1,
'Sink');
20jobclass1 = OpenClass(model1,
'Class1', 0);
22source1.setArrival(jobclass1, Exp(arrivalRate));
23queue1.setService(jobclass1, Exp(serviceRate));
25P1 = model1.initRoutingMatrix();
26P1.set(jobclass1, jobclass1, source1, queue1, 1.0);
27P1.set(jobclass1, jobclass1, queue1, sink1, 1.0);
30% Add FCR with dropping - jobs are lost when region
is full
31fcr = model1.addRegion({queue1});
32fcr.setGlobalMaxJobs(K);
33fcr.setDropRule(jobclass1,
true); %
true = drop jobs
35%% Model 2: M/M/1/K
using queue capacity
36model2 = Network(
'M/M/1/K');
38source2 = Source(model2,
'Source');
39queue2 = Queue(model2,
'Queue', SchedStrategy.FCFS);
40queue2.setNumberOfServers(1);
41queue2.setCapacity(K); % Set queue capacity to K
42sink2 = Sink(model2,
'Sink');
44jobclass2 = OpenClass(model2,
'Class1', 0);
46source2.setArrival(jobclass2, Exp(arrivalRate));
47queue2.setService(jobclass2, Exp(serviceRate));
49P2 = model2.initRoutingMatrix();
50P2.set(jobclass2, jobclass2, source2, queue2, 1.0);
51P2.set(jobclass2, jobclass2, queue2, sink2, 1.0);
54%% Solve both models and compare results
55solver1 = JMT(model1,
'seed', 23000,
'samples', 100000);
56avgTable1 = solver1.getAvgTable()
58solver2 = JMT(model2,
'seed', 23000,
'samples', 100000);
59avgTable2 = solver2.getAvgTable()