Class FJTagTransform

java.lang.Object
jline.solvers.tr.FJTagTransform

public final class FJTagTransform extends Object
Fork-join TAG AUGMENTATION, the transform/lift pair shared by CTMC and SSA.

ModelAdapter.fjtag is the OTHER fork-join route: where mmt and ht drive an outer fixed point for MVA, NC and FLD (see jline.solvers.fj.FJFixedPoint), the tag augmentation is EXACT and single pass. It rewrites the model so each sibling branch carries its own auxiliary class, the solver runs unchanged on that struct, and the auxiliary columns are folded back at the end.

This is deliberately NOT built on the FJFixedPoint shape. That driver owns a loop and reaches the inner solve through FJFixedPoint.InnerSolve because MMT re-solves a transformed model repeatedly. fjtag substitutes the struct and then the CALLER'S OWN analyzer runs on it to completion: there is no callback seam and no second pass, so the reusable unit is the transform/lift PAIR, not a driver.

Mirrors MATLAB matlab/src/solvers/TR/solver_tr_fjtag_analyzer.m and python line_solver/solvers/fjtag_transform.py.

  • Method Details

    • expand

      public static FJTagTransform.Context expand(Network model, NetworkStruct sn, VerboseLevel verbose, String solverLabel)
      Builds the tag-augmented struct the solver is to run on.

      Solver-specific refusals (a CTMC transient, an SSA parallel method) stay at the call site, ahead of this, exactly as they did before.

      Parameters:
      model - the fork-join model
      sn - its struct, before augmentation
      verbose - the caller's verbosity, for the debug line
      solverLabel - the solver name to print, e.g. "CTMC"
      Returns:
      the augmentation context
    • lift

      public static FJTagTransform.Lifted lift(FJTagTransform.Context ctx, Matrix QN, Matrix UN, Matrix RN, Matrix TN, Matrix CN, Matrix XN, AvgHandle T)
      Folds the auxiliary sibling classes back onto the original ones.

      The lift must see the ORIGINAL struct, not the augmented one: a Place counts tokens rather than firings, so snPnAvgRates has to rescale before the arrival rates are derived, and the class indices it uses are the original ones. A Join then reports the per-sibling waiting time QN/AN (the JMT convention), since it sees one arrival per sibling for every job it releases.

      The caller is responsible for restoring its own sn reference to FJTagTransform.Context.snOrig afterwards: a Java NetworkStruct is a reference where the MATLAB struct is a value copy.