model.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import random
  2. import sys
  3. sys.path.append("../../../src/")
  4. sys.path.append("../../src/")
  5. from DEVS import AtomicDEVS, CoupledDEVS
  6. class Node(AtomicDEVS):
  7. def __init__(self, nr, load):
  8. AtomicDEVS.__init__(self, "Node" + str(nr))
  9. self.state = None
  10. self.load = load
  11. def intTransition(self):
  12. for _ in xrange(self.load):
  13. pass
  14. return self.state
  15. def extTransition(self, inputs):
  16. return self.state
  17. def timeAdvance(self):
  18. return 1.0
  19. def outputFnc(self):
  20. return {}
  21. class ExchangeModel(AtomicDEVS):
  22. def __init__(self):
  23. AtomicDEVS.__init__(self, "Exchange")
  24. self.state = None
  25. self.inport = self.addInPort("in")
  26. self.outport = self.addOutPort("out")
  27. def intTransition(self):
  28. return self.state
  29. def extTransition(self, inputs):
  30. return self.state
  31. def timeAdvance(self):
  32. return 1.0
  33. def outputFnc(self):
  34. return {self.outport: [None]}
  35. class NodeGrid(CoupledDEVS):
  36. def __init__(self, load):
  37. CoupledDEVS.__init__(self, "Grid")
  38. for i in range(800):
  39. self.addSubModel(Node(i, load))
  40. class DualGrid(CoupledDEVS):
  41. def __init__(self, load):
  42. CoupledDEVS.__init__(self, "Root")
  43. grid1 = self.addSubModel(NodeGrid(load), 0)
  44. grid2 = self.addSubModel(NodeGrid(load), 1)
  45. grid1_node = self.addSubModel(ExchangeModel(), 0)
  46. grid2_node = self.addSubModel(ExchangeModel(), 1)
  47. self.connectPorts(grid1_node.outport, grid2_node.inport)
  48. self.connectPorts(grid2_node.outport, grid1_node.inport)
  49. if __name__ == "__main__":
  50. random.seed(1)
  51. from simulator import Simulator
  52. model = DualGrid(int(sys.argv[1]))
  53. sim = Simulator(model)
  54. sim.setTerminationTime(100)
  55. #sim.setVerbose(True)
  56. sim.setMessageCopy('none')
  57. sim.setStateSaving('assign')
  58. sim.setGVTInterval(5)
  59. memo = True if sys.argv[2] == "True" else False
  60. sim.setMemoization(memo)
  61. sim.setSchedulerSortedList()
  62. sim.simulate()