FLD (Fluid/Mean-Field Approximation)
Methods · Configuration · Shared options · All solvers
The FLD solver is based on a system of ordinary differential equations (ODEs) that provide mean-field approximations for queueing networks. The approach is grounded in Kurtz's mean-field approximation theory and is particularly effective for transient analysis and models with large job populations.
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 | Resolve to the route the model needs: dae for a Petri net, a binding buffer or a capacity region, rmf for a cache, else minnormal where it applies, else closing for DPS, else matrix. | [86], [98] |
matrix | First-order mean-field ODE built from the linear generator, with the hard min() capacity term. | [86], [98] |
pnorm | The matrix drift with the hard min replaced by a p-norm smoothing (config.pstar, default 20). | [98] |
softmin | The state-dependent drift with min() replaced by a Boltzmann softmin of parameter alpha (config.alpha, default 20). | — |
statedep | Drift built in closed form from the phase-type parameters, allowing rates that are general functions of the state. | [86] |
closing | Closing-method fluid iteration, the source of open classes is replaced by a saturated queue. | [13] |
minnormal | Min-normal moment closure: E[min(X,c)] evaluated for jointly normal populations, so mean and covariance are integrated together. | [51] |
refined, rmf | Aliases selecting the min-normal closure plus the Gast-van Houdt O(1/N) correction about the mean-field fixed point, or the cache-network refined mean-field decomposition when the model contains a Cache node. | [51], [48] |
dae | Differential-algebraic system of equations; the main method for finite capacity regions and Petri nets. | [51], [52] |
tbi | Trajectory-based iteration: the stations are partitioned into cells and each cell's IVP is solved with the others frozen (waveform relaxation) until the trajectories agree. | [101] |
diffusion | Euler-Maruyama on the flow drift, reflected at zero and projected back onto each class population; stochastic, closed multiclass only. | [13] |
kp | Diffusion limits for time-varying queueing networks of MAPt/Pht/∞ stations. | [64] |
mfq | Markovian fluid-queue analyzer using BuTools for a Source-Queue-Sink shape, including the fluid priority queue; falls back to matrix off that shape. | [54] |
aoi | Alias of mfq, reaching the age-of-information fluid solver when the topology qualifies. | — |
mtginf | Exact Poisson law of the time-varying infinite-server queue: the mean E[lambda(t-Se)] and its time lag. | [44] |
mol | Modified offered load: the infinite-server offered load fed into the stationary Erlang formula, which carries the time lag. | [77] |
ggisgi | Deterministic fluid limit of the overloaded multiserver queue with abandonment, including the queue boundary. | [110] |
ggingi | Truncated-Gaussian refinement of that fluid limit, carrying a general service law. | [70] |
tvms | Time-varying many-server fluid queue solved forward on a grid at the staffing the model declares. | [69] |
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, timespan, timestep, init_sol, stiff, odesolvers.
FLD defaults to iter_max=200, timespan=[0,Inf] and stiff=true. The five ODE integrator slots belong to options.odesolvers. The pnorm method supplies pstar=20 when no exponent is given; the general configuration field is otherwise unset.
| Option | Default | Description and values |
|---|---|---|
alpha | 20 | Smoothing parameter of the softmin drift, scalar or per station; larger is sharper and stiffer. |
dae_maxcov | 25 | Cap on the transient covariance system the DAE route will build. |
dae_maxstate | 100 | Cap on the simultaneous state dimension the DAE route will solve. |
fluid_earlystop | true | Stop the ODE window loop once the drift residual says the state is at a fixed point, instead of running iter_max windows. |
immediate_tol | tolerance | Rate above which a coordinate counts as immediate and is eliminated rather than integrated. |
init_cov | unset | Initial covariance matrix of the kp diffusion limit, in that method's state space. |
init_qcov | unset | Initial queue-length covariance for the same, given per station and class. |
init_qlen | unset | Initial mean queue lengths of a transient, in the same index space as init_qcov. |
kp_init_sol | unset | Initial state vector of the kp (Ko-Pender) fluid and diffusion system. |
lsoda_retry | false | Internal: marks the second attempt after an LSODA failure so the retry does not recurse. |
moment_cov | internal | Per-station covariance handles passed between the moment-closure passes. |
moment_maxstate | cap | Largest state dimension a moment-closure method will attempt. |
moment_sigma2 | zeros | Per-station variance seed of the closure; all-zero reduces it to the mean-field limit. |
nhpp_sched | unset | Non-homogeneous Poisson arrival schedule, a struct array making the drift time-varying. |
pstar | unset | Exponent of the p-norm smoothing, switching it on under any matrix-family method. |
rate_traj | unset | Explicit rate trajectory over time, the other way to make the drift time-varying. |
tbi_cells | derived | Trajectory-based iteration: an explicit cell array of disjoint station index sets. |
tbi_cellsize | 5 | Stations per cell when the partition is derived rather than given. |
tbi_iteration | Jacobi | Sweep order over cells: 'gs'/'gauss-seidel' uses the updated inflows within a sweep. |
tbi_iter_max | method default | Iteration cap of that cell fixed point. |
tbi_parallel | false | Fan the per-cell integrations over a parfor pool, when the toolbox is licensed. |
tbi_tol | method default | Cross-cell inflow tolerance that stops the iteration. |
Example
This example demonstrates the FLD solver on a closed queueing network with a large job population (100 jobs). The fluid approximation is particularly effective for high-population scenarios, where it provides accurate results more efficiently than state-space methods.
% Create a closed queueing network with 100 jobs
model = Network('FLD Example');
delay = Delay(model, 'Delay');
queue = Queue(model, 'Queue', SchedStrategy.FCFS);
jobclass = ClosedClass(model, 'Class1', 100, delay);
delay.setService(jobclass, Exp(1.0));
queue.setService(jobclass, Exp(2.4));
P = model.initRoutingMatrix();
P.set(jobclass, jobclass, delay, queue, 1.0);
P.set(jobclass, jobclass, queue, delay, 1.0);
model.link(P);
solver = FLD(model);
FLD(model).avgTable()
Output:
FLD analysis [method: default/matrix; type: approximate, deterministic; lang: matlab; env: 2025a] completed in 0.076s.
2×8 table
Station JobClass QLen Util RespT ResidT ArvR Tput
Delay Class1 2.4 2.4 1 1 2.4 2.4
Queue Class1 97.6 1 40.667 40.667 2.4 2.4
// Create a closed queueing network with 100 jobs
Network model = new Network("FLD Example");
Delay delay = new Delay(model, "Delay");
Queue queue = new Queue(model, "Queue", SchedStrategy.FCFS);
ClosedClass jobclass = new ClosedClass(model, "Class1", 100, delay);
delay.setService(jobclass, new Exp(1.0));
queue.setService(jobclass, new Exp(2.4));
RoutingMatrix P = model.initRoutingMatrix();
P.set(jobclass, jobclass, delay, queue, 1.0);
P.set(jobclass, jobclass, queue, delay, 1.0);
model.link(P);
FLD solver = new FLD(model);
solver.avgTable.print();
Output:
FLD analysis [method: default/matrix; type: approximate, deterministic; lang: java; env: 17.0.9] completed.
Station JobClass QLen Util RespT ResidT ArvR Tput
Delay Class1 2.4 2.4 1 1 2.4 2.4
Queue Class1 97.6 1 40.667 40.667 2.4 2.4
# Create a closed queueing network with 100 jobs
from line_solver import *
model = Network("FLD Example")
delay = Delay(model, "Delay")
queue = Queue(model, "Queue", SchedStrategy.FCFS)
jobclass = ClosedClass(model, "Class1", 100, delay)
delay.set_service(jobclass, Exp(1.0))
queue.set_service(jobclass, Exp(2.4))
P = model.init_routing_matrix()
P.set(jobclass, jobclass, delay, queue, 1.0)
P.set(jobclass, jobclass, queue, delay, 1.0)
model.link(P)
solver = FLD(model)
print(solver.avg_table)
Output:
FLD analysis [method: default/matrix; type: approximate, deterministic; lang: python; env: 3.13.7] completed.
Station JobClass QLen Util RespT ResidT ArvR Tput
Delay Class1 2.4 2.4 1 1 2.4 2.4
Queue Class1 97.6 1 40.667 40.667 2.4 2.4