public class PNSimulator
extends java.lang.Object
ProM is no simulator!! By all means use CPNTools (http://cpntools.org) if you want to have a feature-rich stable simulation and analysis tool for all kinds of Petri nets.
Modifier and Type | Field and Description |
---|---|
protected org.apache.commons.math3.distribution.RealDistribution |
arrivalDistribution |
protected LimitedTreeMap<java.lang.Integer,java.util.Map<org.processmining.models.graphbased.directed.petrinet.elements.Transition,org.apache.commons.math3.distribution.RealDistribution>> |
cachedDurations
maps from the prediction time point (long since start of epoch) to a cache storing the predictions for each transition
|
static java.lang.String |
CONCEPT_INSTANCE |
static java.lang.String |
CONCEPT_NAME |
static java.lang.String |
CONCEPT_SIMULATED |
protected long |
lastFiringTime
Stores the time of the last step in the simulation.
|
static java.lang.String |
LIFECYCLE_TRANSITION |
static java.lang.String |
LOCATION_ROOM |
protected double |
logProbabilityOfCurrentTrace |
protected org.processmining.models.semantics.petrinet.Marking |
oneMarking |
protected static java.util.Random |
random |
static java.lang.String |
SIMULATED_LOG_PROBABILITY |
static java.lang.String |
TIME_TIMESTAMP |
static java.lang.String |
TRANSITION_COMPLETE |
protected java.util.Map<org.processmining.models.graphbased.directed.petrinet.elements.Transition,java.lang.Long> |
transitionRemainingTimes
Each transition has it's remaining time stored, once it becomes active in a marking.
|
protected boolean |
useOnlyPastTrainingData
Needs to be explicitly set by the caller.
|
Constructor and Description |
---|
PNSimulator() |
Modifier and Type | Method and Description |
---|---|
protected void |
addAllDifferentTracesToLog(org.deckfour.xes.model.XLog log,
org.processmining.models.graphbased.directed.petrinet.PetrinetGraph petriNet,
java.util.LinkedList<VisitState> statesToVisit,
org.processmining.models.semantics.Semantics<org.processmining.models.semantics.petrinet.Marking,org.processmining.models.graphbased.directed.petrinet.elements.Transition> semantics,
java.util.Map<java.lang.String,java.util.Set<java.lang.Integer>> numberOfDecisionTransitions,
PNSimulatorConfig config,
org.processmining.models.semantics.petrinet.Marking endPlaces) |
protected org.deckfour.xes.model.XEvent |
createSimulatedEvent(org.processmining.models.graphbased.directed.petrinet.elements.Transition transition,
org.processmining.models.graphbased.directed.petrinet.PetrinetGraph net,
long firingTime,
java.lang.String instance) |
protected org.deckfour.xes.model.XTrace |
createTrace(long i,
PNSimulatorConfig config) |
protected org.processmining.models.semantics.petrinet.Marking |
getEndPlaces(org.processmining.models.graphbased.directed.petrinet.PetrinetGraph petriNet) |
double |
getLogProbabilityOfLastTrace() |
protected java.util.Date |
getNextArrivalDate(java.util.Date lastTime,
StochasticNet.TimeUnit unitFactor) |
static boolean |
getOnlyImmediateTransitions(java.util.Collection<org.processmining.models.graphbased.directed.petrinet.elements.Transition> transitions,
boolean immediate)
Checks whether all transitions in set are immediate (if flag onlyImmediate is true)
or whether all transitions in set are timed (if flag onlyImmediate is false).
|
protected java.lang.Object |
getReturnObject(org.deckfour.xes.model.XTrace trace,
long lastFiringTime,
PNSimulatorConfig config) |
long |
getTransitionRemainingTime(org.processmining.models.graphbased.directed.petrinet.elements.Transition t,
StochasticNet.TimeUnit unitFactor,
java.util.Map<org.processmining.models.graphbased.directed.petrinet.elements.Transition,java.lang.Long> transitionRemainingTimes,
long startOfTransition,
double positiveConstraint,
LimitedTreeMap<java.lang.Integer,java.util.Map<org.processmining.models.graphbased.directed.petrinet.elements.Transition,org.apache.commons.math3.distribution.RealDistribution>> cachedDurations,
boolean useOnlyPastTrainingData)
Checks if the transition has already a running task (depending on the memory policy, this can be true) and returns that value, or
samples a new value freshly from the distribution.
|
static org.processmining.models.graphbased.directed.petrinet.elements.Transition |
getTransitionWithIndex(java.util.Collection<org.processmining.models.graphbased.directed.petrinet.elements.Transition> transitions,
int index) |
protected void |
insertEvent(java.lang.String instanceId,
org.deckfour.xes.model.XTrace trace,
org.processmining.models.graphbased.directed.petrinet.PetrinetGraph net,
Triple<org.processmining.models.graphbased.directed.petrinet.elements.Transition,java.lang.Long,java.lang.Double> transitionAndDuration,
long firingTime,
PNSimulatorConfig config) |
protected boolean |
isFinal(org.processmining.models.semantics.petrinet.Marking currentMarking,
org.processmining.models.semantics.petrinet.Marking endPlaces) |
protected boolean |
isOneBounded(org.processmining.models.semantics.petrinet.Marking currentMarking) |
Triple<org.processmining.models.graphbased.directed.petrinet.elements.Transition,java.lang.Long,java.lang.Double> |
pickTransition(org.processmining.models.semantics.Semantics<org.processmining.models.semantics.petrinet.Marking,org.processmining.models.graphbased.directed.petrinet.elements.Transition> semantics,
java.util.Collection<org.processmining.models.graphbased.directed.petrinet.elements.Transition> transitions,
java.util.Map<org.processmining.models.graphbased.directed.petrinet.elements.Transition,java.lang.Long> transitionRemainingTimes,
LimitedTreeMap<java.lang.Integer,java.util.Map<org.processmining.models.graphbased.directed.petrinet.elements.Transition,org.apache.commons.math3.distribution.RealDistribution>> cachedDurationDistributions,
org.processmining.models.graphbased.directed.petrinet.PetrinetGraph petriNet,
PNSimulatorConfig config,
long startOfTransition,
long constraint,
boolean usePositiveTimeContraint,
boolean useOnlyPastTrainingData) |
static org.processmining.framework.util.Pair<java.lang.Integer,java.lang.Double> |
pickTransitionAccordingToWeights(java.util.Collection<org.processmining.models.graphbased.directed.petrinet.elements.Transition> transitions,
java.util.Date currentTime,
org.processmining.models.semantics.Semantics<org.processmining.models.semantics.petrinet.Marking,org.processmining.models.graphbased.directed.petrinet.elements.Transition> semantics,
boolean useOnlyPastTrainingData) |
protected double |
sampleDurationForTransition(double positiveConstraint,
long startOfTransition,
TimedTransition timedT,
StochasticNet.TimeUnit unitFactor,
LimitedTreeMap<java.lang.Integer,java.util.Map<org.processmining.models.graphbased.directed.petrinet.elements.Transition,org.apache.commons.math3.distribution.RealDistribution>> cachedDurations,
boolean useOnlyPastTrainingData) |
void |
setUseOnlyPastTrainingData(boolean useOnlyPastTrainingData) |
org.deckfour.xes.model.XLog |
simulate(org.processmining.contexts.uitopia.UIPluginContext context,
org.processmining.models.graphbased.directed.petrinet.PetrinetGraph petriNet,
org.processmining.models.semantics.Semantics<org.processmining.models.semantics.petrinet.Marking,org.processmining.models.graphbased.directed.petrinet.elements.Transition> semantics)
Asks the user to specify configuration parameters for the simulation.
|
org.deckfour.xes.model.XLog |
simulate(org.processmining.contexts.uitopia.UIPluginContext context,
org.processmining.models.graphbased.directed.petrinet.PetrinetGraph petriNet,
org.processmining.models.semantics.Semantics<org.processmining.models.semantics.petrinet.Marking,org.processmining.models.graphbased.directed.petrinet.elements.Transition> semantics,
PNSimulatorConfig config,
org.processmining.models.semantics.petrinet.Marking initialMarking)
Performs a simulation according to a given configuration
PNSimulatorConfig |
org.deckfour.xes.model.XLog |
simulate(org.processmining.contexts.uitopia.UIPluginContext context,
org.processmining.models.graphbased.directed.petrinet.PetrinetGraph petriNet,
org.processmining.models.semantics.Semantics<org.processmining.models.semantics.petrinet.Marking,org.processmining.models.graphbased.directed.petrinet.elements.Transition> semantics,
PNSimulatorConfig config,
org.processmining.models.semantics.petrinet.Marking initialMarking,
org.processmining.models.semantics.petrinet.Marking finalMarking)
Performs a simulation according to a given configuration
PNSimulatorConfig |
java.lang.Object |
simulateOneTrace(org.processmining.models.graphbased.directed.petrinet.PetrinetGraph petriNet,
org.processmining.models.semantics.Semantics<org.processmining.models.semantics.petrinet.Marking,org.processmining.models.graphbased.directed.petrinet.elements.Transition> semantics,
PNSimulatorConfig config,
org.processmining.models.semantics.petrinet.Marking initialMarking,
long traceStart,
long constraint,
long i,
boolean useTimeConstraint,
org.processmining.models.semantics.petrinet.Marking finalMarking)
Performs a simple simulation of the Petri net (mostly used for
StochasticNet s, but can also simulate a PN without stochastic annotations) |
static boolean |
transitionsContainTimingInfo(java.util.Collection<org.processmining.models.graphbased.directed.petrinet.elements.Transition> transitions) |
void |
updateTransitionMemoriesAfterFiring(PNSimulatorConfig config,
java.util.Collection<org.processmining.models.graphbased.directed.petrinet.elements.Transition> transitionsEnabledInMarking,
Triple<org.processmining.models.graphbased.directed.petrinet.elements.Transition,java.lang.Long,java.lang.Double> transitionAndDuration,
long elapsedTimeInCurrentMarking,
java.util.Collection<org.processmining.models.graphbased.directed.petrinet.elements.Transition> afterwardsEnabledTransitions,
org.processmining.models.semantics.Semantics<org.processmining.models.semantics.petrinet.Marking,org.processmining.models.graphbased.directed.petrinet.elements.Transition> semantics) |
public static final java.lang.String TRANSITION_COMPLETE
public static final java.lang.String LIFECYCLE_TRANSITION
public static final java.lang.String TIME_TIMESTAMP
public static final java.lang.String CONCEPT_SIMULATED
public static final java.lang.String LOCATION_ROOM
public static final java.lang.String CONCEPT_INSTANCE
public static final java.lang.String CONCEPT_NAME
public static final java.lang.String SIMULATED_LOG_PROBABILITY
protected static java.util.Random random
protected org.apache.commons.math3.distribution.RealDistribution arrivalDistribution
protected java.util.Map<org.processmining.models.graphbased.directed.petrinet.elements.Transition,java.lang.Long> transitionRemainingTimes
protected long lastFiringTime
protected org.processmining.models.semantics.petrinet.Marking oneMarking
protected boolean useOnlyPastTrainingData
protected LimitedTreeMap<java.lang.Integer,java.util.Map<org.processmining.models.graphbased.directed.petrinet.elements.Transition,org.apache.commons.math3.distribution.RealDistribution>> cachedDurations
protected double logProbabilityOfCurrentTrace
public org.deckfour.xes.model.XLog simulate(org.processmining.contexts.uitopia.UIPluginContext context, org.processmining.models.graphbased.directed.petrinet.PetrinetGraph petriNet, org.processmining.models.semantics.Semantics<org.processmining.models.semantics.petrinet.Marking,org.processmining.models.graphbased.directed.petrinet.elements.Transition> semantics)
PNSimulatorConfig
context
- petriNet
- semantics
- public org.deckfour.xes.model.XLog simulate(org.processmining.contexts.uitopia.UIPluginContext context, org.processmining.models.graphbased.directed.petrinet.PetrinetGraph petriNet, org.processmining.models.semantics.Semantics<org.processmining.models.semantics.petrinet.Marking,org.processmining.models.graphbased.directed.petrinet.elements.Transition> semantics, PNSimulatorConfig config, org.processmining.models.semantics.petrinet.Marking initialMarking)
PNSimulatorConfig
context
- UIPluginContext
ProM plugin contextpetriNet
- a petri net (preferable with stochastic timing informationsemantics
- a Semantics
according to which simulation should be performedconfig
- PNSimulatorConfig
public org.deckfour.xes.model.XLog simulate(org.processmining.contexts.uitopia.UIPluginContext context, org.processmining.models.graphbased.directed.petrinet.PetrinetGraph petriNet, org.processmining.models.semantics.Semantics<org.processmining.models.semantics.petrinet.Marking,org.processmining.models.graphbased.directed.petrinet.elements.Transition> semantics, PNSimulatorConfig config, org.processmining.models.semantics.petrinet.Marking initialMarking, org.processmining.models.semantics.petrinet.Marking finalMarking)
PNSimulatorConfig
context
- UIPluginContext
ProM plugin contextpetriNet
- a petri net (preferable with stochastic timing informationsemantics
- a Semantics
according to which simulation should be performedconfig
- PNSimulatorConfig
initialMarking
- finalMarking
- protected org.processmining.models.semantics.petrinet.Marking getEndPlaces(org.processmining.models.graphbased.directed.petrinet.PetrinetGraph petriNet)
protected void addAllDifferentTracesToLog(org.deckfour.xes.model.XLog log, org.processmining.models.graphbased.directed.petrinet.PetrinetGraph petriNet, java.util.LinkedList<VisitState> statesToVisit, org.processmining.models.semantics.Semantics<org.processmining.models.semantics.petrinet.Marking,org.processmining.models.graphbased.directed.petrinet.elements.Transition> semantics, java.util.Map<java.lang.String,java.util.Set<java.lang.Integer>> numberOfDecisionTransitions, PNSimulatorConfig config, org.processmining.models.semantics.petrinet.Marking endPlaces)
protected boolean isOneBounded(org.processmining.models.semantics.petrinet.Marking currentMarking)
protected boolean isFinal(org.processmining.models.semantics.petrinet.Marking currentMarking, org.processmining.models.semantics.petrinet.Marking endPlaces)
public java.lang.Object simulateOneTrace(org.processmining.models.graphbased.directed.petrinet.PetrinetGraph petriNet, org.processmining.models.semantics.Semantics<org.processmining.models.semantics.petrinet.Marking,org.processmining.models.graphbased.directed.petrinet.elements.Transition> semantics, PNSimulatorConfig config, org.processmining.models.semantics.petrinet.Marking initialMarking, long traceStart, long constraint, long i, boolean useTimeConstraint, org.processmining.models.semantics.petrinet.Marking finalMarking)
StochasticNet
s, but can also simulate a PN without stochastic annotations)petriNet
- PetrinetGraph
the modelsemantics
- Semantics
the semanticsconfig
- PNSimulatorConfig
the configuration PNSimulatorConfig
initialMarking
- Marking
the initial MarkingtraceStart
- long the date time to start the traceconstraint
- long the date time that all simulated events should be greater thani
- int trace iduseTimeConstraint
- boolean stores whether created events are constrained to be later than traceStartfinalMarking
- Marking a final marking can be set to terminate the simulation, when it is reached... ignored, if nullpublic double getLogProbabilityOfLastTrace()
protected java.lang.Object getReturnObject(org.deckfour.xes.model.XTrace trace, long lastFiringTime, PNSimulatorConfig config)
protected org.deckfour.xes.model.XTrace createTrace(long i, PNSimulatorConfig config)
protected void insertEvent(java.lang.String instanceId, org.deckfour.xes.model.XTrace trace, org.processmining.models.graphbased.directed.petrinet.PetrinetGraph net, Triple<org.processmining.models.graphbased.directed.petrinet.elements.Transition,java.lang.Long,java.lang.Double> transitionAndDuration, long firingTime, PNSimulatorConfig config)
public void updateTransitionMemoriesAfterFiring(PNSimulatorConfig config, java.util.Collection<org.processmining.models.graphbased.directed.petrinet.elements.Transition> transitionsEnabledInMarking, Triple<org.processmining.models.graphbased.directed.petrinet.elements.Transition,java.lang.Long,java.lang.Double> transitionAndDuration, long elapsedTimeInCurrentMarking, java.util.Collection<org.processmining.models.graphbased.directed.petrinet.elements.Transition> afterwardsEnabledTransitions, org.processmining.models.semantics.Semantics<org.processmining.models.semantics.petrinet.Marking,org.processmining.models.graphbased.directed.petrinet.elements.Transition> semantics)
protected org.deckfour.xes.model.XEvent createSimulatedEvent(org.processmining.models.graphbased.directed.petrinet.elements.Transition transition, org.processmining.models.graphbased.directed.petrinet.PetrinetGraph net, long firingTime, java.lang.String instance)
public long getTransitionRemainingTime(org.processmining.models.graphbased.directed.petrinet.elements.Transition t, StochasticNet.TimeUnit unitFactor, java.util.Map<org.processmining.models.graphbased.directed.petrinet.elements.Transition,java.lang.Long> transitionRemainingTimes, long startOfTransition, double positiveConstraint, LimitedTreeMap<java.lang.Integer,java.util.Map<org.processmining.models.graphbased.directed.petrinet.elements.Transition,org.apache.commons.math3.distribution.RealDistribution>> cachedDurations, boolean useOnlyPastTrainingData)
t
- the transition for which the remaining duration (in ms) will be determinedunitFactor
- the scaling factor to get from the distribution parameters to millisecondstransitionRemainingTimes
- startOfTransition
- long the entry time of the current marking (i.e., usually the last observed event's timestamp)positiveConstraint
- a constraint that might restrict sample values (left-truncates the distribution)cachedDurations
- LimitedTreeMap
that caches distributions to avoid costly recomputation from the time series.useOnlyPastTrainingData
- a flag that tells us whether only data from the past is allowed for the computation of the remaining timeprotected double sampleDurationForTransition(double positiveConstraint, long startOfTransition, TimedTransition timedT, StochasticNet.TimeUnit unitFactor, LimitedTreeMap<java.lang.Integer,java.util.Map<org.processmining.models.graphbased.directed.petrinet.elements.Transition,org.apache.commons.math3.distribution.RealDistribution>> cachedDurations, boolean useOnlyPastTrainingData)
positiveConstraint
- a possible constraint for sampling a value from the distribution of the transitionstartOfTransition
- long the current time (or better: the last observed event's time)timedT
- TimedTransition
that captures information about the duration distribution from which the sample should be taken.public Triple<org.processmining.models.graphbased.directed.petrinet.elements.Transition,java.lang.Long,java.lang.Double> pickTransition(org.processmining.models.semantics.Semantics<org.processmining.models.semantics.petrinet.Marking,org.processmining.models.graphbased.directed.petrinet.elements.Transition> semantics, java.util.Collection<org.processmining.models.graphbased.directed.petrinet.elements.Transition> transitions, java.util.Map<org.processmining.models.graphbased.directed.petrinet.elements.Transition,java.lang.Long> transitionRemainingTimes, LimitedTreeMap<java.lang.Integer,java.util.Map<org.processmining.models.graphbased.directed.petrinet.elements.Transition,org.apache.commons.math3.distribution.RealDistribution>> cachedDurationDistributions, org.processmining.models.graphbased.directed.petrinet.PetrinetGraph petriNet, PNSimulatorConfig config, long startOfTransition, long constraint, boolean usePositiveTimeContraint, boolean useOnlyPastTrainingData)
semantics
- the Semantics of the nettransitions
- all enabled transitions to pick from.transitionRemainingTimes
- state of the simulation (transitions have associated remaining times/clocks)cachedDurationDistributions
- (if transitions are only allowed to use training data up to a certain point in time, then this cache prevents us to recompute the estimated distribution over and over)petriNet
- the underlying Petri net of the simulation.config
- the configuration of the simulation. See PNSimulatorConfig
. Contains the selection policy!startOfTransition
- the absolute time of the current marking's last state.constraint
- all sampled durations should be greater than the constraintusePositiveTimeContraint
- the simulation might start in the middle of one trace, after some time has passed.
In this case, we don't want to generate samples that are in the past. (the parameter traceStart sets the constraint's value)useOnlyPastTrainingData
- flag that indicates whether only past training data is allowed to be used (rolling forecasts), or all training data is allowed to be used in distribution estimation (cross-validation)public static boolean transitionsContainTimingInfo(java.util.Collection<org.processmining.models.graphbased.directed.petrinet.elements.Transition> transitions)
public static boolean getOnlyImmediateTransitions(java.util.Collection<org.processmining.models.graphbased.directed.petrinet.elements.Transition> transitions, boolean immediate)
transitions
- set of transitions to check, whether they belong to the same type (immediate, or not immediate)immediate
- flagpublic static org.processmining.framework.util.Pair<java.lang.Integer,java.lang.Double> pickTransitionAccordingToWeights(java.util.Collection<org.processmining.models.graphbased.directed.petrinet.elements.Transition> transitions, java.util.Date currentTime, org.processmining.models.semantics.Semantics<org.processmining.models.semantics.petrinet.Marking,org.processmining.models.graphbased.directed.petrinet.elements.Transition> semantics, boolean useOnlyPastTrainingData)
transitions
- collections of enabled transitionscurrentTime
- the current simulation timesemantics
- semantics of the netuseOnlyPastTrainingData
- flag that tells us wether we can use all training data, or only the ones in the past (e.g. for rolling forecasts)public static org.processmining.models.graphbased.directed.petrinet.elements.Transition getTransitionWithIndex(java.util.Collection<org.processmining.models.graphbased.directed.petrinet.elements.Transition> transitions, int index)
protected java.util.Date getNextArrivalDate(java.util.Date lastTime, StochasticNet.TimeUnit unitFactor)
public void setUseOnlyPastTrainingData(boolean useOnlyPastTrainingData)