Class SolverNC
- Direct Known Subclasses:
NC
SolverNC implements the normalizing constant approach for computing exact performance measures of closed product-form queueing networks. The normalizing constant G(N) represents the partition function that ensures steady-state probabilities sum to one.
Key NC solver capabilities:
- Exact normalizing constant computation
- Convolution algorithm implementation
- Load-dependent service station support
- Cache-enabled queueing network analysis
- Joint and marginal probability computation
- State probability aggregation methods
The solver supports various computation methods including standard convolution, tree convolution, and specialized algorithms for cache networks and load-dependent stations. Results include exact performance metrics and state probabilities.
- Since:
- 1.0
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classstatic classstatic classstatic classstatic classNested classes/interfaces inherited from class jline.solvers.NetworkSolver
NetworkSolver.SolverConfigurator -
Field Summary
Fields inherited from class jline.solvers.NetworkSolver
avgHandles, lastPerctMethod, model, sn, tranHandles -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic SolverOptionsGet cumulative distribution function of response times with default parametersgetCdfRespT(AvgHandle... R) Get cumulative distribution function of response times at FCFS and delay nodesstatic FeatureSetReturns the feature set supported by the NC solverGet the normalizing constant and its logarithmgetProbAggr(Node node) Get aggregated probability for a specific node using current stategetProbAggr(Node node, Matrix state_a) Get aggregated probability for a specific node and stategetProbMarg(int ist, int jobclass, Matrix state_m) Marginal queue-length distribution at a station, routing the CLI's (station, class) call to the exact procomom/enumeration path ingetProbMarg(Node).getProbMarg(Node node) Get the log normalization constant for aggregated probabilitiesGet system-wide joint probabilityGet aggregated system-wide joint probabilitystatic booleanTrue if the model contains a Cache equipped with a delayed-hit retrieval system.booleanisStochasticMethod(String method) NC is deterministic except for the Monte Carlo integration methods (mci/imci), logistic sampling (ls), and the sampling method, whose estimates depend on the random seed.String[]List all valid solution methods for this solvermeClosed()Maximum Entropy algorithm for Closed Queueing Networks (Kouvatsos 1994, Section 3.3): pseudo-open decomposition followed by a convolution over the population lattice, iterated on the flow (work rate) equations.meClosed(MeOqnOptions meOptions) Maximum Entropy algorithm for Closed Queueing Networks with custom options (Kouvatsos 1994, Section 3.3).static doublememBufferSize(NetworkStruct sn, int ist) Physical buffer size of a station in jobs, in service included: the tighter of the station capacity and the sum of the per-class capacities, infinite when the station is unbounded.static DropStrategymemDropRule(NetworkStruct sn, int ist) Drop rule declared at a station for the first class, defaulting to Drop, which is what refreshCapacity assigns to a finite buffer reachable by an open class.static booleanmemFiniteBufferPath(NetworkStruct sn, SolverOptions options) True when method='mem' has been requested on a model whose finite buffers MEM carries explicitly.static booleanTrue when the model is a single-class open network carrying a finite buffer that MEM represents explicitly, as a censored GE/GE/c/0;N queue.meMixed()Maximum Entropy algorithm for Mixed Queueing Networks: composition of the open (Section 3.2) and closed (Section 3.3) algorithms with product-form-style conditioning.meMixed(MeOqnOptions meOptions) Maximum Entropy algorithm for Mixed Queueing Networks with custom options.static StringReturns null when the Maximum Entropy Method (Kouvatsos 1994) supports the features of the model described by sn (node types, class switching, scheduling, source presence); otherwise a message describing the first unsupported feature.static StringmemUnsupportedReason(NetworkStruct sn, boolean closed) Returns null when the Maximum Entropy Method (Kouvatsos 1994) supports the features of the model described by sn; otherwise a message describing the first unsupported feature.static StringmemUnsupportedReason(NetworkStruct sn, boolean hasOpen, boolean hasClosed) Feature check for the Maximum Entropy Method given the class composition of the model: hasOpen/hasClosed flag the presence of open and closed classes (both true for mixed models).meOpen()Maximum Entropy algorithm for Open Queueing Networks.meOpen(MeOqnOptions meOptions) Maximum Entropy algorithm for Open Queueing Networks with custom options.resolveMethod(SolverOptions options) Feature-driven resolution of method='default': an open network with non-Markovian (non-unit SCV) variability within the MEM feature set is solved by the Maximum Entropy Method by default, since the normalizing-constant path would silently exponentialize it.voidExecutes the solver algorithm to analyze the model.Sample node state trajectory with default number of samplesSample node state trajectoryvoidbooleanChecks whether the given model is supported by the NC solverbooleanThe normalizing-constant solver is exact on the same product-form class that pfqn_sens differentiates, so getSensitivityTable uses the analytic branch.static booleansupportsModel(Network model) Static method to check whether the given model is supported by the NC solver.supportsModelMethod(String method) Method-aware gate.Methods inherited from class jline.solvers.NetworkSolver
aCaT, aCT, aCT, aCT, aCT, aCT, aCT, aIT, aLT, aNCT, aNCT, aNCT, aNCT, aNCT, aNCT, aNT, aNT, aNT, aNT, aNT, aNT, aOT, aRLT, aST, aST, aST, aT, aT, aT, aT, aT, aT, avg, avg, avg, avgArvR, avgArvRChain, avgArvRHandles, avgChain, avgChainT, avgChainT, avgChainT, avgChainT, avgChainT, avgChainT, avgChainTable, avgChainTable, avgChainTable, avgChainTable, avgChainTable, avgChainTable, avgHandles, avgNode, avgNodeArvRChain, avgNodeChain, avgNodeChainT, avgNodeChainT, avgNodeChainT, avgNodeChainT, avgNodeChainT, avgNodeChainT, avgNodeChainTable, avgNodeChainTable, avgNodeChainTable, avgNodeChainTable, avgNodeChainTable, avgNodeChainTable, avgNodeQLenChain, avgNodeResidTChain, avgNodeRespTChain, avgNodeT, avgNodeT, avgNodeT, avgNodeT, avgNodeT, avgNodeT, avgNodeTable, avgNodeTable, avgNodeTable, avgNodeTable, avgNodeTable, avgNodeTable, avgNodeTputChain, avgNodeUtilChain, avgQLen, avgQLenChain, avgQLenHandles, avgResidT, avgResidTChain, avgResidTHandles, avgRespT, avgRespTChain, avgRespTHandles, avgSys, avgSysRespT, avgSysT, avgSysT, avgSysT, avgSysTable, avgSysTable, avgSysTable, avgSysTput, avgT, avgT, avgT, avgT, avgT, avgT, avgTable, avgTable, avgTable, avgTable, avgTable, avgTable, avgTput, avgTputChain, avgTputHandles, avgUtil, avgUtilChain, avgUtilHandles, avgWaitT, bindingCapacityReason, cacheAvgT, cdfPassT, cdfPassT, cdfRespT, cdfRespT, chainAvgT, chainAvgT, chainAvgT, chainAvgT, chainAvgT, chainAvgT, citations, getAllSolvers, getAvg, getAvg, getAvg, getAvgArvR, getAvgArvRChain, getAvgArvRHandles, getAvgCacheT, getAvgCacheTable, getAvgChain, getAvgChainTable, getAvgChainTable, getAvgChainTable, getAvgChainTable, getAvgChainTable, getAvgChainTable, getAvgHandles, getAvgItemT, getAvgItemTable, getAvgLossT, getAvgLossTable, getAvgNode, getAvgNodeArvRChain, getAvgNodeChain, getAvgNodeChainTable, getAvgNodeChainTable, getAvgNodeChainTable, getAvgNodeChainTable, getAvgNodeChainTable, getAvgNodeChainTable, getAvgNodeQLenChain, getAvgNodeResidTChain, getAvgNodeRespTChain, getAvgNodeTable, getAvgNodeTable, getAvgNodeTable, getAvgNodeTable, getAvgNodeTable, getAvgNodeTable, getAvgNodeTputChain, getAvgNodeUtilChain, getAvgOrbit, getAvgOrbitT, getAvgOrbitTable, getAvgQLen, getAvgQLenChain, getAvgQLenHandles, getAvgRegionLossT, getAvgRegionLossTable, getAvgResidT, getAvgResidTChain, getAvgResidTHandles, getAvgRespT, getAvgRespTChain, getAvgRespTHandles, getAvgSys, getAvgSys, getAvgSys, getAvgSysRespT, getAvgSysTable, getAvgSysTable, getAvgSysTable, getAvgSysTput, getAvgT, getAvgT, getAvgT, getAvgT, getAvgT, getAvgT, getAvgTable, getAvgTable, getAvgTable, getAvgTable, getAvgTable, getAvgTable, getAvgTput, getAvgTputChain, getAvgTputHandles, getAvgUtil, getAvgUtilChain, getAvgUtilHandles, getAvgWaitT, getCdfPassT, getCdfPassT, getCdfRespT, getChainAvgT, getChainAvgT, getChainAvgT, getChainAvgT, getChainAvgT, getChainAvgT, getDeadlineTable, getLibrariesUsed, getModel, getMomentChainT, getMomentChainT, getMomentChainT, getMomentChainTable, getMomentChainTable, getMomentChainTable, getMomentStationT, getMomentStationT, getMomentStationT, getMomentStationTable, getMomentStationTable, getMomentStationTable, getMomentT, getMomentT, getMomentT, getMomentTable, getMomentTable, getMomentTable, getNodeAvgT, getNodeAvgT, getNodeAvgT, getNodeAvgT, getNodeAvgT, getNodeAvgT, getNodeChainAvgT, getNodeChainAvgT, getNodeChainAvgT, getNodeChainAvgT, getNodeChainAvgT, getNodeChainAvgT, getPerctRespT, getProb, getProb, getProbAggr, getProbAggr, getProbMarg, getSensitivityT, getSensitivityT, getSensitivityTable, getSensitivityTable, getStageT, getStageT, getStageTable, getStageTable, getSysAvgT, getSysAvgT, getSysAvgT, getTranAvg, getTranCdfPassT, getTranCdfPassT, getTranCdfRespT, getTranCdfRespT, getTranHandles, hasAvgResults, hasDistribResults, hasTranResults, initFromSolver, initHandles, itemAvgT, libraries, lossAvgT, mCT, mCT, mCT, model, momentChainT, momentChainT, momentChainT, momentStationT, momentStationT, momentStationT, momentT, momentT, momentT, mST, mST, mST, mT, mT, mT, nodeAvgT, nodeAvgT, nodeAvgT, nodeAvgT, nodeAvgT, nodeAvgT, nodeChainAvgT, nodeChainAvgT, nodeChainAvgT, nodeChainAvgT, nodeChainAvgT, nodeChainAvgT, options, orbitAvgT, print, prob, prob, probAggr, probAggr, probMarg, probMarg, probNormConstAggr, probSys, probSysAggr, regionLossAvgT, runAnalyzerChecks, sample, sampleAggr, sampleSys, sampleSysAggr, sensitivityT, sensitivityT, setAvgHandles, setAvgResults, setDistribResults, setLang, setModel, setTranAvgResults, setTranHandles, setTranProb, showLibraryAttribution, sT, sT, stageT, stageTable, sysAvgT, sysAvgT, sysAvgT, tranAvg, tranCdfPassT, tranCdfPassT, tranCdfRespT, tranCdfRespT, tranHandlesMethods inherited from class jline.solvers.Solver
getMethodFeatureSet, getName, getOptions, getResults, hasResults, isJavaAvailable, isStochastic, isValidOption, listValidOptions, parseOptions, parseOptions, reset, resetRandomGeneratorSeed, selectMethod, setChecks, setOptions, timeExceeded
-
Constructor Details
-
SolverNC
-
SolverNC
-
SolverNC
-
SolverNC
-
-
Method Details
-
supportsExactSensitivity
public boolean supportsExactSensitivity()The normalizing-constant solver is exact on the same product-form class that pfqn_sens differentiates, so getSensitivityTable uses the analytic branch.- Overrides:
supportsExactSensitivityin classNetworkSolver- Returns:
- true
-
hasRetrievalCache
True if the model contains a Cache equipped with a delayed-hit retrieval system. -
defaultOptions
-
getFeatureSet
Returns the feature set supported by the NC solver- Returns:
- - the feature set supported by the NC solver
-
getProb
-
getProbAggr
Get aggregated probability for a specific node and state- Parameters:
node- The node to compute probability forstate_a- The aggregated state (optional, uses current state if null)- Returns:
- The aggregated probability value
-
getProbAggr
Get aggregated probability for a specific node using current state- Parameters:
node- The node to compute probability for- Returns:
- The aggregated probability value
-
getProbMarg
Marginal queue-length distribution at a station, routing the CLI's (station, class) call to the exact procomom/enumeration path ingetProbMarg(Node). The class index is not used: NC returns the per-station total-jobs marginal.- Overrides:
getProbMargin classNetworkSolver- Parameters:
ist- station indexjobclass- class index (unused; marginal is over total jobs)state_m- optional state (unused)- Returns:
- the exact marginal probability distribution
-
getProbMarg
-
getProbNormConstAggr
Get the log normalization constant for aggregated probabilities- Overrides:
getProbNormConstAggrin classNetworkSolver- Returns:
- The log normalization constant
- Throws:
IllegalAccessException- if analysis fails
-
getProbSys
Get system-wide joint probability- Overrides:
getProbSysin classNetworkSolver- Returns:
- The joint probability value
-
getProbSysAggr
Get aggregated system-wide joint probability- Overrides:
getProbSysAggrin classNetworkSolver- Returns:
- The aggregated joint probability value
-
getStruct
-
setStruct
-
runAnalyzer
Description copied from class:SolverExecutes the solver algorithm to analyze the model. This abstract method must be implemented by concrete solver classes.- Specified by:
runAnalyzerin classSolver- Throws:
IllegalAccessException- if access to required resources is denied
-
getNormalizingConstant
Get the normalizing constant and its logarithm- Returns:
- NormalizingConstantResult containing the normalizing constant and its logarithm
- Throws:
IllegalAccessException- if analysis fails
-
listValidMethods
List all valid solution methods for this solver- Returns:
- array of valid method names
-
meOpen
Maximum Entropy algorithm for Open Queueing Networks. Applies the ME algorithm from Kouvatsos (1994) to the model. Only supports open queueing networks (no closed classes).- Returns:
- NCResult containing ME algorithm results
-
memUnsupportedReason
Returns null when the Maximum Entropy Method (Kouvatsos 1994) supports the features of the model described by sn (node types, class switching, scheduling, source presence); otherwise a message describing the first unsupported feature. Open/closed class membership is checked separately on the model; this overload assumes the open-network variant. -
memUnsupportedReason
Returns null when the Maximum Entropy Method (Kouvatsos 1994) supports the features of the model described by sn; otherwise a message describing the first unsupported feature. Open models (Section 3.2) allow Source, Queue, Delay and Sink nodes with GE/GE/1, GE/GE/c and GE/GE/inf building blocks; closed models (Section 3.3) allow Queue and Delay nodes with G/G/1 and G/G/inf building blocks only, so finite multiserver stations are rejected. -
memUnsupportedReason
Feature check for the Maximum Entropy Method given the class composition of the model: hasOpen/hasClosed flag the presence of open and closed classes (both true for mixed models). Returns null when supported, otherwise the first unsupported feature found. -
memBufferSize
Physical buffer size of a station in jobs, in service included: the tighter of the station capacity and the sum of the per-class capacities, infinite when the station is unbounded.Only a buffer that can actually BIND is reported. refreshCapacity derives a FINITE classcap (the chain population) for EVERY closed model, so a plain finiteness test would report a buffer at every station of every closed model; a capacity at least as large as the total population can never refuse a job and is returned as infinite. The population sum is infinite as soon as one class is open, so any finite capacity reachable by an open class binds.
- Parameters:
sn- network structureist- station index- Returns:
- buffer size in jobs
-
memDropRule
Drop rule declared at a station for the first class, defaulting to Drop, which is what refreshCapacity assigns to a finite buffer reachable by an open class.- Parameters:
sn- network structureist- station index- Returns:
- the drop strategy in force at the station
-
memHasFiniteBuffers
True when the model is a single-class open network carrying a finite buffer that MEM represents explicitly, as a censored GE/GE/c/0;N queue. Callers use it to bypass the product-form capacity gate, which exists because the other NC methods have no representation of a buffer.- Parameters:
sn- network structure- Returns:
- true when the finite-buffer MEM path applies
-
meClosed
Maximum Entropy algorithm for Closed Queueing Networks (Kouvatsos 1994, Section 3.3): pseudo-open decomposition followed by a convolution over the population lattice, iterated on the flow (work rate) equations.- Returns:
- NCResult containing the closed ME algorithm results
-
meClosed
Maximum Entropy algorithm for Closed Queueing Networks with custom options (Kouvatsos 1994, Section 3.3).- Parameters:
meOptions- options for the ME algorithm- Returns:
- NCResult containing the closed ME algorithm results
-
meMixed
Maximum Entropy algorithm for Mixed Queueing Networks: composition of the open (Section 3.2) and closed (Section 3.3) algorithms with product-form-style conditioning.- Returns:
- NCResult containing the mixed ME algorithm results
-
meMixed
Maximum Entropy algorithm for Mixed Queueing Networks with custom options.- Parameters:
meOptions- options for the ME algorithm- Returns:
- NCResult containing the mixed ME algorithm results
-
meOpen
Maximum Entropy algorithm for Open Queueing Networks with custom options. Applies the ME algorithm from Kouvatsos (1994) to the model. Only supports open queueing networks (no closed classes).- Parameters:
meOptions- Options for the ME algorithm- Returns:
- NCResult containing ME algorithm results
-
sample
Sample node state trajectory- Parameters:
node- The node to samplenumEvents- Number of samples to generate- Returns:
- Sample result containing state trajectory
-
sample
Sample node state trajectory with default number of samples- Parameters:
node- The node to sample- Returns:
- Sample result containing state trajectory
-
supports
Checks whether the given model is supported by the NC solver -
memFiniteBufferPath
True when method='mem' has been requested on a model whose finite buffers MEM carries explicitly. Callers use it to skip the product-form capacity gate, which exists only because the other NC methods cannot represent a buffer.- Parameters:
sn- network structureoptions- solver options, whose method selects MEM- Returns:
- true when the finite-buffer MEM path applies
-
resolveMethod
Feature-driven resolution of method='default': an open network with non-Markovian (non-unit SCV) variability within the MEM feature set is solved by the Maximum Entropy Method by default, since the normalizing-constant path would silently exponentialize it. Mirrors the dispatch in runAnalyzer and the MATLAB/Python SolverNC.resolveMethod.- Overrides:
resolveMethodin classSolver- Parameters:
options- the solver options- Returns:
- the concrete method name
-
supportsModelMethod
Method-aware gate. MEM (Kouvatsos maximum entropy) has structural applicability rules beyond a flat feature set (open-only, Source/Queue/ Delay/Sink, non-priority scheduling); delegate to memUnsupportedReason, which returns a precise reason (null when supported). All other NC methods use the coarse product-form feature gate.- Overrides:
supportsModelMethodin classSolver- Parameters:
method- the concrete method name- Returns:
- empty string if supported, else the offending reason
-
isStochasticMethod
NC is deterministic except for the Monte Carlo integration methods (mci/imci), logistic sampling (ls), and the sampling method, whose estimates depend on the random seed. Method names are tokenized so that runtime-resolved names such as "default/imci" and prefixed names such as "nc.ls" classify correctly.- Overrides:
isStochasticMethodin classSolver- Parameters:
method- the method name to classify- Returns:
- true if the method returns stochastic estimates
-
supportsModel
Static method to check whether the given model is supported by the NC solver. This allows checking support without creating a solver instance.- Parameters:
model- - the network model- Returns:
- - true if the model is supported, false otherwise
-
getCdfRespT
Get cumulative distribution function of response times at FCFS and delay nodes- Parameters:
R- Optional response time handles (currently unused in this implementation)- Returns:
- Response time distribution matrix for each node and class
-
getCdfRespT
Get cumulative distribution function of response times with default parameters- Overrides:
getCdfRespTin classNetworkSolver- Returns:
- Response time distribution matrix for each node and class
-