Class FJTagTransform
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.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic final classWhat the expand phase hands the lift phase.static final classThe lifted metrics, in ORIGINAL class coordinates. -
Method Summary
Modifier and TypeMethodDescriptionstatic FJTagTransform.Contextexpand(Network model, NetworkStruct sn, VerboseLevel verbose, String solverLabel) Builds the tag-augmented struct the solver is to run on.static FJTagTransform.Liftedlift(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.
-
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 modelsn- its struct, before augmentationverbose- the caller's verbosity, for the debug linesolverLabel- 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
snPnAvgRateshas 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 timeQN/AN(the JMT convention), since it sees one arrival per sibling for every job it releases.The caller is responsible for restoring its own
snreference toFJTagTransform.Context.snOrigafterwards: a JavaNetworkStructis a reference where the MATLAB struct is a value copy.
-