MDE: Modelling the DEVS formalism
Yentl Van Tendeloo Yentl.VanTendeloo@student.ua.ac.be January 24, 2013
1 / 25
MDE: Modelling the DEVS formalism Yentl Van Tendeloo - - PowerPoint PPT Presentation
MDE: Modelling the DEVS formalism Yentl Van Tendeloo Yentl.VanTendeloo@student.ua.ac.be January 24, 2013 1 / 25 The problem: Difficult to comprehend c l a s s Root ( CoupledDEVS ) : def i n i t ( s e l f ) : CoupledDEVS . i n i t ( s e
1 / 25
2 / 25
2 / 25
i n t main ( int , char∗∗ argv ){ adevs : : Digraph<Event∗ > dig ; Generator∗ gen = new Generator () ; RoadSegment∗ seg1 = new RoadSegment ( ) ; RoadSegment∗ seg2 = new RoadSegment ( ) ; RoadSegment∗ seg3 = new RoadSegment ( ) ; C o l l e c t o r ∗ c o l = new C o l l e c t o r ( ) ; dig . add ( gen ) ; dig . add ( seg1 ) ; dig . add ( seg2 ) ; dig . add ( seg3 ) ; dig . add ( c o l ) ; dig . couple ( gen , gen− >Q send , seg1 , seg1− >Q recv ) ; dig . couple ( gen , gen− >car out , seg1 , seg1− >c a r i n ) ; dig . couple ( seg1 , seg1− >Q sack , gen , gen− >Q rack ) ; dig . couple ( seg1 , seg1− >Q send , seg2 , seg2− >Q recv ) ; dig . couple ( seg1 , seg1− >car out , seg2 , seg2− >c a r i n ) ; dig . couple ( seg2 , seg2− >Q sack , seg1 , seg1− >Q rack ) ; dig . couple ( seg2 , seg2− >Q send , seg3 , seg3− >Q recv ) ; dig . couple ( seg2 , seg2− >car out , seg3 , seg3− >c a r i n ) ; dig . couple ( seg3 , seg3− >Q sack , seg2 , seg2− >Q rack ) ; dig . couple ( seg3 , seg3− >car out , col , col− >c a r i n ) ; 3 / 25
i n t main ( int , char∗∗ argv ){ adevs : : Digraph<Event∗ > dig ; Generator∗ gen = new Generator () ; RoadSegment∗ seg1 = new RoadSegment ( ) ; RoadSegment∗ seg2 = new RoadSegment ( ) ; RoadSegment∗ seg3 = new RoadSegment ( ) ; C o l l e c t o r ∗ c o l = new C o l l e c t o r ( ) ; dig . add ( gen ) ; dig . add ( seg1 ) ; dig . add ( seg2 ) ; dig . add ( seg3 ) ; dig . add ( c o l ) ; dig . couple ( gen , gen− >Q send , seg1 , seg1− >Q recv ) ; dig . couple ( gen , gen− >car out , seg1 , seg1− >c a r i n ) ; dig . couple ( seg1 , seg1− >Q sack , gen , gen− >Q rack ) ; dig . couple ( seg1 , seg1− >Q send , seg2 , seg2− >Q recv ) ; dig . couple ( seg1 , seg1− >car out , seg2 , seg2− >c a r i n ) ; dig . couple ( seg2 , seg2− >Q sack , seg1 , seg1− >Q rack ) ; dig . couple ( seg2 , seg2− >Q send , seg3 , seg3− >Q recv ) ; dig . couple ( seg2 , seg2− >car out , seg3 , seg3− >c a r i n ) ; dig . couple ( seg3 , seg3− >Q sack , seg2 , seg2− >Q rack ) ; dig . couple ( seg3 , seg3− >car out , col , col− >c a r i n ) ;
3 / 25
4 / 25
◮ For intermediate language (Modelica)
5 / 25
6 / 25
7 / 25
◮ No accesses to inaccessible variables
1Weigao Xu. The design and implementation of the modelica compiler.
8 / 25
◮ Text output ◮ XML output ◮ VCD output 2Jean-S´
9 / 25
10 / 25
11 / 25
◮ At AToM3 level ◮ At Modelica level ◮ At PythonDEVS level
12 / 25
◮ Updating the existing metamodel ◮ Include experiment data
◮ Update the µModelica compiler ◮ Introduce a flattening phase 13 / 25
atomicDevsV2 Attributes:
coupledDevsV2 Attributes:
portDevsV2 Attributes:
stateDevsV2 Attributes:
insDevsV2 Attributes:
eventDevsV2 Attributes:
DevsState Attributes:
DevsExperiment Attributes:
containsPortV2 Actions: > connect < disconnect containsStateV2 Actions: > connect < disconnect internalTransitionV2 Attributes:
externalTransitionV2 Attributes:
channelV2 Actions: > connect < disconnect < checkValidity containModelV2 Actions: > connect < disconnect hasState Actions: > connect > disconnect
14 / 25
Generator Processor Root CoupledProcessor p_out p_in p_out p_in p_out p_out p_in p_in p_out p_in p_out p_out p_in p_out p_out generating timespan := 1; TimeAdvance: Output: evt := Job(0.3); poke(p_out, evt); idle timespan := INFINITY; TimeAdvance: Output: processing timespan := event.jobSize; TimeAdvance: Output: poke(p_out, event); ins_2 Processor : ins_3 Processor : ins_4 Processor : ins_6 CoupledProcessor : ins_7 Generator : Job jobSize type=Float init.value=3.5 Parameters: Attributes: Model: Parameters: End time: Verbose: Trace: Package: Root 100.0 True False Experiment Experiment:
15 / 25
16 / 25
◮ Perform the closure under coupling on a real model ◮ Together with direct connection
◮ Increased performance ◮ The proof was right! 17 / 25
◮ Remove the complete hierarchy ◮ Just 1 coupled model ◮ Connections become ’one-step’
◮ Z functions need to be rewritten ◮ select functions need to be rewritten 3Bin Chen and Hans Vangheluwe. Symbolic flattening of devs models.
18 / 25
19 / 25
20 / 25
10 20 30 40 50 60 70 5 10 15 20 25 30 35 40 45 50 Time (s) Width Simulation time of Wide models using the Old PyDEVS Flattened Quadratic Non-Flattened Quadratic 5 10 15 20 25 30 35 40 5 10 15 20 25 30 35 40 45 50 Time (s) Width Simulation time of Wide models using the New PyDEVS Flattened Quadratic Non-Flattened Linear
21 / 25
1 2 3 4 5 6 7 8 9 10 11 5 10 15 20 25 30 35 40 45 50 Time (s) Depth Simulation time of Deep models using the Old PyDEVS Flattened Quadratic Non-Flattened Constant 0.25 0.26 0.27 0.28 0.29 0.3 0.31 0.32 0.33 5 10 15 20 25 30 35 40 45 50 Time (s) Depth Simulation time of Deep models using the New PyDEVS Flattened Linear Non-Flattened Constant
22 / 25
4Yentl Van Tendeloo. Research internship 1: Optimizing pydevs.
23 / 25
◮ Z and select function 24 / 25
25 / 25
25 / 25
25 / 25