simple_dsdevs.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. from pypdevs.DEVS import AtomicDEVS, CoupledDEVS
  2. from pypdevs.simulator import Simulator
  3. from pypdevs.infinity import INFINITY
  4. class MyAtomicDSModel(AtomicDEVS):
  5. def __init__(self, my_id):
  6. AtomicDEVS.__init__(self, "MyAtomicDSModel[%s]" % my_id)
  7. self.my_id = my_id
  8. self.ctr = 0
  9. self.remaining = 1
  10. self.out_port = self.addOutPort("out_port")
  11. self.in_port = self.addInPort("in_port")
  12. def set_sim(self, sim):
  13. self.sim = sim
  14. def timeAdvance(self):
  15. return self.remaining
  16. def outputFnc(self):
  17. print 'MyAtomicDSModel(%s) outputFnc' % id(self)
  18. return {self.out_port: "MyMessage"}
  19. def intTransition(self):
  20. self.ctr += 1
  21. self.remaining = 1
  22. print 'MyAtomicDSModel(%s:%s) intTransition' % (id(self), self.ctr)
  23. def extTransition(self, inputs):
  24. self.remaining -= self.elapsed
  25. print 'MyAtomicDSModel(%s) extTransition' % id(self)
  26. self.ctr += 1
  27. def modelTransition(self, state):
  28. print 'MyAtomicDSModel(%s) modelTransition %s' % (id(self), self.ctr)
  29. if self.ctr % 2 == 0:
  30. state[self.my_id] = "present"
  31. return True
  32. else:
  33. return False
  34. class MyDSModel(CoupledDEVS):
  35. def __init__(self):
  36. CoupledDEVS.__init__(self, "CoupledDEVS")
  37. self.amodel = self.addSubModel(MyAtomicDSModel(0))
  38. self.bmodel = self.addSubModel(MyAtomicDSModel(1))
  39. self.connectPorts(self.amodel.out_port, self.bmodel.in_port)
  40. self.connectPorts(self.bmodel.out_port, self.amodel.in_port)
  41. def modelTransition(self, state):
  42. print 'MyDSModel modelTransition %s' % state
  43. model = MyDSModel()
  44. sim = Simulator(model)
  45. model.amodel.set_sim(sim)
  46. model.bmodel.set_sim(sim)
  47. sim.setTerminationTime(10)
  48. sim.setDSDEVS(True)
  49. sim.setClassicDEVS(True)
  50. sim.simulate()