Class MFQPrioAnalyzer
- All Implemented Interfaces:
FluidAnalyzer
mfq fluid method: port of solver_mfq_prio.m.
solver_fluid_analyzer.m sends a single-queue open model (Source -> Queue -> Sink) to
solver_mfq when every class has the same priority and to solver_mfq_prio when they do
not. Each open class arrives as a MAP {D0,D1}; the per-class background chains are superposed by a
Kronecker sum into one joint chain modulating a (K,N) input-rate matrix, and that pair with the constant
drain rate d = mu is the fluid priority queue of G. Horvath, "Efficient analysis of the MMAP[K]/PH[K]/1
priority queue", EJOR 246(1):128-139, 2015 (Mfq_prio_queue). The fluid level of a class is read
as its queue length and its fluid sojourn as its response time.
THE ROW ORDER IS INVERTED: LINE's classprio is a rank (smaller = higher priority) while
FluidPrioQueue takes the LAST row as the highest, so the open classes are sorted by classprio descending,
stably, as MATLAB's sort(...,'descend').
THE FALLBACK IS THE CALLER'S. The reference warns and runs the matrix method when the fluid model
degenerates or the fluid solve throws; the matrix method reads state-space preparation the mfq branch of
SolverFluid.runAnalyzer diverts around, so solve(jline.lang.NetworkStruct, jline.solvers.SolverOptions) reports the decision through
fallback(jline.solvers.fluid.analyzers.MFQPrioAnalyzer.PrioResult, java.lang.String) and SolverFluid substitutes the method before the divert.
The values returned are the ones MATLAB's getAvg reports: the analyzer's post-processing
(solver_fluid_analyzer.m) is applied, so a class holding no fluid has no utilization or response
time, the others read UN = min(1, QN/c, their throughput-weighted share of the raw total) and RN = QN/TN.
A fluid level is not a job count: a class whose peak input (with the classes above it) never exceeds d
reports QN = 0 exactly.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic final classThe outcome of the priority solve. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidanalyze(NetworkStruct sn, SolverOptions options, SolverResult result) static booleanTrue when the mfq dispatch takes the priority branch: distinct class priorities over all classes, the test solver_fluid_analyzer.m switches on (after the AoI arm).static MFQPrioAnalyzer.PrioResultsolve(NetworkStruct sn, SolverOptions options) Port ofsolver_mfq_prio.m.
-
Constructor Details
-
MFQPrioAnalyzer
- Parameters:
solved- the outcome ofsolve(jline.lang.NetworkStruct, jline.solvers.SolverOptions), which must not be a fallback
-
-
Method Details
-
isPriorityModel
True when the mfq dispatch takes the priority branch: distinct class priorities over all classes, the test solver_fluid_analyzer.m switches on (after the AoI arm).- Parameters:
sn- the network struct- Returns:
- true for the priority branch
-
solve
Port ofsolver_mfq_prio.m.- Parameters:
sn- the network structoptions- the solver options, whose tol is the Riccati precision- Returns:
- the metrics, or the fallback decision
-
analyze
- Specified by:
analyzein interfaceFluidAnalyzer
-
getXVecIt
- Specified by:
getXVecItin interfaceFluidAnalyzer
-