Parallel DEVS An Introduction Using PythonPDEVS Yentl Van Tendeloo, - - PowerPoint PPT Presentation

β–Ά
parallel devs
SMART_READER_LITE
LIVE PREVIEW

Parallel DEVS An Introduction Using PythonPDEVS Yentl Van Tendeloo, - - PowerPoint PPT Presentation

Parallel DEVS An Introduction Using PythonPDEVS Yentl Van Tendeloo, Hans Vangheluwe Introduction Process Interaction Cellular Automata Discrete Event Activity Scanning State Charts Petri Nets Discrete Event Event Scheduling Finite State


slide-1
SLIDE 1

Parallel DEVS

An Introduction Using PythonPDEVS Yentl Van Tendeloo, Hans Vangheluwe

slide-2
SLIDE 2

Introduction

slide-3
SLIDE 3
slide-4
SLIDE 4
slide-5
SLIDE 5

Cellular Automata Finite State Automata Event Scheduling Discrete Event Petri Nets State Charts Activity Scanning Discrete Event Process Interaction Discrete Event

DEVS

slide-6
SLIDE 6
slide-7
SLIDE 7

Experimentation

slide-8
SLIDE 8

t t t X S Y

slide-9
SLIDE 9

from pypdevs.simulator import Simulator from mymodel import MyModel model = MyModel() simulator = Simulator(model) simulator.setVerbose() simulator.simulate() simple_experiment.py

slide-10
SLIDE 10

Atomic Models

slide-11
SLIDE 11

Red 60s Green 57s Yellow 3s X S Y t t t

57 60 120 177

slide-12
SLIDE 12

𝑇 : set of sequential states 𝑇 = {red, yellow, green} πœ€π‘—π‘œπ‘’ : 𝑇 β†’ 𝑇 πœ€π‘—π‘œπ‘’ = {red β†’ green, green β†’ yellow, yellow β†’ red} 𝑒𝑏 : S β†’ ℝ0,+∞ 𝑒𝑏 = {red β†’ 60, green β†’ 57, yellow β†’ 3} Red 60s Green 57s Yellow 3s 𝑁 = , , 𝑇 πœ€π‘—π‘œπ‘’ 𝑒𝑏

slide-13
SLIDE 13

from pypdevs.DEVS import * class TrafficLightAutonomous(AtomicDEVS): def __init__(self): AtomicDEVS.__init__(self, β€œLight”) self.state = β€œred” def intTransition(self): state = self.state return {β€œred”: β€œgreen”, β€œyellow”: β€œred”, β€œgreen”: β€œyellow”}[state] def timeAdvance(self): state = self.state return {β€œred”: 60, β€œyellow”: 3, β€œgreen”: 57}[state] atomic_int.py 𝑇 = {red, yellow, green} πœ€π‘—π‘œπ‘’ = { red β†’ green, green β†’ yellow, yellow β†’ red} 𝑒𝑏 = {red β†’ 60, green β†’ 57, yellow β†’ 3} time = 0 current_state = green while True: time += ta(current_state) current_state = πœ€π‘—π‘œπ‘’(current_state)

slide-14
SLIDE 14

!red !yellow !green Red 60s Green 57s Yellow 3s X S Y t t t

57 60 120 177

slide-15
SLIDE 15

!red !yellow !green πœ‡ = { green β†’ [β€œyellow”], yellow β†’ [β€œred”], red β†’ [β€œgreen”]} 𝑇 = {red, yellow, green} πœ€π‘—π‘œπ‘’ = { red β†’ green, green β†’ yellow, yellow β†’ red} 𝑒𝑏 = {red β†’ 60, green β†’ 57, yellow β†’ 3} 𝑍 = {β€œred”, β€œgreen”, β€œyellow”} 𝑍 : set of output events πœ‡ : 𝑇 β†’ 𝑍𝑐 Red 60s Green 57s Yellow 3s 𝑁 = , 𝑇, πœ€π‘—π‘œπ‘’, , 𝑒𝑏 𝑍 πœ‡

slide-16
SLIDE 16

from pypdevs.DEVS import * class TrafficLightWithOutput(AtomicDEVS): def __init__(self): AtomicDEVS.__init__(self, β€œlight”) self.state = β€œred” self.observe = self.addOutPort(β€œobserver”) … def outputFnc(self): state = self.state if state == β€œred”: v = β€œgreen” elif state == β€œyellow”: v = β€œred” elif state == β€œgreen”: v = β€œyellow” return {self.observe: [v]} atomic_out.py 𝑍 = {β€œred”, β€œgreen”, β€œyellow”} πœ‡ = {green β†’ β€œyellow”, yellow β†’ β€œred”, red β†’ β€œgreen”} time = 0 current_state = green while True: time += ta(current_state)

  • utput(πœ‡(current_state))

current_state = πœ€π‘—π‘œπ‘’(current_state)

slide-17
SLIDE 17

!red !yellow !green ?manual ?manual ?manual ?auto Red 60s Green 57s Manual ∞s Yellow 3s X S Y t t t

57 60 120 177

slide-18
SLIDE 18

