atomic_out.py 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. ### Model
  2. from pypdevs.DEVS import *
  3. class TrafficLightWithOutput(AtomicDEVS):
  4. def __init__(self):
  5. AtomicDEVS.__init__(self, "Light")
  6. self.state = "green"
  7. self.elapsed = 0.0
  8. self.observe = self.addOutPort("observer")
  9. def intTransition(self):
  10. state = self.state
  11. return {"red": "green",
  12. "yellow": "red",
  13. "green": "yellow"}[state]
  14. def timeAdvance(self):
  15. state = self.state
  16. return {"red": 60,
  17. "yellow": 3,
  18. "green": 57}[state]
  19. def outputFnc(self):
  20. state = self.state
  21. if state == "red":
  22. return {self.observe: "show_green"}
  23. elif state == "yellow":
  24. return {self.observe: "show_red"}
  25. elif state == "green":
  26. return {self.observe: "show_yellow"}
  27. ### Experiment
  28. from pypdevs.simulator import Simulator
  29. model = TrafficLightWithOutput()
  30. sim = Simulator(model)
  31. sim.setVerbose()
  32. sim.setTerminationTime(500)
  33. sim.setClassicDEVS()
  34. sim.simulate()