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 comparable suite we tried to define the metamodel as simple as possible and therefor used only entities and relations. Its vtml equivalent is the following: | |
− | + | <source lang="java"> | |
− | + | entity('DSM'.'metamodel'.'PetriNet'.'PetriNetEditor')->"" | |
+ | { | ||
+ | entity('DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet')->"" | ||
+ | { | ||
+ | entity('DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Arc_Weight')->"1"; | ||
+ | entity('DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Place')->"" | ||
+ | { | ||
+ | entity('DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Place'.'Place_Capacity')->""; | ||
+ | entity('DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Place'.'Token')->""; | ||
+ | } | ||
+ | entity('DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Transition')->"" | ||
+ | { | ||
+ | entity('DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Transition'.'Transition_Priority')->""; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | relation('DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Place'.'InhibitorArc','DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Place','DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Transition'); | ||
+ | relation('DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Place'.'InhibitorArc'.'weight','DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Place'.'InhibitorArc','DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Arc_Weight'); | ||
+ | relation('DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Place'.'OutArc','DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Place','DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Transition'); | ||
+ | relation('DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Place'.'OutArc'.'weight','DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Place'.'OutArc','DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Arc_Weight'); | ||
+ | relation('DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Place'.'capacity','DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Place','DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Place'.'Place_Capacity'); | ||
+ | relation('DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Place'.'tokens','DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Place','DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Place'.'Token'); | ||
+ | relation('DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Transition'.'InArc','DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Transition','DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Place'); | ||
+ | relation('DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Transition'.'InArc'.'weight','DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Transition'.'InArc','DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Arc_Weight'); | ||
+ | relation('DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Transition'.'priority','DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Transition','DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Transition'.'Transition_Priority'); | ||
+ | relation('DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'places','DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet','DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Place'); | ||
+ | relation('DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'transitions','DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet','DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Transition'); | ||
+ | relation('DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'petriNets','DSM'.'metamodel'.'PetriNet'.'PetriNetEditor','DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'); | ||
+ | |||
+ | </source> | ||
=== Initial model === | === Initial model === |
Revision as of 08:40, 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 comparable suite we tried to define the metamodel as simple as possible and therefor used only entities and relations. Its vtml equivalent is the following:
entity('DSM'.'metamodel'.'PetriNet'.'PetriNetEditor')->"" { entity('DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet')->"" { entity('DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Arc_Weight')->"1"; entity('DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Place')->"" { entity('DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Place'.'Place_Capacity')->""; entity('DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Place'.'Token')->""; } entity('DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Transition')->"" { entity('DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Transition'.'Transition_Priority')->""; } } } relation('DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Place'.'InhibitorArc','DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Place','DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Transition'); relation('DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Place'.'InhibitorArc'.'weight','DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Place'.'InhibitorArc','DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Arc_Weight'); relation('DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Place'.'OutArc','DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Place','DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Transition'); relation('DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Place'.'OutArc'.'weight','DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Place'.'OutArc','DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Arc_Weight'); relation('DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Place'.'capacity','DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Place','DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Place'.'Place_Capacity'); relation('DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Place'.'tokens','DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Place','DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Place'.'Token'); relation('DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Transition'.'InArc','DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Transition','DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Place'); relation('DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Transition'.'InArc'.'weight','DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Transition'.'InArc','DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Arc_Weight'); relation('DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Transition'.'priority','DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Transition','DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Transition'.'Transition_Priority'); relation('DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'places','DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet','DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Place'); relation('DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'transitions','DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet','DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Transition'); relation('DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'petriNets','DSM'.'metamodel'.'PetriNet'.'PetriNetEditor','DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet');