Notice: this Wiki will be going read only early in 2024 and edits will no longer be possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
Difference between revisions of "VIATRA2/Benchmarks/Petri-net Simulation Benchmark"
(→The Petri net simulation benchmark) |
(→The Petri net simulation benchmark) |
||
Line 21: | Line 21: | ||
=== Metamodeling === | === Metamodeling === | ||
− | In order to have a | + | In order to have a adoptable suite we tried to define the metamodel as simple as possible and therefor used only entities and relations. For later and more complex Petri-nets we also allowed the modeling of inhibitor arcs also along with transition priority. |
<source lang="java"> | <source lang="java"> | ||
− | entity(' | + | entity('PN') |
{ | { | ||
− | + | entity('metamodel')->"" | |
− | + | { | |
− | + | entity('PetriNet') | |
− | + | { | |
− | + | relation('places','PetriNet','Place'); | |
− | + | relation('transitions','PetriNet','Transition'); | |
− | + | ||
− | + | entity('Arc_Weight')->"1"; | |
− | + | entity('Place') | |
− | + | { | |
− | + | entity('Place_Capacity')->""; | |
− | + | entity('Token'); | |
− | + | relation('InhibitorArc','Place','Transition'); | |
+ | relation('InhibitorArc'.'weight','Place'.'InhibitorArc','Arc_Weight'); | ||
+ | relation('OutArc','Place','Transition'); | ||
+ | relation('OutArc'.'weight','Place'.'OutArc','Arc_Weight'); | ||
+ | relation('capacity','Place','Place'.'Place_Capacity'); | ||
+ | relation('tokens','Place','Place'.'Token'); | ||
+ | } | ||
+ | entity('Transition') | ||
+ | { | ||
+ | entity('Transition_Priority'); | ||
+ | relation('Transition'.'InArc','Transition','Place'); | ||
+ | relation('Transition'.'InArc'.'weight','Transition'.'InArc','Arc_Weight'); | ||
+ | relation('Transition'.'priority','Transition','Transition'.'Transition_Priority'); | ||
+ | } | ||
+ | } | ||
+ | } | ||
} | } | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
</source> | </source> | ||
Revision as of 09:52, 12 June 2008
Contents
The Petri net simulation benchmark
Benchmark description
The Petri-net benchmark suite is defined to capture the problem of visual language simulation with dynamic operational semantics.
This suite summarizes typical domain specific language simulation with the following characteristics: (i) mostly static graph structure, (ii) relatively small and local model manipulations, and (iii) typical as-long-as-possible (ALAP) execution mode. This benchmark focuses on the effective reusability of already matched elements as typical firing of a transition only involves a small part of the net. While an incremental pattern matcher can track the changes of the Petri net and updates only the involved sub-matchings, non-incremental local search based approaches will have to restart the matching from scratch after the net changed.
For a more detailed test specification, see the following article:
Bergmann G.,Horváth Á., Ráth I., Varró D.: A Benchmark Evaluation of Incremental Pattern Matching in Graph Transformation. In: Proc. of the 4th International Conference on Graph Transformation (ICGT'08), Leicester, UK, September 2008
Metamodeling
In order to have a adoptable suite we tried to define the metamodel as simple as possible and therefor used only entities and relations. For later and more complex Petri-nets we also allowed the modeling of inhibitor arcs also along with transition priority.
entity('PN') { entity('metamodel')->"" { entity('PetriNet') { relation('places','PetriNet','Place'); relation('transitions','PetriNet','Transition'); entity('Arc_Weight')->"1"; entity('Place') { entity('Place_Capacity')->""; entity('Token'); relation('InhibitorArc','Place','Transition'); relation('InhibitorArc'.'weight','Place'.'InhibitorArc','Arc_Weight'); relation('OutArc','Place','Transition'); relation('OutArc'.'weight','Place'.'OutArc','Arc_Weight'); relation('capacity','Place','Place'.'Place_Capacity'); relation('tokens','Place','Place'.'Token'); } entity('Transition') { entity('Transition_Priority'); relation('Transition'.'InArc','Transition','Place'); relation('Transition'.'InArc'.'weight','Transition'.'InArc','Arc_Weight'); relation('Transition'.'priority','Transition','Transition'.'Transition_Priority'); } } } }