Parallel DEVS
An Introduction Using PythonPDEVS Yentl Van Tendeloo, Hans Vangheluwe
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
An Introduction Using PythonPDEVS Yentl Van Tendeloo, Hans Vangheluwe
Cellular Automata Finite State Automata Event Scheduling Discrete Event Petri Nets State Charts Activity Scanning Discrete Event Process Interaction Discrete Event
t t t X S Y
from pypdevs.simulator import Simulator from mymodel import MyModel model = MyModel() simulator = Simulator(model) simulator.setVerbose() simulator.simulate() simple_experiment.py
Red 60s Green 57s Yellow 3s X S Y t t t
57 60 120 177
π : 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 π = , , π ππππ’ π’π
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)
!red !yellow !green Red 60s Green 57s Yellow 3s X S Y t t t
57 60 120 177
!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 π = , π, ππππ’, , π’π π π
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)
current_state = ππππ’(current_state)
!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
!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 π = , π, π, ππππ’, , π, π’π
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
current_state = π_πππ’(current_state)
π = π, π, π, ππππ’, πππ¦π’, , π, π’π π : set of input events π : set of output events π : set of sequential states ππππ’ : π β π πππ¦π’: Q Γ ππ β π π : π β ππ π’π : S β β0,+β πππππ : π Γ ππ β π πππππ
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
Work 360s Idle 20s !manual !auto
!red !yellow !green ?manual ?manual ?manual ?auto Red 60s Green 57s Manual βs Yellow 3s M = π, π, πΈ, ππ , π½π , ππ,π !manual !auto Work 360s Idle 20s
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
City House Generator Queue Road Queue Processor Queue Traffic light Road Queue Processor Queue Commerce Queue Collector
ο¦ ο¦ ο¦ ο¦ ο¦ ο¦ ο¦ ο¦ ο¦ ο¦
(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
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)
http://msdl.cs.mcgill.ca/projects/PythonPDEVS
Formalisms
Dynamic Structure Real-time Cell DEVS Verification
Standardization
Tools Languages Interoperable
Performance
Algorithms Activity Distribution Parallel
Model libraries
Example Reusable
Applications