Class MFQPrioAnalyzer

java.lang.Object
jline.solvers.fluid.analyzers.MFQPrioAnalyzer
All Implemented Interfaces:
FluidAnalyzer

public class MFQPrioAnalyzer extends Object implements FluidAnalyzer
The priority branch of the 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.