1%% Finite Capacity Region with Blocking vs M/M/1
2% This example shows that an FCR with blocking (waitq) around a single
3% queue behaves identically to a standard M/M/1 queue, since jobs
4% simply wait when the region
is "full" (no actual capacity limit effect).
12%% Model 1: Queue with FCR (blocking)
13model1 = Network(
'FCR Blocking');
15source1 = Source(model1,
'Source');
16queue1 = Queue(model1,
'Queue', SchedStrategy.FCFS);
17sink1 = Sink(model1,
'Sink');
19jobclass1 = OpenClass(model1,
'Class1', 0);
21source1.setArrival(jobclass1, Exp(arrivalRate));
22queue1.setService(jobclass1, Exp(serviceRate));
24P1 = model1.initRoutingMatrix();
25P1.set(jobclass1, jobclass1, source1, queue1, 1.0);
26P1.set(jobclass1, jobclass1, queue1, sink1, 1.0);
29% Add FCR with blocking - jobs wait when region
is full
30fcr = model1.addRegion({queue1});
31fcr.setGlobalMaxJobs(10);
32fcr.setDropRule(jobclass1,
false); %
false = block (wait)
34%% Model 2: Standard M/M/1 (no FCR)
35model2 = Network(
'M/M/1');
37source2 = Source(model2,
'Source');
38queue2 = Queue(model2,
'Queue', SchedStrategy.FCFS);
39sink2 = Sink(model2,
'Sink');
41jobclass2 = OpenClass(model2,
'Class1', 0);
43source2.setArrival(jobclass2, Exp(arrivalRate));
44queue2.setService(jobclass2, Exp(serviceRate));
46P2 = model2.initRoutingMatrix();
47P2.set(jobclass2, jobclass2, source2, queue2, 1.0);
48P2.set(jobclass2, jobclass2, queue2, sink2, 1.0);
51%% Solve both models and compare results
52solver1 = JMT(model1,
'seed', 23000,
'samples', 100000);
53avgTable1 = solver1.getAvgNodeTable()
55solver2 = JMT(model2,
'seed', 23000,
'samples', 100000);
56avgTable2 = solver2.getAvgNodeTable()