queue_example_classic.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. from pypdevs.DEVS import AtomicDEVS, CoupledDEVS
  2. from pypdevs.simulator import Simulator
  3. from pypdevs.infinity import INFINITY
  4. class Generator(AtomicDEVS):
  5. def __init__(self):
  6. AtomicDEVS.__init__(self, "Generator")
  7. self.state = True
  8. self.outport = self.addOutPort("outport")
  9. def timeAdvance(self):
  10. if self.state:
  11. return 1.0
  12. else:
  13. return INFINITY
  14. def outputFnc(self):
  15. # Our message is simply the integer 5, though this could be anything
  16. return {self.outport: 5}
  17. def intTransition(self):
  18. self.state = False
  19. return self.state
  20. class Queue(AtomicDEVS):
  21. def __init__(self):
  22. AtomicDEVS.__init__(self, "Queue")
  23. self.state = None
  24. self.processing_time = 1.0
  25. self.inport = self.addInPort("input")
  26. self.outport = self.addOutPort("output")
  27. def timeAdvance(self):
  28. if self.state is None:
  29. return INFINITY
  30. else:
  31. return self.processing_time
  32. def outputFnc(self):
  33. return {self.outport: self.state}
  34. def intTransition(self):
  35. self.state = None
  36. return self.state
  37. def extTransition(self, inputs):
  38. self.state = inputs[self.inport]
  39. return self.state
  40. class CQueue(CoupledDEVS):
  41. def __init__(self):
  42. CoupledDEVS.__init__(self, "CQueue")
  43. self.generator = self.addSubModel(Generator())
  44. self.queue = self.addSubModel(Queue())
  45. self.connectPorts(self.generator.outport, self.queue.inport)
  46. class DQueue(CoupledDEVS):
  47. def __init__(self):
  48. CoupledDEVS.__init__(self, "DQueue")
  49. self.generator = self.addSubModel(Generator())
  50. self.queue1 = self.addSubModel(Queue())
  51. self.queue2 = self.addSubModel(Queue())
  52. self.connectPorts(self.generator.outport, self.queue1.inport)
  53. self.connectPorts(self.generator.outport, self.queue2.inport)
  54. model = CQueue()
  55. sim = Simulator(model)
  56. sim.setClassicDEVS()
  57. sim.setTerminationTime(5.0)
  58. sim.setVerbose()
  59. sim.simulate()