QNS (Queueing Network Solver)
The QNS wrapper exposes the corresponding tool for product-form queueing network analysis in the Layered Queueing Network Solver developed by the RADS group at Carleton University. Unlike the LQNS solver, QNS models are ordinary (non-layered) queueing networks.
| Method | Algorithm | Reference |
|---|---|---|
default | Automatic method selection | — |
conway | Conway's multi-server | — |
rolia | Rolia-Sevcik multi-server | — |
zhou | Zhou-Woodside multi-server | — |
suri | Suri's approximation for multi-server | — |
reiser | Reiser-Lavenberg exact mean value analysis | — |
schmidt | Schmidt's approximation | — |
Example
This example demonstrates the QNS solver on a simple tandem queueing network. QNS provides product-form analysis methods for ordinary (non-layered) queueing networks.
% Create an open queueing network (tandem queues)
model = Network('QNS Example');
source = Source(model, 'Source');
queue1 = Queue(model, 'Queue1', SchedStrategy.FCFS);
queue2 = Queue(model, 'Queue2', SchedStrategy.FCFS);
sink = Sink(model, 'Sink');
jobclass = OpenClass(model, 'Class1');
source.setArrival(jobclass, Exp(0.7));
queue1.setService(jobclass, Exp(1.0));
queue2.setService(jobclass, Exp(1.5));
P = model.initRoutingMatrix();
P.set(jobclass, jobclass, source, queue1, 1.0);
P.set(jobclass, jobclass, queue1, queue2, 1.0);
P.set(jobclass, jobclass, queue2, sink, 1.0);
model.link(P);
solver = QNS(model);
QNS(model).avgTable()
Output:
QNS analysis [method: default, lang: matlab] completed in 0.122s.
2×8 table
Station JobClass QLen Util RespT ResidT ArvR Tput
Queue1 Class1 0 0 0 0 0 0.7
Queue2 Class1 0 0 0 0 0.7 0.7
// Create an open queueing network (tandem queues)
Network model = new Network("QNS Example");
Source source = new Source(model, "Source");
Queue queue1 = new Queue(model, "Queue1", SchedStrategy.FCFS);
Queue queue2 = new Queue(model, "Queue2", SchedStrategy.FCFS);
Sink sink = new Sink(model, "Sink");
OpenClass jobclass = new OpenClass(model, "Class1");
source.setArrival(jobclass, new Exp(0.7));
queue1.setService(jobclass, new Exp(1.0));
queue2.setService(jobclass, new Exp(1.5));
RoutingMatrix P = model.initRoutingMatrix();
P.set(jobclass, jobclass, source, queue1, 1.0);
P.set(jobclass, jobclass, queue1, queue2, 1.0);
P.set(jobclass, jobclass, queue2, sink, 1.0);
model.link(P);
QNS solver = new QNS(model);
solver.avgTable.print();
Output:
QNS analysis [method: default, lang: java] completed.
Station JobClass QLen Util RespT ResidT ArvR Tput
Queue1 Class1 0 0 0 0 0 0.7
Queue2 Class1 0 0 0 0 0.7 0.7
# Create an open queueing network (tandem queues)
from line_solver import *
model = Network("QNS Example")
source = Source(model, "Source")
queue1 = Queue(model, "Queue1", SchedStrategy.FCFS)
queue2 = Queue(model, "Queue2", SchedStrategy.FCFS)
sink = Sink(model, "Sink")
jobclass = OpenClass(model, "Class1")
source.set_arrival(jobclass, Exp(0.7))
queue1.set_service(jobclass, Exp(1.0))
queue2.set_service(jobclass, Exp(1.5))
P = model.init_routing_matrix()
P.set(jobclass, jobclass, source, queue1, 1.0)
P.set(jobclass, jobclass, queue1, queue2, 1.0)
P.set(jobclass, jobclass, queue2, sink, 1.0)
model.link(P)
solver = QNS(model)
print(solver.avg_table)
Output:
QNS analysis [method: default, lang: python] completed.
Station JobClass QLen Util RespT ResidT ArvR Tput
Queue1 Class1 0 0 0 0 0 0.7
Queue2 Class1 0 0 0 0 0.7 0.7