Generalized Stochastic Petri Nets¶
Loading GSPNs¶
Generalized stochastic Petri nets can be given either in the PNPRO format or in the PNML format. We start by loading a GSPN stored in the PNML format:
[1]:
import stormpy
import stormpy.gspn
import stormpy.examples
import stormpy.examples.files
import_path = stormpy.examples.files.gspn_pnml_simple
gspn_parser = stormpy.gspn.GSPNParser()
gspn = gspn_parser.parse(import_path)
After loading, we can display some properties of the GSPN:
[2]:
print("Name of GSPN: {}.".format(gspn.get_name()))
Name of GSPN: simple_gspn.
[3]:
print("Number of places: {}.".format(gspn.get_number_of_places()))
Number of places: 4.
[4]:
print("Number of immediate transitions: {}.".format(gspn.get_number_of_immediate_transitions()))
Number of immediate transitions: 3.
[5]:
print("Number of timed transitions: {}.".format(gspn.get_number_of_timed_transitions()))
Number of timed transitions: 2.
Building GSPNs¶
In the following, we describe how to construct GSPNs via the GSPNBuilder
. First, we create an instance of the GSPNBuilder
and set the name of the GSPN:
[6]:
builder = stormpy.gspn.GSPNBuilder()
builder.set_name("my_gspn")
In the next step, we add an immediate transition to the GSPN. Additionally, we define the position of the transition by setting its layout information:
[7]:
it_1 = builder.add_immediate_transition(1, 0.0, "it_1")
it_layout = stormpy.gspn.LayoutInfo(1.5, 2.0)
builder.set_transition_layout_info(it_1, it_layout)
We add a timed transition and set its layout information:
[8]:
tt_1 = builder.add_timed_transition(0, 0.4, "tt_1")
tt_layout = stormpy.gspn.LayoutInfo(12.5, 2.0)
builder.set_transition_layout_info(tt_1, tt_layout)
Next, we add two places to the GSPN and set their layouts:
[9]:
place_1 = builder.add_place(1, 1, "place_1")
p1_layout = stormpy.gspn.LayoutInfo(6.5, 2.0)
builder.set_place_layout_info(place_1, p1_layout)
place_2 = builder.add_place(1, 0, "place_2")
p2_layout = stormpy.gspn.LayoutInfo(18.5, 2.0)
builder.set_place_layout_info(place_2, p2_layout)
Places and transitions can be linked by input, output and inhibition arcs. We add the arcs of our GSPN as follows:
[10]:
builder.add_output_arc(it_1, place_1)
builder.add_inhibition_arc(place_1, it_1)
builder.add_input_arc(place_1, tt_1)
builder.add_output_arc(tt_1, place_2)
We can now build the GSPN:
[11]:
gspn = builder.build_gspn()
After building, we export the GSPN. GSPNs can be saved in the PNPRO format via export_gspn_pnpro_file(path)
and in the PNML format via export_gspn_pnml_file(path)
. We export the GSPN into the PNPRO format:
[12]:
export_path = stormpy.examples.files.gspn_pnpro_simple
gspn.export_gspn_pnpro_file(export_path)
Write to file /opt/stormpy/lib/stormpy/examples/files/gspn/gspn_simple.pnpro.