Add tutorial models
This commit is contained in:
parent
a3050e5f1d
commit
070993ac35
17 changed files with 533 additions and 0 deletions
56
examples/tutorial_parallel/atomic_conf.py
Normal file
56
examples/tutorial_parallel/atomic_conf.py
Normal file
|
|
@ -0,0 +1,56 @@
|
|||
### Model
|
||||
from pypdevs.DEVS import *
|
||||
|
||||
class TrafficLight(AtomicDEVS):
|
||||
def __init__(self):
|
||||
AtomicDEVS.__init__(self, "Light")
|
||||
self.state = "green"
|
||||
self.observe = self.addOutPort("observer")
|
||||
self.interrupt = self.addInPort("interrupt")
|
||||
|
||||
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]
|
||||
|
||||
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]}
|
||||
|
||||
def extTransition(self, inputs):
|
||||
inp = inputs[self.interrupt][0]
|
||||
if inp == "manual":
|
||||
return "manual"
|
||||
elif inp == "auto":
|
||||
if self.state == "manual":
|
||||
return "red"
|
||||
|
||||
def confTransition(self, inputs):
|
||||
self.elapsed = 0.0
|
||||
self.state = self.intTransition()
|
||||
self.state = self.extTransition(inputs)
|
||||
return self.state
|
||||
|
||||
### Experiment
|
||||
from pypdevs.simulator import Simulator
|
||||
|
||||
model = TrafficLight()
|
||||
sim = Simulator(model)
|
||||
|
||||
sim.setVerbose()
|
||||
sim.setTerminationTime(500)
|
||||
|
||||
sim.simulate()
|
||||
52
examples/tutorial_parallel/atomic_ext.py
Normal file
52
examples/tutorial_parallel/atomic_ext.py
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
### Model
|
||||
from pypdevs.DEVS import *
|
||||
from pypdevs.infinity import INFINITY
|
||||
|
||||
class TrafficLight(AtomicDEVS):
|
||||
def __init__(self):
|
||||
AtomicDEVS.__init__(self, "Light")
|
||||
self.state = "green"
|
||||
self.observe = self.addOutPort("observer")
|
||||
self.interrupt = self.addInPort("interrupt")
|
||||
|
||||
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,
|
||||
"manual": INFINITY}[state]
|
||||
|
||||
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]}
|
||||
|
||||
def extTransition(self, inputs):
|
||||
inp = inputs[self.interrupt][0]
|
||||
if inp == "manual":
|
||||
return "manual"
|
||||
elif inp == "auto":
|
||||
if self.state == "manual":
|
||||
return "red"
|
||||
|
||||
### Experiment
|
||||
from pypdevs.simulator import Simulator
|
||||
|
||||
model = TrafficLight()
|
||||
sim = Simulator(model)
|
||||
|
||||
sim.setVerbose()
|
||||
sim.setTerminationTime(500)
|
||||
|
||||
sim.simulate()
|
||||
30
examples/tutorial_parallel/atomic_int.py
Normal file
30
examples/tutorial_parallel/atomic_int.py
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
### Model
|
||||
from pypdevs.DEVS import *
|
||||
|
||||
class TrafficLightAutonomous(AtomicDEVS):
|
||||
def __init__(self):
|
||||
AtomicDEVS.__init__(self, "Light")
|
||||
self.state = "green"
|
||||
|
||||
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]
|
||||
|
||||
### Experiment
|
||||
from pypdevs.simulator import Simulator
|
||||
|
||||
model = TrafficLightAutonomous()
|
||||
sim = Simulator(model)
|
||||
|
||||
sim.setVerbose()
|
||||
sim.setTerminationTime(500)
|
||||
|
||||
sim.simulate()
|
||||
41
examples/tutorial_parallel/atomic_out.py
Normal file
41
examples/tutorial_parallel/atomic_out.py
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
### Model
|
||||
from pypdevs.DEVS import *
|
||||
|
||||
class TrafficLightWithOutput(AtomicDEVS):
|
||||
def __init__(self):
|
||||
AtomicDEVS.__init__(self, "Light")
|
||||
self.state = "green"
|
||||
self.observe = self.addOutPort("observer")
|
||||
|
||||
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]
|
||||
|
||||
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]}
|
||||
|
||||
### Experiment
|
||||
from pypdevs.simulator import Simulator
|
||||
|
||||
model = TrafficLightWithOutput()
|
||||
sim = Simulator(model)
|
||||
|
||||
sim.setVerbose()
|
||||
sim.setTerminationTime(500)
|
||||
|
||||
sim.simulate()
|
||||
5
examples/tutorial_parallel/mymodel.py
Normal file
5
examples/tutorial_parallel/mymodel.py
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
from pypdevs.DEVS import AtomicDEVS
|
||||
|
||||
class MyModel(AtomicDEVS):
|
||||
def __init__(self):
|
||||
AtomicDEVS.__init__(self, "example")
|
||||
25
examples/tutorial_parallel/policeman.py
Normal file
25
examples/tutorial_parallel/policeman.py
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
from pypdevs.DEVS import *
|
||||
|
||||
class Policeman(AtomicDEVS):
|
||||
def __init__(self):
|
||||
AtomicDEVS.__init__(self, "policeman")
|
||||
self.out = self.addOutPort("output")
|
||||
self.state = "idle"
|
||||
|
||||
def intTransition(self):
|
||||
if self.state == "idle":
|
||||
return "working"
|
||||
elif self.state == "working":
|
||||
return "idle"
|
||||
|
||||
def timeAdvance(self):
|
||||
if self.state == "idle":
|
||||
return 20
|
||||
elif self.state == "working":
|
||||
return 360
|
||||
|
||||
def outputFnc(self):
|
||||
if self.state == "idle":
|
||||
return {self.out: ["manual"]}
|
||||
elif self.state == "working":
|
||||
return {self.out: ["auto"]}
|
||||
10
examples/tutorial_parallel/simple_experiment.py
Normal file
10
examples/tutorial_parallel/simple_experiment.py
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
from pypdevs.simulator import Simulator
|
||||
|
||||
from mymodel import MyModel
|
||||
|
||||
model = MyModel()
|
||||
simulator = Simulator(model)
|
||||
|
||||
simulator.setVerbose()
|
||||
|
||||
simulator.simulate()
|
||||
46
examples/tutorial_parallel/trafficlight.py
Normal file
46
examples/tutorial_parallel/trafficlight.py
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
from pypdevs.DEVS import *
|
||||
from pypdevs.infinity import INFINITY
|
||||
|
||||
class TrafficLight(AtomicDEVS):
|
||||
def __init__(self):
|
||||
AtomicDEVS.__init__(self, "Light")
|
||||
self.state = "green"
|
||||
self.observe = self.addOutPort("observer")
|
||||
self.interrupt = self.addInPort("interrupt")
|
||||
|
||||
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,
|
||||
"manual": INFINITY}[state]
|
||||
|
||||
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]}
|
||||
|
||||
def extTransition(self, inputs):
|
||||
inp = inputs[self.interrupt][0]
|
||||
if inp == "manual":
|
||||
return "manual"
|
||||
elif inp == "auto":
|
||||
if self.state == "manual":
|
||||
return "red"
|
||||
|
||||
def confTransition(self, inputs):
|
||||
self.elapsed = 0.0
|
||||
self.state = self.intTransition()
|
||||
self.state = self.extTransition(inputs)
|
||||
return self.state
|
||||
19
examples/tutorial_parallel/trafficlight_system.py
Normal file
19
examples/tutorial_parallel/trafficlight_system.py
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
### Model
|
||||
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)
|
||||
|
||||
### Experiment
|
||||
from pypdevs.simulator import Simulator
|
||||
sim = Simulator(TrafficLightSystem())
|
||||
sim.setVerbose()
|
||||
sim.setTerminationTime(1000)
|
||||
sim.simulate()
|
||||
Loading…
Add table
Add a link
Reference in a new issue