hannah
5 years ago
committed by
Matthias Volk
8 changed files with 292 additions and 59 deletions
-
87doc/source/doc/gspns.rst
-
49examples/gspns/01-gspns.py
-
53examples/gspns/02-gspns.py
-
2lib/stormpy/examples/files.py
-
130lib/stormpy/examples/files/gspn/gspn_simple.pnml
-
18lib/stormpy/examples/files/gspn/gspn_simple.pnpro
-
11src/gspn/gspn.cpp
-
1tests/gspn/test_gspn.py
@ -1,9 +1,88 @@ |
|||
******************* |
|||
********************************** |
|||
Generalized Stochastic Petri Nets |
|||
******************* |
|||
********************************** |
|||
|
|||
Loading GSPNs |
|||
============== |
|||
|
|||
.. |
|||
.. seealso:: `01-gspn.py <link to github: 01-gspn.py>`_ |
|||
.. |
|||
|
|||
|
|||
Generalized stochastic Petri nets can be given in either in the PNPRO format or in the PNML format. |
|||
We start by loading a GSPN stored in the PNML format:: |
|||
|
|||
>>> 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:: |
|||
|
|||
>>> print("Name of GSPN: {}.".format(gspn.get_name())) |
|||
Name of GSPN: simple_gspn. |
|||
>>> print("Number of places: {}.".format(gspn.get_number_of_places())) |
|||
Number of places: 4. |
|||
>>> print("Number of immediate transitions: {}.".format(gspn.get_number_of_immediate_transitions())) |
|||
Number of immediate transitions: 3. |
|||
>>> print("Number of timed transitions: {}.".format(gspn.get_number_of_timed_transitions())) |
|||
Number of timed transitions: 2. |
|||
|
|||
Building GSPNs |
|||
============= |
|||
TODO |
|||
============================= |
|||
.. |
|||
todo .. seealso:: `02-gspn.py <link to github: 02-gspn.py>`_ |
|||
.. |
|||
|
|||
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:: |
|||
|
|||
>>> builder = stormpy.gspn.GSPNBuilder() |
|||
>>> builder.set_name("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:: |
|||
|
|||
>>> 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) |
|||
|
|||
Add timed transition and set its layout information:: |
|||
|
|||
>>> 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:: |
|||
|
|||
>>> 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 output, inhibition or input arcs:: |
|||
|
|||
>>> 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:: |
|||
|
|||
>>> gspn = builder.build_gspn() |
|||
|
|||
After building, we can 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:: |
|||
|
|||
>>> export_path = stormpy.examples.files.gspn_pnpro_simple |
|||
>>> gspn.export_gspn_pnpro_file(export_path) |
|||
|
@ -0,0 +1,53 @@ |
|||
import stormpy |
|||
import stormpy.gspn |
|||
|
|||
import stormpy.examples |
|||
import stormpy.examples.files |
|||
|
|||
|
|||
def example_gspns_02(): |
|||
# Use GSPNBuilder to construct a GSPN |
|||
builder = stormpy.gspn.GSPNBuilder() |
|||
builder.set_name("my_gspn") |
|||
|
|||
# Add immediate transition |
|||
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) |
|||
|
|||
# Add timed transition |
|||
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) |
|||
|
|||
# Add places |
|||
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) |
|||
|
|||
# Link places and transitions by arcs |
|||
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) |
|||
|
|||
# Build GSPN |
|||
gspn = builder.build_gspn() |
|||
|
|||
print("Name of GSPN: {}.".format(gspn.get_name())) |
|||
print("Number of places: {}.".format(gspn.get_number_of_places())) |
|||
print("Number of immediate transitions: {}.".format(gspn.get_number_of_immediate_transitions())) |
|||
print("Number of timed transitions: {}.".format(gspn.get_number_of_timed_transitions())) |
|||
|
|||
# Export to file (PNPRO format) |
|||
export_path = stormpy.examples.files.gspn_pnpro_simple |
|||
gspn.export_gspn_pnpro_file(export_path) |
|||
|
|||
|
|||
if __name__ == '__main__': |
|||
example_gspns_02() |
|||
|
@ -0,0 +1,130 @@ |
|||
<pnml> |
|||
<net id="simple_gspn"> |
|||
<place id="place_1"> |
|||
<initialMarking> |
|||
<value>Default,1</value> |
|||
</initialMarking> |
|||
<capacity> |
|||
<value>Default,1</value> |
|||
</capacity> |
|||
</place> |
|||
<place id="place_2"> |
|||
<initialMarking> |
|||
<value>Default,0</value> |
|||
</initialMarking> |
|||
<capacity> |
|||
<value>Default,1</value> |
|||
</capacity> |
|||
</place> |
|||
<place id="place_3"> |
|||
<initialMarking> |
|||
<value>Default,0</value> |
|||
</initialMarking> |
|||
<capacity> |
|||
<value>Default,1</value> |
|||
</capacity> |
|||
</place> |
|||
<place id="place_4"> |
|||
<initialMarking> |
|||
<value>Default,0</value> |
|||
</initialMarking> |
|||
<capacity> |
|||
<value>Default,1</value> |
|||
</capacity> |
|||
</place> |
|||
<transition id="it_1"> |
|||
<rate> |
|||
<value>1</value> |
|||
</rate> |
|||
<timed> |
|||
<value>false</value> |
|||
</timed> |
|||
</transition> |
|||
<transition id="it_2"> |
|||
<rate> |
|||
<value>1</value> |
|||
</rate> |
|||
<timed> |
|||
<value>false</value> |
|||
</timed> |
|||
</transition> |
|||
<transition id="it_3"> |
|||
<rate> |
|||
<value>1</value> |
|||
</rate> |
|||
<timed> |
|||
<value>false</value> |
|||
</timed> |
|||
</transition> |
|||
<transition id="tt_1"> |
|||
<rate> |
|||
<value>0.4</value> |
|||
</rate> |
|||
<timed> |
|||
<value>true</value> |
|||
</timed> |
|||
</transition> |
|||
<transition id="tt_2"> |
|||
<rate> |
|||
<value>0.4</value> |
|||
</rate> |
|||
<timed> |
|||
<value>true</value> |
|||
</timed> |
|||
</transition> |
|||
<arc id="arc0" source="place_1" target="it_1" > |
|||
<inscription> |
|||
<value>Default,1</value> |
|||
</inscription> |
|||
<type value="inhibition" /> |
|||
</arc> |
|||
<arc id="arc1" source="it_1" target="place_1" > |
|||
<inscription> |
|||
<value>Default,1</value> |
|||
</inscription> |
|||
<type value="normal" /> |
|||
</arc> |
|||
<arc id="arc2" source="place_2" target="it_2" > |
|||
<inscription> |
|||
<value>Default,1</value> |
|||
</inscription> |
|||
<type value="normal" /> |
|||
</arc> |
|||
<arc id="arc3" source="it_2" target="place_3" > |
|||
<inscription> |
|||
<value>Default,1</value> |
|||
</inscription> |
|||
<type value="normal" /> |
|||
</arc> |
|||
<arc id="arc4" source="place_4" target="it_3" > |
|||
<inscription> |
|||
<value>Default,1</value> |
|||
</inscription> |
|||
<type value="normal" /> |
|||
</arc> |
|||
<arc id="arc5" source="place_1" target="tt_1" > |
|||
<inscription> |
|||
<value>Default,1</value> |
|||
</inscription> |
|||
<type value="normal" /> |
|||
</arc> |
|||
<arc id="arc6" source="tt_1" target="place_2" > |
|||
<inscription> |
|||
<value>Default,1</value> |
|||
</inscription> |
|||
<type value="normal" /> |
|||
</arc> |
|||
<arc id="arc7" source="place_3" target="tt_2" > |
|||
<inscription> |
|||
<value>Default,1</value> |
|||
</inscription> |
|||
<type value="normal" /> |
|||
</arc> |
|||
<arc id="arc8" source="tt_2" target="place_4" > |
|||
<inscription> |
|||
<value>Default,1</value> |
|||
</inscription> |
|||
<type value="normal" /> |
|||
</arc> |
|||
</net> |
|||
</pnml> |
@ -1,16 +1,16 @@ |
|||
<project name="storm-export" version="121"> |
|||
<gspn name="gspn" > |
|||
<gspn name="my_gspn" > |
|||
<nodes> |
|||
<place marking="1" name ="place_0" x="6.5" y="1.5" /> |
|||
<place marking="0" name ="place_1" x="18.5" y="1.5" /> |
|||
<transition name="tt_0" type="EXP" nservers="1" delay="0.4000000000" x="12.50000000" y="1.500000000" /> |
|||
<transition name="it_0" type="IMM" priority="1" weight="1.000000000" x="1.500000000" y="1.500000000" /> |
|||
<place marking="1" name ="place_1" x="6.5" y="2" /> |
|||
<place marking="0" name ="place_2" x="18.5" y="2" /> |
|||
<transition name="tt_1" type="EXP" nservers="1" delay="0.4000000000" x="12.50000000" y="2.000000000" /> |
|||
<transition name="it_1" type="IMM" priority="1" weight="1.000000000" x="1.500000000" y="2.000000000" /> |
|||
</nodes> |
|||
<edges> |
|||
<arc head="tt_0" tail="place_0" kind="INPUT" mult="1" /> |
|||
<arc head="place_1" tail="tt_0" kind="OUTPUT" mult="1" /> |
|||
<arc head="it_0" tail="place_0" kind="INHIBITOR" mult="1" /> |
|||
<arc head="place_0" tail="it_0" kind="OUTPUT" mult="1" /> |
|||
<arc head="tt_1" tail="place_1" kind="INPUT" mult="1" /> |
|||
<arc head="place_2" tail="tt_1" kind="OUTPUT" mult="1" /> |
|||
<arc head="it_1" tail="place_1" kind="INHIBITOR" mult="1" /> |
|||
<arc head="place_1" tail="it_1" kind="OUTPUT" mult="1" /> |
|||
</edges> |
|||
</gspn> |
|||
</project> |
Write
Preview
Loading…
Cancel
Save
Reference in new issue