Skip to main content

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.

Jump to: navigation, search

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 ===
  
The Petri-net metamodel used in this benchmark is depicted in Fig. 1. In order to have a comparable suite we tried to define the metamodel as simple as possible and therefor used only entities and relations.  
+
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">
[[Image:petrimeta.png|frame|The Petri-net metamodel]]
+
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

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');

Initial model

Pattern and rule library

Measurement results

Back to the top