MVA (Mean Value Analysis)
The MVA solver implements both exact and approximate mean value analysis algorithms for product-form queueing networks. The default method uses Linearizer for approximate MVA, with support for extended queueing features including non-exponential service times, multi-servers, non-preemptive priorities, and fork-join networks.
| Method | Algorithm | Reference |
|---|---|---|
default | Automatic method selection | — |
exact | Exact mean value analysis | [1] |
bs | Bard-Schweitzer approximate MVA | [3] |
lin | Linearizer approximate MVA | [2] |
gflin | Generalized Fritzson-Liskiewicz Linearizer | — |
egflin | Extended generalized Fritzson-Liskiewicz Linearizer | — |
qd | Queue-dependent approximate MVA | [4] |
qdlin | Queue-dependent Linearizer | — |
qli | Queue-Linearizer iteration | — |
fli | Fritzson-Liskiewicz iteration | — |
schmidt | Schmidt approximation | — |
schmidt-ext | Extended Schmidt approximation | — |
ab | Asymptotic bounds approximation | — |
qna | Queuing Network Analyzer | — |
sqni | Single-server queue approximation iteration | — |
aba.upper/aba.lower | Asymptotic bound analysis | [3] |
bjb.upper/bjb.lower | Balanced job bounds | [5] |
gb.upper/gb.lower | Geometric square-root bounds | [5] |
pb.upper/pb.lower | Proportional bounds | [5] |
sb.upper/sb.lower | Simple bounds | [6] |
Example
This example demonstrates solving a simple M/M/1 queue using the MVA solver. The queue has an arrival rate of 0.9 jobs/sec and a service rate of 1.0 jobs/sec.
% Create a simple M/M/1 queue
model = Network('M/M/1 Example');
source = Source(model, 'Source');
queue = Queue(model, 'Queue1', SchedStrategy.FCFS);
sink = Sink(model, 'Sink');
jobclass = OpenClass(model, 'Class1');
source.setArrival(jobclass, Exp(0.9));
queue.setService(jobclass, Exp(1.0));
model.link(Network.serialRouting(source, queue, sink));
% Solve with MVA and display average performance metrics
MVA(model).avgTable()
Output:
MVA analysis [method: default, lang: matlab] completed in 0.004175s.
ans =
2×8 table
Station JobClass QLen Util RespT ResidT ArvR Tput
_______ ________ ____ ____ _____ ______ ____ ____
Source Class1 0 0 0 0 0 0.9
Queue1 Class1 9 0.9 10 10 0.9 0.9
import jline.lang.*;
import jline.lang.constant.SchedStrategy;
import jline.lang.nodes.*;
import jline.lang.processes.Exp;
import jline.solvers.NetworkAvgTable;
import jline.solvers.mva.MVA;
public class MVAExample {
public static void main(String[] args) {
// Create a simple M/M/1 queue
Network model = new Network("M/M/1 Example");
Source source = new Source(model, "Source");
Queue queue = new Queue(model, "Queue1", SchedStrategy.FCFS);
Sink sink = new Sink(model, "Sink");
OpenClass jobclass = new OpenClass(model, "Class1");
source.setArrival(jobclass, Exp.fitRate(0.9));
queue.setService(jobclass, Exp.fitRate(1.0));
model.link(Network.serialRouting(source, queue, sink));
// Solve with MVA and display average performance metrics
System.out.println(new MVA(model).avgTable);
}
}
Output:
MVA analysis [method: default, lang: java] completed. Station JobClass QLen Util RespT ResidT ArvR Tput Source Class1 0.0 0.0 0.0 0.0 0.0 0.9 Queue1 Class1 9.0 0.9 10.0 10.0 0.9 0.9
from line_solver import *
# Create a simple M/M/1 queue
model = Network('M/M/1 Example')
source = Source(model, 'Source')
queue = Queue(model, 'Queue1', SchedStrategy.FCFS)
sink = Sink(model, 'Sink')
jobclass = OpenClass(model, 'Class1')
source.setArrival(jobclass, Exp(0.9))
queue.setService(jobclass, Exp(1.0))
model.link(Network.serialRouting(source, queue, sink))
# Solve with MVA and display average performance metrics
print(MVA(model).avg_table)
Output:
MVA analysis [method: default, lang: python] completed. Station JobClass QLen Util RespT ResidT ArvR Tput 0 Source Class1 0.0 0.0 0.0 0.0 0.0 0.9 1 Queue1 Class1 9.0 0.9 10.0 10.0 0.9 0.9
References
- Reiser, M., & Lavenberg, S. S. (1980). Mean-value analysis of closed multichain queuing networks. Journal of the ACM, 27(2), 313-322.
- Chandy, K. M., & Neuse, D. (1982). Linearizer: a heuristic algorithm for queueing network models. Communications of the ACM, 25(2), 126-134.
- Bolch, G., Greiner, S., de Meer, H., & Trivedi, K. S. (2006). Queueing Networks and Markov Chains (2nd ed.). Wiley-Interscience.
- Casale, G., Pérez, J. F., & Wang, W. (2015). Deconvolving system load from queue length snapshots. ACM SIGMETRICS, 159-171.
- Casale, G., Muntz, R. R., & Serazzi, G. (2008). Geometric bounds on queueing systems. IEEE Transactions on Computers, 57(4), 508-521.
- Harel, A., Namn, S. M., & Sturm, R. (1999). Performance and reliability of communication networks. Kluwer Academic Publishers.