MVA (Mean Value Analysis)
Methods · Configuration · Shared options · All solvers
The MVA solver implements exact and approximate mean value analysis for open, closed and mixed queueing networks. The default dispatch selects a route from the model structure, including single queues, load dependence, blocking, priorities, polling and caches. Each named approximation has its own model restrictions.
Methods
The method names and defaults below describe the MATLAB interface. Aliases share a row; model-specific restrictions and backend differences are noted. Use solver.listValidMethods() to inspect the names available for your model.
| Method | Algorithm and applicability | Reference |
|---|---|---|
default | Let mvaDispatch pick the route: exact MVA on a product-form model, AMVA otherwise, plus the single-queue, load-dependent, BAS, OI/PAS, SJN, polling and cache-in-QN routes on the shapes that own them. | — |
mva | Exact mean value analysis, the Reiser-Lavenberg recursion over the population lattice. | — |
exact | The same exact recursion asked for by name; refused where no product-form solution exists. | [1] |
amva | Approximate MVA: the default AMVA fixed point over the arrival-instant queue lengths. | — |
sum | Summation method: closed models via sum_closed, open and mixed via the closing method sum_closing. | — |
esum | Extended summation: the same analyzer plus the SCV corrections at FCFS and SIRO stations. | — |
bs, amva.bs | Bard-Schweitzer proportional estimate of the arrival-instant queue length. | [3] |
lin, amva.lin | Chandy-Neuse Linearizer: Bard-Schweitzer plus the per-class Delta correction refreshed over three passes. | [2] |
gflin | Generalized fixed-point Linearizer, one uniform scaling exponent for all classes. | — |
egflin | Extended generalized fixed-point Linearizer, a per-class scaling exponent; the AMVA default on single-server models. | — |
dmlin, amva.dmlin | De Souza e Silva-Muntz Improved Linearizer: Linearizer's aggregate rewriting, same answer at lower cost. | — |
qd, amva.qd | Queue-dependent AMVA: the arrival-instant estimate conditioned on the station's own queue length. | [4] |
qdlin, amva.qdlin | Queue-dependent Linearizer, the QD correction inside the Linearizer fixed point. | — |
aql, amva.aql | Aggregate Queue Length: carries R+1 population points and removes Schweitzer's proportionality error. Single-server models only. | — |
qsa, amva.qsa | Queue-shift approximation correcting the arrival-instant queue lengths. Single-server models only. | — |
tay, amva.tay | Tay's arrival-instant approximation: throughput elasticities in place of the population shift. Single-server models only. | — |
scat, amva.scat | Neuse-Chandy SCAT, i.e. the generalized Linearizer at alpha = 1 with a single Delta refresh pass. | — |
qli, amva.qli | Wang-Sevcik Queue Line approximation of the arrival-instant queue. | — |
fli, amva.fli | Wang-Sevcik Fraction Line approximation, the FL correction term. | — |
lcp, amva.lcp | Bard's large customer population estimate: Bard-Schweitzer with the (N-1)/N factor dropped. | — |
chow, amva.chow | Chow's second approximation: the LCP solution corrected once by forward-difference theta terms. | — |
pamb, amva.pamb | Proportional approximation PAM-B, noniterative: proportional seed of the queue lengths plus one final MVA step. | — |
pami, amva.pami | PAM-I: the proportional seed with throughputs capped at full centre utilization. | — |
pamt, amva.pamt | PAM-T: the proportional seed plus the last two MVA steps. | — |
clust, amva.clust | Clustering: subnetworks solved exactly for their local classes, foreign classes carried as a per-centre utilization. | — |
ab, amva.ab | Akyildiz-Bolch AMVA, which handles multiserver stations directly instead of through the Seidmann surrogate delay. | — |
schmidt, amva.schmidt | Schmidt's MVA for class-dependent FCFS multiserver stations. | — |
schmidt-ext, amva.schmidt-ext | The extended Schmidt multiserver correction, built from the network with one class-r customer tagged. | — |
marie, amva.marie | Marie's iterative aggregation-decomposition for closed networks with non-exponential (Coxian) FCFS service. | — |
priomva, amva.priomva | Chandy-Lakshmi preemptive-resume priority arm: the tagged job's own service is inflated by 1/(1-sigma) along with the queued work. | — |
sqni | Square-root noniterative closed form for one queueing station plus one delay. | — |
mvac | Exact mean value analysis by chain: recurs on chains rather than on the population vector, closed single-server product-form only. | — |
sqd | Smith Queue Decomposition, the AMVA handler for Blocking-After-Service; runs on the single closed chain and disaggregates back to classes. | — |
sjn.mva | Shortest-job-next: the conditional waiting-time equation stepped exactly over the population lattice. | — |
sjn.amva | Shortest-job-next closed by a Schweitzer fixed point on the size-resolved queue length. | — |
amva.mapqn | Horizontal-cut MVA for one exponential delay and one FCFS queue with MAP service: one linear solve per lattice point. | — |
qna | Whitt's Queueing Network Analyzer: two-moment traffic decomposition of an open network into GI/G/1 queues. | — |
rqna | Robust queueing network analyzer: index-of-dispersion decomposition and robust queueing bounds, the default for bursty (MAP/MMPP) open arrivals. | — |
rqt | Robust queueing theory: polyhedral uncertainty sets and the worst-case system time per node, with the robust Burke calculus for the network. | — |
Single queueing systems (open, 2 stations, 1 class; Source -> Queue -> Sink):
| Method | Algorithm and applicability | Reference |
|---|---|---|
mm1 | M/M/1 exact response time. | — |
mmk | M/M/k exact response time (Erlang C). | — |
mg1, mgi1 | M/G/1 exact response time (Pollaczek-Khinchine). | — |
gm1, gim1 | G/M/1 exact response time: the PH/M/1 sigma root when the arrival law is Markovian, an LST root otherwise. | — |
gig1, gig1.allen | G/G/1 Allen-Cunneen two-moment approximation. | — |
gig1.kingman | Kingman's heavy-traffic upper bound on the G/G/1 waiting time. | — |
gig1.heyman | Heyman's G/G/1 approximation. | — |
gig1.gelenbe | Gelenbe's diffusion approximation with instantaneous-return boundary. | — |
gig1.kimura | Kimura's diffusion-interpolation G/G/1 approximation. | — |
gig1.kobayashi | Kobayashi's diffusion G/G/1 approximation. | — |
gig1.klb | Kraemer-Langenbach-Belz refinement of Allen-Cunneen; the default choice for G/G/1. | — |
gig1.marchal | Marchal's G/G/1 approximation. | — |
gig1.extremal | Tight two-moment extremal upper bound on the G/G/1 queue. | — |
gigk | G/G/k approximation with the rho-dependent alpha correction; the default choice for k > 1. | — |
gigk.kingman_approx | G/G/k approximation scaling the M/M/k waiting time by (ca^2+cs^2)/2. | — |
gigk.whitt | Whitt's (1993) G/G/k refinement. | — |
gigk.diffusion | G/GI/n/m diffusion approximation with asymptotic peakedness; carries a finite buffer. | — |
qed | Halfin-Whitt quality-and-efficiency-driven limit of the M/M/k queue. | — |
erlanga | Erlang A, the exact M/M/s/r+M chain with exponential abandonment; the default choice when the patience law is exponential. | — |
mgisrgi | Whitt's M/GI/s/r+GI engineering solution by state-dependent Markovian abandonment; the default choice for a non-exponential patience law. | — |
Configuration options
The solver-specific fields below belong to options.config. Set them on an options struct, for example opt.config.name = value, and pass that struct to the solver constructor. See shared solver options for all top-level fields, shared configuration, defaults and usage. Options apply only to the methods and model features that consume them.
Relevant top-level options: iter_max, iter_tol.
The default convergence tolerance is iter_tol=1e-6. Also see the shared multiserver, highvar, np_priority and fork_join settings. For bounds, use BA.
| Option | Default | Description and values |
|---|---|---|
rqna_alpha | paper default | Robust queueing network analyzer: the arrival-side uncertainty-set parameter. |
rqna_beta | paper default | The service-side parameter of the same uncertainty set. |
rqna_feedback_elim | true | Eliminate immediate feedback before the RQNA decomposition (Algorithm 2, Section 4.2). |
rqt_alpha_a | derived | Robust queueing transform: arrival-side alpha, scalar or per station. |
rqt_alpha_s | derived | Service-side alpha of the same, scalar or per station. |
rqt_exact | false | Replace the tabulated adaptation with the exact optimization. |
rqt_regime | 'independent' | Which Table 1 adaptation regime is used: 'independent', 'normal', 'pareto'. |
sjn_lattice_max | cap | The SJN (shortest-job-next) analyzer refuses once its lattice exceeds this many states. |
sjn_lfactor | method default | Lattice refinement factor of that grid. |
sjn_ns | method default | Number of lattice points per dimension. |
sjn_umax | method default | Upper truncation of the utilization axis of the same grid. |
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; type: approximate, deterministic; lang: matlab; env: 2025a] 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; type: approximate, deterministic; lang: java; env: 17.0.9] 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; type: approximate, deterministic; lang: python; env: 3.13.7] 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.