!red !yellow !green ?manual ?manual ?manual ?auto 𝑍 = {β€œred”, β€œgreen”, β€œyellow”} 𝑇 = {red, yellow, green, manual} πœ€π‘—π‘œπ‘’ = {red β†’ green, green β†’ yellow, yellow β†’ red} πœ‡ = {green β†’ β€œyellow”, yellow β†’ β€œred”, red β†’ β€œgreen”} 𝑒𝑏 = {red β†’ 60, green β†’ 57, yellow β†’ 3, manual β†’ ∞} πœ€π‘“π‘¦π‘’ : Q Γ— π‘Œπ‘ β†’ 𝑇 πœ€π‘“π‘¦π‘’ = {( (*, *), [β€œmanual”]) β†’ β€œmanual”, ( (β€œmanual”, *), [β€œauto”]) β†’ β€œred”} π‘Œ : set of input events π‘Œ = {β€œauto”, β€œmanual”} π‘Œ πœ€π‘“π‘¦π‘’ Red 60s Green 57s Manual ∞s Yellow 3s 𝑁 = , 𝑍, 𝑇, πœ€π‘—π‘œπ‘’, , πœ‡, 𝑒𝑏

slide-19
SLIDE 19

from pypdevs.DEVS import * class TrafficLight(AtomicDEVS): def __init__(self): AtomicDEVS.__init__(self, β€œlight”) self.state = β€œred” self.observe = self.addOutPort(β€œobserver”) self.interrupt = self.addInPort(β€œinterrupt”) … def extTransition(self, inputs): inp = inputs[self.interrupt][0] if inp == β€œmanual”: return β€œmanual” elif inp == β€œauto”: if self.state == β€œmanual”: return β€œred” atomic_ext.py π‘Œ = {β€œauto”, β€œmanual”} πœ€π‘“π‘¦π‘’ = {( (*, *), [β€œmanual”]) β†’ β€œmanual”, ( (β€œmanual”, *), [β€œauto”]) β†’ β€œred”} time = 0 cur_state = β€œred” while True: next_time = time + ta(cur_state) if time_next_ev <= next_time: cur_state = πœ€π‘“π‘¦π‘’((cur_state, e), next_ev) time = time_next_ev else: time = next_time

  • utput(πœ‡(current_state))

current_state = πœ€_π‘—π‘œπ‘’(current_state)

slide-20
SLIDE 20

𝑁 = π‘Œ, 𝑍, 𝑇, πœ€π‘—π‘œπ‘’, πœ€π‘“π‘¦π‘’, , πœ‡, 𝑒𝑏 π‘Œ : set of input events 𝑍 : set of output events 𝑇 : set of sequential states πœ€π‘—π‘œπ‘’ : 𝑇 β†’ 𝑇 πœ€π‘“π‘¦π‘’: Q Γ— π‘Œπ‘ β†’ 𝑇 πœ‡ : 𝑇 β†’ 𝑍𝑐 𝑒𝑏 : S β†’ ℝ0,+∞ πœ€π‘‘π‘π‘œπ‘” : 𝑇 Γ— π‘Œπ‘ β†’ 𝑇 πœ€π‘‘π‘π‘œπ‘”

slide-21
SLIDE 21

from pypdevs.DEVS import * class TrafficLight(AtomicDEVS): … def confTransition(self, inputs): self.elapsed = 0.0 self.state = self.intTransition() self.state = self.extTransition(inputs) return self.state atomic_conf.py

slide-22
SLIDE 22

Coupled Models

slide-23
SLIDE 23

Work 360s Idle 20s !manual !auto

slide-24
SLIDE 24

!red !yellow !green ?manual ?manual ?manual ?auto Red 60s Green 57s Manual ∞s Yellow 3s M = π‘Œ, 𝑍, 𝐸, 𝑁𝑗 , 𝐽𝑗 , π‘Žπ‘—,π‘˜ !manual !auto Work 360s Idle 20s

slide-25
SLIDE 25

from pypdevs.DEVS import * from trafficlight import TrafficLight from policeman import Policeman class TrafficLightSystem(CoupledDEVS): def __init__(self): CoupledDEVS.__init__(self, β€œsystem”) self.light = self.addSubModel(TrafficLight()) self.police = self.addSubModel(Policeman()) self.connectPorts(self.police.out, self.light.interrupt) trafficlight_system.py

slide-26
SLIDE 26
slide-27
SLIDE 27

City House Generator Queue Road Queue Processor Queue Traffic light Road Queue Processor Queue Commerce Queue Collector

         

slide-28
SLIDE 28
slide-29
SLIDE 29

(done, t) (*, t) (done, t) (y, t) (x, t) (@,t) (@,t) (*, t) (done, t) (done, t) (*, t) Root coordinator Coordinator Simulator Simulator Coupled DEVS Atomic DEVS Atomic DEVS

slide-30
SLIDE 30

Applications

slide-31
SLIDE 31
slide-32
SLIDE 32
slide-33
SLIDE 33
slide-34
SLIDE 34
slide-35
SLIDE 35

Conclusions

slide-36
SLIDE 36

Conclusions

 Atomic DEVS  Coupled DEVS  Closure under coupling  Abstract Simulator

Work 360s Idle 20s !manual !auto !red !yellow !green ?manual ?manual ?manual ?auto R 60s G 57s M ∞s Y 3s

(@,t) (X, t) (Y , t) (*, t) (done, t)

slide-37
SLIDE 37

http://msdl.cs.mcgill.ca/projects/PythonPDEVS

slide-38
SLIDE 38

Formalisms

Dynamic Structure Real-time Cell DEVS Verification

Standardization

Tools Languages Interoperable

Performance

Algorithms Activity Distribution Parallel

Model libraries

Example Reusable

Applications