380 likes | 537 Views
Eugene Syriani and Hans Vangheluwe. Programmed Graph Rewriting with DEVS. School of Computer Science. McGill University. Overview. In the context Overview of the Discrete EVent system Specification (DEVS) formalism Building example with AToM 3
E N D
Eugene SyrianiandHans Vangheluwe Programmed Graph Rewriting with DEVS School of Computer Science McGill University
Overview • In the context • Overview of the Discrete EVent system Specification (DEVS) formalism • Building example with AToM3 • Graph Rewriting Control Flow (GRCF):Mimic AToM3 and beyond • Summary
In the context • Model transformation: Programmed Graph Rewriting • At least as expressive as: GreAT, VMTS, Fujaba, ProGreS, MOFLON Sequencing, Branching, Looping, Hierarchy, Parallelism • Cleanly tear apart • Transformation entities • Control flow, structure, hierarchy • DEVS gives us time and modularity too
Overview • In the context • Overview of the Discrete EVent system Specification (DEVS) formalism • Building example with AToM3 • Graph Rewriting Control Flow (GRCF):Mimic AToM3 and beyond • Summary
Overview of the devs formalism • Bernard Zeigler, late ‘70s • Basis for compositional modelling and simulation of discrete event systems • Design, performance analysis and implementation
Overview of the devs formalism • Block: Atomic / Coupled • Port: Inport / Outport • Event • Global time
Overview of the devs formalism • Atomic DEVS: • Time Advance • Output Function • Internal Transition • External Transition ATOMIC
Overview of the devs formalism Coupled DEVS C A1 A3 A2
Overview of the devs formalism • Coupled DEVS: • Select Function C A1 A2
Overview of the devs formalism Our implementation: pythonDEVS classCExample(CoupledDEVS): def__init__(self): self.M1 = self.addSubModel(Example()) self.M2 = self.addSubModel(Example()) self.connectPorts(self.M1.out, self.M2.in) def select(self, immList): returnimmList[0] classAExample(AtomicDEVS): def__init__(self): self.state = ExampleState() self.in = self.addInPort() self.out = self.addOutPort() defextTransition(self): X = self.peak(self.in) ... returnself.state defintTransition(self): ... returnself.state defoutputFnc(self): ... self.poke(self.out, Y) deftimeAdvance(self): return 1
Overview • In the context • Overview of the Discrete EVent system Specification (DEVS) formalism • Building example with AToM3 • Graph Rewriting Control Flow (GRCF):Mimic AToM3 and beyond • Summary
Building example with AToM3[1] Simplified PacMan formalism [2] [1] de Lara J., Vangheluwe H., AToM3: A tool for multi-formalism and meta-modelling, LNCS (2002), 174-188 [ 2] Heckel R., Graph Transformation in a nutshell, ENTCS (2006), 187-198
Building example with AToM3 Build the Meta-Model of the PacMan formalism
Building example with AToM3 Build the Graph Grammar
1 1 Building example with AToM3 4 4 2 2 Build the Graph Grammar 5 pacLink pacLink 3 3 6 foodLink 1: return self.LHS.nodeWithLabel(1).score + 1 P 1 P 2 5 pacLink 1 1 4 2 2 3 3 ghostLink ghostLink
ghostLink ghostLink Building example with AToM3 7 1 2 1 2 6 Build the Graph Grammar 3 3 gridLeft gridLeft 4 4 P 3 pacLink pacLink 6 1 2 P 3 1 2 5 3 3 gridRight 4 gridRight 4
Building example with AToM3 • Capture a trace of execution • Keep log of used rules
Overview • In the context • Overview of the Discrete EVent system Specification (DEVS) formalism • Building example with AToM3 • Graph Rewriting Control Flow (GRCF):Mimic AToM3 and beyond • Summary
Graph rewriting control flow • DEVS blocks • Atomic block: encapsulate the graph rewriting rule • Coupled block: encapsulate the graph grammar • Events • Inport: recieve the host graph • Outport(s): send the transformed graph
Graph rewriting control flow Model AToM3’s graph transformation engine User Input Input graph Step Send graph to transform Transformed graph Control Graph Transformation Rules Trace Rules used
Graph rewriting control flow Graph transformation engine User Input out_step g_out done_rcv done_send in_step g_init g_out Controller g_unmodified g_modified GGRules g_in GGRule trace match_succeed g_in g_succeed match_fail g_in match_succeed GGRule g_fail match_fail Trace trace trace
Graph rewriting control flow Managing priorities GGRules Non-determinism:Randomize select function g_in Priority n g_in g_in abort abort GGRule GGRule match_fail match_fail match_succeed match_succeed in_success abort in_fail g_succeed Synchronizer out_success out_fail g_fail Priority n+1 g_in GGRule
Graph rewriting control flow Use compiled version of AToM3’s rule classpacDie: ...
Graph rewriting control flow import compiled rules… classAExample(AtomicDEVS): def__init__(self): self.state = ExampleState() self.in = self.addInPort() self.out = self.addOutPort() defextTransition(self): X = self.peak(self.in) ... returnself.state defintTransition(self): ... returnself.state defoutputFnc(self): ... self.poke(self.out, Y) deftimeAdvance(self): return 1
Graph rewriting control flow Extension of AToM3’s graph transformation engine User out_control done_rcv out_step g_out control_out done_send in_step g_init in_control Controller g_out g_unmodified g_modified g_in g_fail g_fail g_in control_in User controlled Rules Autonomous Rules g_succeed
Graph rewriting control flow Extension of AToM3’s graph transformation engine User controlled Rules control_in g_in g_fail g_succeed key g_in out_fail out_success in_fail Dispatch in_success g_up g_right g_left g_down g_in g_in g_in g_in Down Up Left Right match_fail match_succeed match_fail match_succeed match_fail match_succeed match_fail match_succeed
Graph rewriting control flow Extension of AToM3’s graph transformation engine Autonomous Rules g_in Kill match_succeed match_fail g_in g_in Eat g_succeed match_succeed match_fail g_in Ghost Move match_succeed match_fail g_fail
Overview • In the context • Overview of the Discrete EVent system Specification (DEVS) formalism • Building example with AToM3 • Graph Rewriting Control Flow (GRCF):Mimic AToM3 and beyond • Summary
Summary Control flow structure properties satisfied • Sequence • Branching • Looping • Hierarchy + Modularity • Parallelism
Are we at the right level of abstraction? Is it the way industry should go in model transformation?
“[...] the rule execution semantics is similar to the execution semantics of asynchronous dataflow graphs and DEVS, but with a difference in the hierarchical rule execution. [...] the class diagrams Figs. 14 and 15 introduce the same concepts as found in DEVS.” A. Agrawal et al. The design of a language for model transformations. SoSym, 2006
Conclusion and future work Parallelism • DEVS is a sequential, deterministic formalism • Parallel-DEVS • Kiltera (CSP-like languages)
Conclusion and future work Time • Metric, Statistics • Timed graph transformation • Real-Time DEVS
Conclusion and future work User - Events • Event-driven Graph Rewriting • Modelling of the user
Conclusion and future work Some Extensions • Optimization hints • Information on the flow • Replace python code by... Statechart? • Multi-formalism • Add an AI block in the autonomous rules
Graph rewriting control flow In AToM3 Outside AToM3 classAExample(AtomicDEVS): def__init__(self): self.state = ExampleState() self.in = self.addInPort() self.out = self.addOutPort() defextTransition(self): X = self.peak(self.in) ... returnself.state return 1 e(AtomicDEVS): def___(self): self.state = ExampleState() self.in = self.addInPort() self.out = hsdhfjhb Sdvjvkv Ds v return 1 classself.state = ExampleState() sdvv self.in = self.addInPort() self.out = self.addOutPort() defextTransition(self): X = self.peak(self.in) ... returnsdsdfsdfsdfsfsdfsdf