Details and Options
A Petri net is an abstract mathematical representation of a distributed system (frequently used for describing chemical reactions, biological processes, concurrent computing, etc.) consisting of a directed bipartite graph whose vertices are classified as either "places" or "transitions". The directed edges connecting places and transitions together are known as "arcs".
Each place can contain a number of "tokens", and a given transition will "fire" if the places connected to it by input arcs all contain at least one token. When a transition fires, it redistributes tokens from places connected to it by input arcs to places connected to it by output arcs.
ResourceFunction["PetriNetNondeterministicEvolution"] supports the specification of Petri nets either by
PetriNetObject expressions, a collection of three lists (places
p, transitions
t and arcs
a), or by an explicit association of the form
<|"Places"→p,"Transitions"→t,"Arcs"→a|>. The list of arcs
a should be a list of either rules or
DirectedEdge objects (each connecting a place to a transition, or vice versa).
PetriNetObject expressions can be constructed using the MakePetriNet resource function.
When specifying Petri nets in terms of lists or associations, the list init should be a list of integers specifying how many initial tokens to assign to each place. If a list init is not given, ResourceFunction["PetriNetNondeterministicEvolution"] will assume that each place contains no tokens.
ResourceFunction["PetriNetNondeterministicEvolution"] evolves the specified Petri net nondeterministically by randomly selecting and applying one possible transition firing at each step.
When no step count n is specified, ResourceFunction["PetriNetNondeterministicEvolution"] will evolve the Petri net nondeterministically for a single step and return a single result. When a step count n is specified, ResourceFunction["PetriNetNondeterministicEvolution"] will evolve the Petri net nondeterministically for n steps and return a list of the intermediate results at each step.
When no property prop is specified, ResourceFunction["PetriNetNondeterministicEvolution"] will assume the "PetriNetObjects" property (i.e. it will return a list of the PetriNetObject expressions obtained during the evolution).
In ResourceFunction["PetriNetNondeterministicEvolution"][…,"prop"], the following properties can be requested:
"PetriNetObjects" | list of PetriNetObject expressions obtained |
"LabeledGraphs" | list of directed graph representations obtained (with token counts represented graphically) |
"LabeledGraphsHighlighted" | list of directed graph representations obtained (with token counts represented graphically), and with transition firings highlighted |
"WeightedGraphs" | list of directed graph representations obtained (with token counts represented as vertex weights) |
"WeightedGraphsHighlighted" | list of directed graph representations obtained (with token counts represented as vertex weights), and with transition firings highlighted |
"Tokens" | list of token numbers associated to each place after each firing |
"TokenFirings" | list of token numbers associated to each place after each firing, with the corresponding transition firing specified |
ResourceFunction["PetriNetNondeterministicEvolution"] accepts the same options as
Graph.
In a PetriNetObject expression, the following properties are supported:
"AssociationForm" | Petri net represented as an association of places, transitions and arcs |
"Places" | list of places in the Petri net |
"PlaceCount" | number of places in the Petri net |
"Transitions" | list of transitions in the Petri net |
"TransitionCount" | number of transitions in the Petri net |
"Arcs" | list of arcs in the Petri net |
"ArcCount" | number of arcs in the Petri net |
"Tokens" | list of token numbers associated to each place in the Petri net |
"TokenCount" | total number of tokens across all places in the Petri net |
"UnlabeledGraph" | directed graph form of the Petri net without token counts represented graphically |
"LabeledGraph" | directed graph form of the Petri net with token counts represented graphically |
"WeightedGraph" | directed graph form of the Petri net with token counts represented as vertex weights |
By convention, ResourceFunction["PetriNetNondeterministicEvolution"] renders places as circles, transitions as squares, arcs as directed edges and tokens as black dots.