Class PetriTerms

java.lang.Object
jline.solvers.fluid.petri.PetriTerms

public class PetriTerms extends Object
Event-based representation of the fluid marking process of a stochastic Petri net. Java twin of the MATLAB fluid_petri_terms.

A GSPN is already a density-dependent Markov population process, which is the object the moment-closure family of SolverFluid is built on: the marking is the population, a transition mode is a reaction, its incidence column is the jump, and the rate law lambda*min(enabling degree, servers) is the same min() non-linearity the min-normal closure exists to smooth. Nothing about the closure changes here; only where the drift comes from.

    dx/dt = D * r(x, Sigma, phi, mu)

THE STATE, x = [ m ; y ].

  • m(p,k) token mass of class k at place p. One coordinate per (place, class) pair some arc touches, the initial marking loads, or a Source feeds; a pair nothing reaches is dropped rather than carried as a null direction of the Newton system.
  • y(j,h) the number of mode-j servers running in phase h, for a mode whose firing time has more than one phase. Their SUM is not free: the ENABLE synchronization latches it instantaneously to min(enabling degree, servers), so the latch is an ALGEBRAIC row with one free-sign unknown mu_j and the phase split evolves differentially. CARRYING THE DISTRIBUTION INSTEAD OF THE COUNT LOOKS TIDIER AND IS WRONG: the resulting equation is missing a term and agrees with the count form only AT a fixed point.

There is no Source coordinate: an exogenous arrival is a CONSTANT-propensity event depositing one token, as it is in the NRM SPN runner. There is no Sink coordinate either: a firing arc into a sink is mass leaving the net.

THE EVENTS, one column of D each: kind 1 a firing of mode j out of phase h into phase h'; kind 2 an internal phase change; kind 3 an exogenous arrival; kind 4 a firing of an IMMEDIATE mode, at the algebraic flow phi_j; kind 5 the server latch of a multi-phase mode, at the free-sign unknown mu_j.

  • Field Details

    • M

      public int M
    • K

      public int K
    • I

      public int I
    • places

      public List<Integer> places
    • transitions

      public List<Integer> transitions
    • namesNode

      public List<String> namesNode
    • nstate

      public int nstate
    • nm

      public int nm
    • pidx

      public int[][] pidx
      (node, class) -> state coordinate, -1 where the pair carries none.
    • coordNode

      public int[] coordNode
    • coordClass

      public int[] coordClass
    • coordStation

      public int[] coordStation
    • modes

      public List<PetriMode> modes
    • timedIdx

      public List<Integer> timedIdx
    • immIdx

      public List<Integer> immIdx
    • D

      public Matrix D
    • rateBase

      public double[] rateBase
    • nev

      public int nev
    • evKind

      public int[] evKind
    • evMode

      public int[] evMode
    • evPhase

      public int[] evPhase
    • evTo

      public int[] evTo
    • evStation

      public int[] evStation
    • evClass

      public int[] evClass
    • immCol

      public int[] immCol
    • latchCol

      public int[] latchCol
    • stochCol

      public int[] stochCol
      The DIFFUSION counts the stochastic events only: an immediate flow and a server latch are both the limit of an infinitely fast mechanism whose fluctuation is slaved, not a Poisson stream with an intensity.
    • latchMode

      public List<Integer> latchMode
    • covIdx

      public int[] covIdx
      THE COVARIANCE COVERS EVERY COORDINATE, phases included: the rate of a multi-phase mode is linear in y and reads no marking, so dropping the phases would sever that mode's whole restoring force.
    • covPairs

      public int[][] covPairs
    • npair

      public int npair
    • pairIndex

      public int[][] pairIndex
      (a,b) -> closure unknown index, symmetric, -1 where the drift never reads it.
    • immColOf

      public int[] immColOf
    • consumers

      public Map<Integer,List<Integer>> consumers
    • consumerW

      public Map<Integer,List<Double>> consumerW
    • producers

      public Map<Integer,List<Integer>> producers
    • x0

      public double[] x0
    • m0full

      public double[][] m0full
    • options

      public SolverOptions options
  • Constructor Details

    • PetriTerms

      public PetriTerms()
  • Method Details