Class SolverMAM

Direct Known Subclasses:
MAM

public class SolverMAM extends NetworkSolver
Solver for Matrix Analytic Methods (MAM) applied to queueing networks.

SolverMAM implements matrix-analytic techniques for analyzing queueing networks with Markovian arrival processes (MAP), phase-type service distributions, and other non-exponential characteristics that go beyond product-form assumptions.

Key MAM solver capabilities:

  • Markovian Arrival Process (MAP) modeling
  • Phase-type (PH) service distribution analysis
  • Matrix-geometric solution methods
  • Quasi-Birth-Death (QBD) process analysis
  • Non-product-form queueing network solutions
  • Passage time distribution computation

This solver is particularly useful for networks with correlated arrivals, general service times, and complex dependency structures that cannot be analyzed using traditional product-form methods.

Since:
1.0
See Also:
  • Constructor Details

  • Method Details

    • defaultOptions

      public static SolverOptions defaultOptions()
    • getFeatureSet

      public static FeatureSet getFeatureSet()
      Returns the feature set supported by the MAM solver
      Returns:
      - the feature set supported by the MAM solver
    • getStruct

      public NetworkStruct getStruct()
    • listValidMethods

      public List<String> listValidMethods(Network model)
    • listValidMethods

      public List<String> listValidMethods()
    • getTranAvg

      public void getTranAvg()
      Description copied from class: NetworkSolver
      Computes transient average station metrics over the specified time interval. The timespan is defined in the solver options.
      Overrides:
      getTranAvg in class NetworkSolver
    • runAnalyzer

      public void runAnalyzer()
      Description copied from class: Solver
      Executes the solver algorithm to analyze the model. This abstract method must be implemented by concrete solver classes.
      Specified by:
      runAnalyzer in class Solver
    • supports

      public boolean supports(Network model)
      Description copied from class: Solver
      Checks if this solver supports the given network model. Default implementation returns true; subclasses should override to provide specific feature validation.
      Overrides:
      supports in class Solver
      Parameters:
      model - the network model to check
      Returns:
      true if the model is supported, false otherwise
    • getCdfRespT

      public Ret.DistributionResult getCdfRespT(AvgHandle R)
      Returns cumulative distribution functions of response times at steady-state. This method computes response time distributions using matrix-analytic methods.
      Overrides:
      getCdfRespT in class NetworkSolver
      Parameters:
      R - response time handles (optional)
      Returns:
      result containing CDFs for response times
    • getCdfRespT

      public Ret.DistributionResult getCdfRespT()
      Returns cumulative distribution functions of response times at steady-state. Uses default response time handles.
      Overrides:
      getCdfRespT in class NetworkSolver
      Returns:
      result containing CDFs for response times
    • getCdfPassT

      public Ret.DistributionResult getCdfPassT(AvgHandle R)
      Returns cumulative distribution functions of passage times at steady-state.
      Overrides:
      getCdfPassT in class NetworkSolver
      Parameters:
      R - response time handles (optional)
      Returns:
      result containing CDFs for passage times
    • getCdfPassT

      public Ret.DistributionResult getCdfPassT()
      Returns cumulative distribution functions of passage times at steady-state. Uses default response time handles.
      Overrides:
      getCdfPassT in class NetworkSolver
      Returns:
      result containing CDFs for passage times
    • getTranCdfPassT

      public Ret.DistributionResult getTranCdfPassT(AvgHandle R)
      Returns cumulative distribution functions of passage times during transient analysis.
      Overrides:
      getTranCdfPassT in class NetworkSolver
      Parameters:
      R - response time handles (optional)
      Returns:
      result containing transient CDFs for passage times
    • getTranCdfPassT

      public Ret.DistributionResult getTranCdfPassT()
      Returns cumulative distribution functions of passage times during transient analysis. Uses default response time handles.
      Overrides:
      getTranCdfPassT in class NetworkSolver
      Returns:
      result containing transient CDFs for passage times
    • getProbMarg

      public Ret.ProbabilityResult getProbMarg(int node, int jobclass, Matrix state_m)
      Get marginal queue-length probability distribution for a job class.

      Computes the probability distribution P(n jobs of class r) for n=0,1,...,N(r) using MMAPPH1FCFS from BUTools.

      Current limitations:

      • Only supported for single queue models
      • Requires Queue station with FCFS scheduling
      Overrides:
      getProbMarg in class NetworkSolver
      Parameters:
      node - Station/node index (0-based)
      jobclass - Job class index (0-based)
      state_m - Optional state levels to query (null for all states, 0-based indexing)
      Returns:
      Probability result containing marginal probabilities
      Throws:
      IllegalArgumentException - if station or class index is invalid
      UnsupportedOperationException - if model structure is not supported
    • getProbMarg

      public Ret.ProbabilityResult getProbMarg(int node, int jobclass)
      Get marginal queue-length probability distribution for a job class (all states).

      NOT YET IMPLEMENTED - This method is a stub.

      Overrides:
      getProbMarg in class NetworkSolver
      Parameters:
      node - Station/node index (0-based)
      jobclass - Job class index (0-based)
      Returns:
      Probability result - currently throws UnsupportedOperationException
      Throws:
      UnsupportedOperationException - Always thrown - method not yet implemented
      See Also:
    • getPerctRespT

      public List<MainFJ.FJPercentileResult> getPerctRespT(double[] percentiles)
      Get response time percentiles from Fork-Join analysis

      This method retrieves percentile values computed by the FJ_codes algorithm for Fork-Join queueing systems. It automatically detects FJ topology and computes percentiles using the algorithm from "Beyond the Mean in Fork-Join Queues" (IFIP Performance 2015).

      Requirements:

      • Model must have valid Fork-Join topology: Source → Fork → K Queues → Join → Sink
      • Solver must have been run first (runAnalyzer() called)
      • Homogeneous service distributions across parallel queues
      Parameters:
      percentiles - Array of percentile levels (0-100 scale, e.g., {50, 90, 95, 99})
      Returns:
      List of FJPercentileResult, one per job class, containing: - jobClass: class index - percentiles: requested percentile levels - values: computed percentile values - K: number of parallel queues - method: algorithm used (e.g., "FJ_NARE")
      Throws:
      IllegalStateException - if model is not Fork-Join or solver not run
    • getPerctRespT

      public List<MainFJ.FJPercentileResult> getPerctRespT()
      Get response time percentiles using default values [50, 90, 95, 99]
      Returns:
      List of FJPercentileResult for default percentiles
      Throws:
      IllegalStateException - if model is not Fork-Join or solver not run
      See Also: