Class SolverAG

Direct Known Subclasses:
AG

public class SolverAG extends NetworkSolver
Agent-based (RCAT) solver.

Solves a network by the Reversed Compound Agent Theorem: every (station, class) pair becomes an isolated agent, and the agents are coupled ONLY through the reversed rates of the synchronizing actions. Agent k carries

Q_k(x) = L_k + sum_{c passive at k} x_c Pb_c
and publishes, for every action it is active on, a scalar read off its own stationary vector. The fixed point over that scalar vector is the whole analysis.

Because the coupling is that thin, the sweep parallelises exactly rather than approximately: see AgExec for the threads and cluster execution backends and why they walk the same iterates as the serial loop.

Methods: inap, inapplus, inapinf, and the vestigial exact alias which warns and falls back to inap. Per Marin, Rota Bulo and Balsamo, "A Numerical Algorithm for the Decomposition of Cooperating Structured Markov Processes", MASCOTS 2012.

These methods used to live in SolverMAM. They are the only algorithms in LINE that read sn.issignal, so the G-network feature names belong here and to no other solver.

  • Constructor Details

  • Method Details

    • defaultOptions

      public static AGOptions defaultOptions()
    • getStruct

      public NetworkStruct getStruct()
    • listValidMethods

      public List<String> listValidMethods()
    • listValidMethods

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

      public static FeatureSet getFeatureSet()
      The RCAT feature envelope. The G-network names live here because Solver_ag_build is the only code in LINE that reads sn.issignal.
    • methodFeatureSet

      public static FeatureSet methodFeatureSet(String method)
      Every AG method is the same decomposition differing only in how the reversed rate is read off an agent, so they share one envelope; the genuine restrictions are structural and applied in supportsModelMethod(String).
    • getMethodFeatureSet

      public FeatureSet getMethodFeatureSet(String method)
      Description copied from class: Solver
      Per-method feature set, or null to signal "this solver does not diverge per method" (the coarse supports(model) is then used, preserving any structural checks it carries). Divergent solvers (e.g. MVA, MAM, NC) override this to return the base envelope with per-method deltas applied.
      Overrides:
      getMethodFeatureSet in class Solver
      Parameters:
      method - the concrete method name
      Returns:
      the per-method FeatureSet, or null
    • 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
    • rcatSupportsProcess

      public static boolean rcatSupportsProcess(ProcessType pt)
      True when the RCAT analyzers can give a process of this type a phase dimension: after snNonmarkovToPh (which AG runs with phfit='ph' and preserveDet=false) it must hold a genuine (D0,D1) pair with non-negative off-diagonal rates and a single arrival per epoch.

      The list is an ALLOW-list on purpose: a process type nobody has checked against this construction must be refused, not answered. Compare BY NAME across codebases, never by the raw ordinal.

    • supportsModelMethod

      public String supportsModelMethod(String method)
      Description copied from class: Solver
      Fine, method-aware gate. Returns an empty string when the model fits the concrete METHOD, else a human-readable reason. Base behavior derives the answer from getMethodFeatureSet(method); when that is null the solver's own supports(model) is used. Solvers with non-feature-set structural per-method rules override this.
      Overrides:
      supportsModelMethod in class Solver
      Parameters:
      method - the concrete method name
      Returns:
      empty string if supported, else the offending reason
    • 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
    • getAGResult

      public AGResult getAGResult()
      The converged reversed rates and the agents they induce, in addition to the mean measures returned by getAvg.

      Mean values alone hide the objects the decomposition is built on. The reversed rates ARE the coupling between agents -- one scalar per synchronizing action -- so a run cannot be checked against a published derivation, or against a product-form condition, without them.

    • solverType

      public static SolverType solverType()