Classic DEVS
An Introduction Using PythonPDEVS Yentl Van Tendeloo, Hans Vangheluwe
Classic DEVS An Introduction Using PythonPDEVS Yentl Van Tendeloo, - - PowerPoint PPT Presentation
Classic DEVS An Introduction Using PythonPDEVS Yentl Van Tendeloo, Hans Vangheluwe Introduction Bernard P . Zeigler. Bernard P . Zeigler. Bernard P . Zeigler, Herbert Praehofer, Theory Of Modelling And Simulation . Multifacetted Modelling
An Introduction Using PythonPDEVS Yentl Van Tendeloo, Hans Vangheluwe
Bernard P . Zeigler. Theory Of Modelling And Simulation. 1st ed. Wiley, 1976. Bernard P . Zeigler, Herbert Praehofer, and Tag Gon Kim. Theory Of Modelling And Simulation. 2nd ed. Academic Press, 2000. Bernard P . Zeigler. Multifacetted Modelling and Discrete Event Simulation. 1st ed. Academic Press, 1984.
Yentl Van Tendeloo and Hans Vangheluwe. An Evaluation of DEVS Simulation Tools. Simulation: Transactions of the Society for Modeling and Simulation International. 2017, 93(2): 103-121 Yentl Van Tendeloo and Hans Vangheluwe. An Overview of PythonPDEVS. In Proceedings of JournΓ©es DEVS Francophones (JDF), pages 59-66, 2016.
Our presentation uses initialized DEVS models, which contain an initial state. The initial state was left implicit in the original DEVS specification.
DEVS GPSS Meijin++ SimScript Sequential Discrete Event Language β¦ = modular simulation assembly language
Vangheluwe, Hans. DEVS as a common denominator for multi-formalism hybrid systems modelling. In proceedings of the International Symposium on Computer-Aided Control System Design, pp. 129-134. 2000.
t t X Y π¦1 π¦2 π§1 π§2
finite number of non-π events
π π
in a finite time interval
t t t X S Y π¦1 π¦2 π§1 π§2 π‘1 π‘2 π‘3 π‘4 π π
Experiment πππππ§π ππ = 60π‘ πππππ§π§πππππ₯ = 3π‘ πππππ§ππ πππ = 57π‘ πππππ’,πππβπ’1 = ππ πππ, 0 πππππ’,πππ1 = (ππππ, 280) πππππ’ππ πππππ’πππ = (π’π‘ππ β₯ π’πππ) π’πππ = 24β Trace Model Solver Model Simulator
from pypdevs.simulator import Simulator from mymodel import MyModel model = MyModel(\ q_init_pol1 = (βidleβ, 280), q_init_light1 = (βgreenβ, 0), delay_red = 60, delay_yellow = 3, delay_green = 57 ) simulator = Simulator(model) simulator.setTerminationTime(24*60*60) simulator.setClassicDEVS() simulator.setVerbose() simulator.simulate() simple_experiment.py Concrete Syntax
__ Current Time: 0.00 __________________________________________ INITIAL CONDITIONS in model <system.light> Initial State: green Next scheduled internal transition at time 57.00 INITIAL CONDITIONS in model <system.policeman> Initial State: idle Next scheduled internal transition at time 20.00
__ Current Time: 20.00 __________________________________________ EXTERNAL TRANSITION in model <system.light> Input Port Configuration: port <interrupt>: toManual New State: going_manual Next scheduled internal transition at time 20.0 INTERNAL TRANSITION in model <system.policeman> New State: working Output Port Configuration: port <output>: go_to_work Next scheduled internal transition at time 3620.00
__ Current Time: 20.00 __________________________________________ INTERNAL TRANSITION in model <system.light> Output Port Configuration: port <observer>: turn_off New State: manual Next scheduled internal transition at time inf
__ Current Time: 3620.00 __________________________________________ EXTERNAL TRANSITION in model <system.light> Input Port Configuration: port <interrupt>: toAuto New State: going_auto Next scheduled internal transition at time 3620.00 INTERNAL TRANSITION in model <system.policeman> New State: idle Output Port Configuration: port <output>: take_break Next scheduled internal transition at time 3920.00
t t X Y π¦1 π¦2 π§1 π§2
π π
Finite State Automaton Timed Event Scheduling Graph
toRed toGreen toYellow
red green yellow
schedule in πππππ§π§πππππ₯ schedule in πππππ§π ππ schedule in πππππ§_ππ πππ
π = 0π‘ toRed toYellow toGreen π = 0π‘
red πππππ§π ππ yellow πππππ§π§πππππ₯ green πππππ§ππ πππ
X Y t t S t
57 60 120 177
red yellow green
red πππππ§π ππ yellow πππππ§π§πππππ₯ green πππππ§ππ πππ
π : set of sequential states π = {red, yellow, green} ππππ’ : π β π ππππ’ = {red β green, green β yellow, yellow β red} π’π : S β β0,+β
+
π’π = {red β πππππ§π ππ, green β πππππ§ππ πππ, yellow β πππππ§π§πππππ₯} π = , , , π ππππ’ π’π
Autonomous (no input)
red πππππ§π ππ yellow πππππ§π§πππππ₯ green πππππ§ππ πππ
π’π : S β β0,+β
+
π’π π‘π = +β passive states π’π π‘π = 0 transient states
e t π’π(ππ πππ) π’π(π§πππππ₯) π’π(π ππ)
enter red enter green enter yellow
S t
red yellow green
ta(π‘π) ππ ππ
S t
red yellow green
π’π(π‘0) π0 π0 π‘0, 0 πππππ’ = π‘0, π0 π‘0, π’π π‘0
e t π’π(ππ πππ) π’π(π§πππππ₯) π’π(π ππ) π0 π’π π‘0 enter red enter green enter yellow enter yellow
π : set of sequential states π = {red, yellow, green} ππππ’ : π β π ππππ’ = {red β green, green β yellow, yellow β red} π’π : S β β0,+β
+
π’π = {red β πππππ§π ππ, green β πππππ§ππ πππ, yellow β πππππ§π§πππππ₯} π = , , , π ππππ’ π’π πππππ’ πππππ’ : π β set of total states π = π‘, π π‘ β π, 0 β€ π β€ π’π(π‘) πππππ’ = (green, 0)
Autonomous (no output)
π = 0π‘ red πππππ§π ππ yellow πππππ§π§πππππ₯ green πππππ§ππ πππ
π = {red, yellow, green} ππππ’ = { red β green, green β yellow, yellow β red} π’π = {red β πππππ§π ππ, green β πππππ§ππ πππ, yellow β πππππ§π§πππππ₯} πππππ’ = (green, 0) time = 0 current_state = initial_state last_time = -initial_elapsed while not termination_condition(): time = last_time + ta(current_state) current_state = ππππ’(current_state) last_time = time Operational Semantics
from pypdevs.DEVS import * class TrafficLightAutonomous(AtomicDEVS): def __init__(self, q_init, delay_green, delay_yellow, delay_red): AtomicDEVS.__init__(self, βlightβ) self.state, self.elapsed = q_init self.delay_green = delay_green self.delay_yellow = delay_yellow self.delay_red = delay_red def intTransition(self): state = self.state return {βredβ: βgreenβ, βyellowβ: βredβ, βgreenβ: βyellowβ}[state] def timeAdvance(self): state = self.state return {βredβ: self.delay_red, βyellowβ: self.delay_yellow, βgreenβ: self.delay_green}[state]
atomic_int.py Concrete Syntax Abstract Syntax
__ Current Time: 0.00 __________________________________________ INITIAL CONDITIONS in model <light> Initial State: green Next scheduled internal transition at time 57.00 __ Current Time: 57.00 __________________________________________ INTERNAL TRANSITION in model <light> New State: yellow Output Port Configuration: Next scheduled internal transition at time 60.00 __ Current Time: 60.00 __________________________________________ INTERNAL TRANSITION in model <light> New State: red Output Port Configuration: Next scheduled internal transition at time 120.00
!show_red !show_yellow !show_green X S Y t t t
57 60 120 177
red yellow green show_red show_yellow show_green
π = 0π‘ red πππππ§π ππ yellow πππππ§π§πππππ₯ green πππππ§ππ πππ
!show_red !show_yellow !show_green X S Y t t t
57 60 120 177
red yellow green show_red show_yellow show_green
π = 0π‘ red πππππ§π ππ yellow πππππ§π§πππππ₯ green πππππ§ππ πππ
!show_red !show_yellow !show_green π = {red, yellow, green} ππππ’ = { red β green, green β yellow, yellow β red} πππππ’ = (green, 0) π’π = {red β πππππ§π ππ, green β πππππ§ππ πππ, yellow β πππππ§π§πππππ₯} π : set of output events π = {βshow_redβ, βshow_greenβ, βshow_yellowβ} π : π β π βͺ {π} π = { green β βshow_yellowβ, yellow β βshow_redβ, red β βshow_greenβ} π = , π, πππππ’, ππππ’, , π’π π π
Autonomous (with output)
π = 0π‘ red πππππ§π ππ yellow πππππ§π§πππππ₯ green πππππ§ππ πππ
π = {red, yellow, green} πππππ’ = (green, 0) ππππ’ = { red β green, green β yellow, yellow β red} π’π = {red β πππππ§π ππ, green β πππππ§ππ πππ, yellow β πππππ§π§πππππ₯} π = {βshow_redβ, βshow_greenβ, βshow_yellowβ} π = {green β βshow_yellowβ, yellow β βshow_redβ, red β βshow_greenβ} time = 0 current_state = initial_state last_time = -initial_elapsed while not termination_condition(): time = last_time + ta(current_state)
current_state = ππππ’(current_state) last_time = time
Operational Semantics from pypdevs.DEVS import * class TrafficLightWithOutput(AtomicDEVS): def __init__(self, β¦): AtomicDEVS.__init__(self, βlightβ) self.observe = self.addOutPort(βobserverβ) β¦ β¦ def outputFnc(self): state = self.state if state == βredβ: return {self.observe: βshow_greenβ} elif state == βyellowβ: return {self.observe: βshow_redβ} elif state == βgreenβ: return {self.observe: βshow_yellowβ} atomic_out.py Concrete Syntax Abstract Syntax
__ Current Time: 0.00 __________________________________________ INITIAL CONDITIONS in model <light> Initial State: green Next scheduled internal transition at time 57.00 __ Current Time: 57.00 __________________________________________ INTERNAL TRANSITION in model <light> New State: yellow Output Port Configuration: port <observer>: show_yellow Next scheduled internal transition at time 60.00 __ Current Time: 60.00 __________________________________________ INTERNAL TRANSITION in model <light> New State: red Output Port Configuration: port <observer>: show_red Next scheduled internal transition at time 120.00
!show_red !show_yellow !show_green ?toManual ?toManual ?toManual ?toAuto X S Y t t t
red manual green show_green toManual toAuto
π = 0π‘
yellow
red πππππ§π ππ yellow πππππ§π§πππππ₯ green πππππ§ππ πππ manual β
!show_red !show_yellow ?toManual ?toManual ?toManual ?toAuto π = {βshow_redβ, βshow_greenβ, βshow_yellowβ} π = {red, yellow, green, manual} πππππ’ = (green, 0) ππππ’ = {red β green, green β yellow, yellow β red} π = {green β βshow_yellowβ, yellow β βshow_redβ, red β βshow_greenβ} π’π = {red β πππππ§π ππ, green β πππππ§ππ πππ, yellow β πππππ§π§πππππ₯, manual β +β} πππ¦π’ : Q Γ π β π π = π‘, π π‘ β π, 0 β€ π β€ π’π(π‘) πππ¦π’ = {( (*, *), βtoManualβ) β βmanualβ, ( (βmanualβ, *), βtoAutoβ) β βredβ} π : set of input events π = {βtoAutoβ, βtoManualβ} π πππ¦π’ π = , π, π, πππππ’, ππππ’, , π, π’π
Reactive
π = 0π‘ red πππππ§π ππ yellow πππππ§π§πππππ₯ green πππππ§ππ πππ manual β !show_green
π = {βshow_redβ, βshow_greenβ, βshow_yellowβ} π = {red, yellow, green, manual} πππππ’ = (green, 0) ππππ’ = {red β green, green β yellow, yellow β red} π = {green β βshow_yellowβ, yellow β βshow_redβ, red β βshow_greenβ} π’π = {red β πππππ§π ππ, green β πππππ§ππ πππ, yellow β πππππ§π§πππππ₯, manual β β} π = {βtoAutoβ, βtoManualβ} πππ¦π’ = {( (*, *), βtoManualβ) β manual, ( (manual, *), βtoAutoβ) β red}
time = 0 current_state = initial_state last_time = -initial_elapsed while not termination_condition(): next_time = last_time + ta(current_state) if time_next_ev <= next_time: e = time_next_ev β last_time time = time_next_ev current_state = πππ¦π’((current_state, e), next_ev) else: time = next_time
current_state = π_πππ’(current_state) last_time = time
Operational Semantics Abstract Syntax
from pypdevs.DEVS import * class TrafficLight(AtomicDEVS): def __init__(self, β¦): AtomicDEVS.__init__(self, βlightβ) self.interrupt = self.addInPort(βinterruptβ) β¦ β¦ def extTransition(self, inputs): inp = inputs[self.interrupt] if inp == βtoManualβ: return βmanualβ elif inp == βtoAutoβ: if self.state == βmanualβ: return βredβ atomic_ext.py Concrete Syntax π = {βshow_redβ, βshow_greenβ, βshow_yellowβ} π = {red, yellow, green, manual} πππππ’ = (green, 0) ππππ’ = {red β green, green β yellow, yellow β red} π = {green β βshow_yellowβ, yellow β βshow_redβ, red β βshow_greenβ} π’π = {red β πππππ§π ππ, green β πππππ§ππ πππ, yellow β πππππ§π§πππππ₯, manual β β} π = {βtoAutoβ, βtoManualβ} πππ¦π’ = {( (*, *), βtoManualβ) β manual, ( (manual, *), βtoAutoβ) β red} Abstract Syntax
__ Current Time: 0.00 __________________________________________ INITIAL CONDITIONS in model <light> Initial State: green Next scheduled internal transition at time 57.00 __ Current Time: 57.00 __________________________________________ INTERNAL TRANSITION in model <light> New State: yellow Output Port Configuration: port <observer>: show_yellow Next scheduled internal transition at time 60.00 __ Current Time: 60.00 __________________________________________ INTERNAL TRANSITION in model <light> New State: red Output Port Configuration: port <observer>: show_red Next scheduled internal transition at time 120.00
π = π‘, π π‘ β π, 0 β€ π β€ π’π(π‘) π = 0 π = π’π π‘ 0 < π < π’π(π‘)
!show_red !show_yellow !show_green ?toManual/ !turn_off ?toManual/ !turn_off ?toManual/ !turn_off ?toAuto/ !show_red π = 0π‘ red πππππ§π ππ yellow πππππ§π§πππππ₯ green πππππ§ππ πππ manual β
!show_red !show_yellow !show_green ?toManual/ !turn_off ?toManual/ !turn_off ?toManual/ !turn_off ?toAuto/ !show_red π = 0π‘ X S Y t t t
red manual green show_green toManual toAuto yellow show_red turn_off
red πππππ§π ππ yellow πππππ§π§πππππ₯ green πππππ§ππ πππ manual β
!show_red !show_yellow !show_green ?toManual/ !turn_off ?toManual/ !turn_off ?toManual/ !turn_off ?toAuto/ !show_red π = 0π‘ X S Y t t t
red manual green show_green toManual toAuto yellow show_red turn_off
red πππππ§π ππ yellow πππππ§π§πππππ₯ green πππππ§ππ πππ manual β
time = 0 current_state = initial_state last_time = -initial_elapsed while not termination_condition(): next_time = last_time + ta(current_state) if time_next_ev <= next_time: e = time_next_ev β last_time time = time_next_ev current_state = πππ¦π’((current_state, e), next_ev) else: time = next_time
current_state = π_πππ’(current_state) last_time = time
!show_red !show_yellow !show_green π = 0π‘ !show_red !turn_off ?toAuto ?toManual ?toManual ?toManual X S Y t t t
red manual green show_green toManual toAuto going_auto show_red turn_off going_manual
red πππππ§π ππ yellow πππππ§π§πππππ₯ green πππππ§ππ πππ manual β
going_manual
0π‘
going_auto
0π‘
+
S t (π‘π, 0) π’π π‘π (πππ¦π’ π‘π, π , π¦ , 0) (ππππ’(π‘π), 0) πππ¦π’ ππππ’
π’π π’π + π π’π + π’π π‘π π
!show_red !show_yellow !show_green π = 0π‘ !show_red !turn_off ?toAuto ?toManual ?toManual ?toManual red πππππ§π ππ yellow πππππ§π§πππππ₯ green πππππ§ππ πππ manual β
going_manual
0π‘
going_auto
0π‘
work 3600s idle 300s !go_to_work !take_break π = 280π‘
π΅ππππππ π΅ππππ ππππ π· = πΈ, ππ ππ = ππ π β πΈ ππ = ππ, π
π, ππ, πππππ’,π, ππππ’,π, πππ¦π’,π, ππ, π’ππ , β π β πΈ
πΈ = {πππβπ’1, πππ1} π΅ππππππ π΅ππππ ππππ π· = πΈ, ππ ππ = ππ π β πΈ ππ = ππ, π
π, ππ, πππππ’,π, ππππ’,π, πππ¦π’,π, ππ, π’ππ , β π β πΈ
π΅ππππππ π΅ππππ ππππ π· = ππ‘πππ, π
π‘πππ, πΈ, ππ
ππ = ππ π β πΈ ππ = ππ, π
π, ππ, πππππ’,π, ππππ’,π, πππ¦π’,π, ππ, π’ππ , β π β πΈ
π½π :Influencees of π π΅ππππππ π΅ππππ ππππ π· = ππ‘πππ, π
π‘πππ, πΈ, ππ, π½π
π½π = π½π π β πΈ βͺ π‘πππ β π β πΈ βͺ π‘πππ βΆ π½π β πΈ βͺ π‘πππ β π β πΈ βͺ π‘πππ βΆ π β π½π ππ = ππ π β πΈ ππ = ππ, π
π, ππ, πππππ’,π, ππππ’,π, πππ¦π’,π, ππ, π’ππ , β π β πΈ
π½π :Influencees of π π΅ππππππ π΅ππππ ππππ π½πππβπ’1 = {π‘πππ} π½πππ1 = {πππβπ’1} π½π‘πππ = {πππβπ’1} π· = ππ‘πππ, π
π‘πππ, πΈ, ππ, π½π
π½π = π½π π β πΈ βͺ π‘πππ β π β πΈ βͺ π‘πππ βΆ π½π β πΈ βͺ π‘πππ β π β πΈ βͺ π‘πππ βΆ π β π½π ππ = ππ π β πΈ ππ = ππ, π
π, ππ, πππππ’,π, ππππ’,π, πππ¦π’,π, ππ, π’ππ , β π β πΈ
π΅ππππππ π΅ππππ ππππ
π
πππ1 = {ππ_π’π_π₯ππ π, π’πππ_ππ πππ}
ππππβπ’1 = {π’πππππ£ππ, π’ππ΅π£π’π}
π· = ππ‘πππ, π
π‘πππ, πΈ, ππ, π½π, ππ
π½π = π½π π β πΈ βͺ π‘πππ β π β πΈ βͺ π‘πππ βΆ π½π β πΈ βͺ π‘πππ β π β πΈ βͺ π‘πππ βΆ π β π½π ππ = ππ,π π β πΈ βͺ π‘πππ , π β π½π ππ‘πππ,π βΆ ππ‘πππ β π
π, β π β πΈ
ππ,π‘πππ βΆ π
π β π π‘πππ, β π β πΈ
ππ,π βΆ π
π β π π, β π, π β πΈ
ππ = ππ π β πΈ ππ = ππ, π
π, ππ, πππππ’,π, ππππ’,π, πππ¦π’,π, ππ, π’ππ , β π β πΈ
π΅ππππππ π΅ππππ ππππ
take_break ο toAuto go_to_work ο toManual
π· = ππ‘πππ, π
π‘πππ, πΈ, ππ, π½π, ππ
π½π = π½π π β πΈ βͺ π‘πππ β π β πΈ βͺ π‘πππ βΆ π½π β πΈ βͺ π‘πππ β π β πΈ βͺ π‘πππ βΆ π β π½π ππ = ππ,π π β πΈ βͺ π‘πππ , π β π½π ππ‘πππ,π βΆ ππ‘πππ β π
π, β π β πΈ
ππ,π‘πππ βΆ π
π β π π‘πππ, β π β πΈ
ππ,π βΆ π
π β π π, β π, π β πΈ
ππ = ππ π β πΈ ππ = ππ, π
π, ππ, πππππ’,π, ππππ’,π, πππ¦π’,π, ππ, π’ππ , β π β πΈ
π· = ππ‘πππ, π
π‘πππ, πΈ, ππ, π½π, ππ, π‘πππππ’
π½π = π½π π β πΈ βͺ π‘πππ β π β πΈ βͺ π‘πππ βΆ π½π β πΈ βͺ π‘πππ β π β πΈ βͺ π‘πππ βΆ π β π½π ππ = ππ,π π β πΈ βͺ π‘πππ , π β π½π ππ‘πππ,π βΆ ππ‘πππ β π
π, β π β πΈ
ππ,π‘πππ βΆ π
π β π π‘πππ, β π β πΈ
ππ,π βΆ π
π β π π, β π, π β πΈ
π‘πππππ’ βΆ 2πΈ β πΈ β πΉ β πΈ, πΉ β β : π‘πππππ’ πΉ β πΉ ππ = ππ π β πΈ ππ = ππ, π
π, ππ, πππππ’,π, ππππ’,π, πππ¦π’,π, ππ, π’ππ , β π β πΈ
π΅ππππππ π΅ππππ ππππ
take_break ο toAuto go_to_work ο toManual
from pypdevs.DEVS import * from trafficlight import TrafficLight from policeman import Policeman def translate(in_evt): mapping = {βtake_breakβ: βtoAutoβ, βgo_to_workβ: βtoManualβ} return mapping[in_evt] 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, translate) def select(self, immlist): if self.police in immlist: return self.police else: return self.light trafficlight_system.py Concrete Syntax
__ Current Time: 0.00 __________________________________________ INITIAL CONDITIONS in model <system.light> Initial State: green Next scheduled internal transition at time 57.00 INITIAL CONDITIONS in model <system.policeman> Initial State: idle Next scheduled internal transition at time 20.00
__ Current Time: 20.00 __________________________________________ EXTERNAL TRANSITION in model <system.light> Input Port Configuration: port <interrupt>: toManual New State: going_manual Next scheduled internal transition at time 20.0 INTERNAL TRANSITION in model <system.policeman> New State: working Output Port Configuration: port <output>: go_to_work Next scheduled internal transition at time 3620.00
__ Current Time: 20.00 __________________________________________ INTERNAL TRANSITION in model <system.light> Output Port Configuration: port <observer>: turn_off New State: manual Next scheduled internal transition at time inf
__ Current Time: 3620.00 __________________________________________ EXTERNAL TRANSITION in model <system.light> Input Port Configuration: port <interrupt>: toAuto New State: going_auto Next scheduled internal transition at time 3620.00 INTERNAL TRANSITION in model <system.policeman> New State: idle Output Port Configuration: port <output>: take_break Next scheduled internal transition at time 3920.00
__ Current Time: 3620.00 __________________________________________ INTERNAL TRANSITION in model <system.light> Output Port Configuration: port <observer>: show_red New State: red Next scheduled internal transition at time 3680.00
__ Current Time: 3620.00 __________________________________________ EXTERNAL TRANSITION in model <system.light> Input Port Configuration: port <interrupt>: toAuto New State: going_auto Next scheduled internal transition at time 3620.00 INTERNAL TRANSITION in model <system.policeman> New State: idle Output Port Configuration: port <output>: take_break Next scheduled internal transition at time 3920.00
__ Current Time: 3920.00 __________________________________________ CONFLICT between models: <system.light> * <system.policeman> EXTERNAL TRANSITION in model <system.light> Input Port Configuration: port <interrupt>: toManual New State: going_manual Next scheduled internal transition at time 3920.00 INTERNAL TRANSITION in model <system.policeman> New State: work Output Port Configuration: port <output>: go_to_work Next scheduled internal transition at time 7520.00
π΅ππππππ π΅ππππ ππππ
take_break ο toAuto go_to_work ο toManual
π·π = ππ‘πππ, π
π‘πππ, πΈ, ππ, π½π, ππ
ππππ’π’ππ π·π = π, π, π, πππππ’, ππππ’, πππ¦π’, π, π’π flatten
ππππ’π’ππ π·π = π, π, π, πππππ’, ππππ’, πππ¦π’, π, π’π
CM
ππ·π π
π·π
π1 π2
ππ·π π
π·π
π1 π2 ππππ’π’ππ π·π = π, π, π, πππππ’, ππππ’, πππ¦π’, π, π’π
CM
π = ππ·π π = π
π·π
ππππ’π’ππ π·π = π, π, π, πππππ’, ππππ’, πππ¦π’, π, π’π
CM
ππ·π π
π·π
π1 π2 π‘1, π1 π‘2, π2 π2 π1
ππππ’π’ππ π·π = π, π, π, πππππ’, ππππ’, πππ¦π’, π, π’π π = ΓπβπΈ π π
CM
ππ·π π
π·π
π1 π2 π‘1, π1 π‘2, π2 π2 π1
ππππ’π’ππ π·π = π, π, π, πππππ’, ππππ’, πππ¦π’, π, π’π
CM
ππ·π π
π·π
π1 π2 π‘1, π1 = πππππ’,1 π‘2, π2 = πππππ’,2 π2 π1 π’π1 π‘1 π’π2 π‘2
ππππ’π’ππ π·π = π, π, π, πππππ’, ππππ’, πππ¦π’, π, π’π
CM
ππ·π π
π·π
π1 π2 π‘1, π1 = πππππ’,1 π‘2, π2 = πππππ’,2 π2 π1 π’π1 π‘1 π’π2 π‘2 πππππ’ = π‘ππππ’, πππππ’
ππππ’π’ππ π·π = π, π, π, πππππ’, ππππ’, πππ¦π’, π, π’π
CM
ππ·π π
π·π
π1 π2 π‘1, π1 = πππππ’,1 π‘2, π2 = πππππ’,2 π2 π1 π’π1 π‘1 π’π2 π‘2 πππππ’ = π‘ππππ’, πππππ’ π‘ππππ’ = β¦ , π‘ππππ’,π, πππππ’,π β πππππ’ , β¦
πππππ’ = min
πβπΈ πππππ’,π
ππππ’π’ππ π·π = π, π, π, πππππ’, ππππ’, πππ¦π’, π, π’π
CM
ππ·π π
π·π
π1 π2 π‘1, π1 = πππππ’,1 π‘2, π2 = πππππ’,2 π2 π1 π’π1 π‘1 π’π2 π‘2 πππππ’ = π‘ππππ’, πππππ’ π‘ππππ’ = β¦ , π‘ππππ’,π, πππππ’,π β πππππ’ , β¦
πππππ’ = min
πβπΈ πππππ’,π
ππππ’π’ππ π·π = π, π, π, πππππ’, ππππ’, πππ¦π’, π, π’π
CM
ππ·π π
π·π
π1 π2 π‘1, π1 = πππππ’,1 π‘2, π2 = πππππ’,2 π2 π1 π’π1 π‘1 π’π2 π‘2 πππππ’ = π‘ππππ’, πππππ’ π‘ππππ’,π, πππππ’,π = πππππ’,π π‘ππππ’ = β¦ , π‘ππππ’,π, πππππ’,π β πππππ’ , β¦
ππ·π π
π·π
π1 π2 π’π1 π’π2 π’ π1 ππππ’π’ππ π·π = π, π, π, πππππ’, ππππ’, πππ¦π’, π, π’π
CM
ππ·π π
π·π
π1 π2 π’π βΆ π β β0,+β
+
π’π π‘ = min
πβπΈ ππ = π’ππ π‘π β ππ
π’π1 π’π2 π’ π1 π1 π2 ππππ’π’ππ π·π = π, π, π, πππππ’, ππππ’, πππ¦π’, π, π’π
CM
ππ·π π
π·π
π1 π2 π’π βΆ π β β0,+β
+
π’π π‘ = min
πβπΈ ππ = π’ππ π‘π β ππ
π½ππ π‘ = π β πΈ ππ = π’π(π‘) π‘πππππ’(π½ππ π‘ ) = πβ π’π1 π’π2 π’ π1 π1 π2 ππππ’π’ππ π·π = π, π, π, πππππ’, ππππ’, πππ¦π’, π, π’π
CM
ππππ’π’ππ π·π = π, π, π, πππππ’, ππππ’, πππ¦π’, π, π’π
CM
ππ·π π
π·π
π1 π2 π’
ππ·π π
π·π
π1 π2 π π‘ = ΰ΅ππβ,π‘πππ ππβ π‘πβ β ππ π‘πππ β π½πβ ππ π‘πππ β π½πβ π’ ππππ’π’ππ π·π = π, π, π, πππππ’, ππππ’, πππ¦π’, π, π’π
CM
π§2
ππππ’π’ππ π·π = π, π, π, πππππ’, ππππ’, πππ¦π’, π, π’π
CM
ππ·π π
π·π
π1 π2 π’
π‘1, 0 π‘1, π’π1 π‘1 π‘2, π2 π‘2, π2 + π’π π‘ = π’π2(π‘2) π‘2
β², 0
π’π π‘
ππ·π π
π·π
π1 π2 ππππ’ π‘ = β¦ , π‘
π β², π π β² , β¦
π‘
π β², π π β² =
ππππ’,π π‘
π , 0
πππ π = πβ ? πππ π β π½πβ β π‘πππ π‘
π, π π + π’π π‘
πππ‘π π’
π‘1, 0 π‘1, π’π1 π‘1 π‘2, π2 π‘2, π2 + π’π π‘ = π’π2(π‘2) π‘2
β², 0
ππππ’π’ππ π·π = π, π, π, πππππ’, ππππ’, πππ¦π’, π, π’π
CM
π’π π‘
π’ ππ·π π
π·π
π1 π2 ππππ’ π‘ = β¦ , π‘
π β², π π β² , β¦
π‘
π β², π π β² =
ππππ’,π π‘
π , 0
πππ π = πβ πππ¦π’,π π‘
π, π π + π’π π‘
, ππβ,π ππβ π‘πβ , 0 πππ π β π½πβ β π‘πππ π‘
π, π π + π’π π‘
πππ‘π
π‘1, π1 π‘1, π1 + π’π π‘ = π’π1(π‘1) π‘2, π2 π‘2, π2 + π’π π‘ β€ π’π2 π‘2 ππππ’ πππ¦π’ π‘1
β², 0
π‘2
β², 0
ππππ’π’ππ π·π = π, π, π, πππππ’, ππππ’, πππ¦π’, π, π’π
CM
π§1 π¦2
ππππ’π’ππ π·π = π, π, π, πππππ’, ππππ’, πππ¦π’, π, π’π
CM
ππ·π π
π·π
π1 π2 π’ π π1
ππ·π π
π·π
π1 π2 πππ¦π’ π‘, π , π¦ = β¦ , π‘π
β², ππ β² , β¦
π‘π
β², ππ β² = α πππ¦π’,π
π‘π, ππ + π , ππ‘πππ,π π¦ , 0 πππ π β π½π‘πππ π‘π, ππ + π πππ‘π π’ ππππ’π’ππ π·π = π, π, π, πππππ’, ππππ’, πππ¦π’, π, π’π
CM
π§π‘πππ π π1
π = ΓπβπΈ π π π’π π‘ = min
πβπΈ ππ = π’ππ π‘π β ππ
π½ππ π‘ = π β πΈ ππ = π’π(π‘) π π‘ = ΰ΅ππβ,π‘πππ ππβ π‘πβ π ππ π‘πππ β π½πβ ππ π‘πππ β π½πβ ππππ’ π‘ = β¦ , π‘
π β², π π β² , β¦
π‘π
β², ππ β² = α πππ¦π’,π
π‘π, ππ + π , ππ‘πππ,π π¦ , 0 πππ π β π½π‘πππ π‘π, ππ + π πππ‘π ππππ’π’ππ π·π = π, π, π, πππππ’, ππππ’, πππ¦π’, π, π’π πππππ’ = min
πβπΈ πππππ’,π
πππππ’ = π‘ππππ’, πππππ’ β π π‘
π β², π π β² =
ππππ’,π π‘
π , 0
πππ π = πβ πππ¦π’,π π‘
π, π π + π’π π‘
, ππβ,π ππβ π‘πβ , 0 πππ π β π½πβ π‘
π, π π + π’π π‘
πππ‘π π = ππ·π π = π
π·π
π‘ππππ’,π, πππππ’,π = πππππ’,π π‘ππππ’ = (β¦ , π‘ππππ’,π, πππππ’,π β πππππ’ , β¦ ) π = π‘, π π‘ β π, 0 β€ π β€ π’π(π‘) πβ = π‘πππππ’(π½ππ π‘ ) πππ¦π’ π‘, π , π¦ = β¦ , π‘π
β², ππ β² , β¦
(done, t) (*, t) (y, t) (x, t) (*, t) (done, t) (done, t)
Root coordinator Coordinator Simulator Simulator Coupled DEVS Atomic DEVS Atomic DEVS
(i, t) (done, t) (done, t) (i, t) (done, t)
Atomic DEVS Coupled DEVS Operational Semantics Denotational Semantics Abstract Simulator [1] Hierarchical Simulator Closure under Coupling [1] Ashvin Radiya and Robert G. Sargent. A logic-based foundation of discrete event modeling and simulation. ACM Transactions on Modeling and Computer Simulation, 1(1):3-51, 1994.
ο΅ Atomic DEVS ο΅ Coupled DEVS ο΅ Closure under coupling ο΅ Abstract Simulator
(i,t) (x, t) (y, t) (*, t) (done, t) π΅ππππππ π΅ππππ ππππ
take_break ο toAuto go_to_work ο toManual
ο΅ Parallel implementation
ο΅ Parallel DEVS [1]
ο΅ Select function is artificial
ο΅ Parallel DEVS [1]
ο΅ Dynamic Structure systems
ο΅ Dynamic Structure DEVS [2]
[1] A.C.-H. Chow. Parallel DEVS: A parallel, hierarchical, modular modeling formalism and its distributed simulator. Transactions of the Society for Computer Simulation International, 13(2):55-68, 1996. [2] F . Barros. The dynamic structure discrete event system specification formalism. Transactions of the Society for Computer Simulation International, 13(1):35-46, 1996.
Formalisms
Dynamic Structure Real-time Cell DEVS Verification
Standardization
Tools Languages Interoperable
Performance
Algorithms Activity Distribution Parallel
Model libraries
Example Reusable
Applications