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 ===
  
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:
+
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('DSM'.'metamodel'.'PetriNet'.'PetriNetEditor')->""
+
entity('PN')
 
{
 
{
entity('DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet')->""
+
entity('metamodel')->""
{
+
{
entity('DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Arc_Weight')->"1";
+
  entity('PetriNet')
entity('DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Place')->""
+
  {
{
+
    relation('places','PetriNet','Place');
entity('DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Place'.'Place_Capacity')->"";
+
    relation('transitions','PetriNet','Transition');
entity('DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Place'.'Token')->"";
+
 
}
+
    entity('Arc_Weight')->"1";
entity('DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Transition')->""
+
    entity('Place')
{
+
    {
entity('DSM'.'metamodel'.'PetriNet'.'PetriNetEditor'.'PetriNet'.'Transition'.'Transition_Priority')->"";
+
      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');
 +
    }
 +
  }
 +
}
 
}
 
}
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>
 
</source>
  

Revision as of 09:52, 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 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');
     }
  }
}
}

Initial model

Pattern and rule library

Measurement results

Back to the top