model.py 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import sys
  2. sys.path.append("../../src/")
  3. from DEVS import *
  4. import random
  5. class Generator(AtomicDEVS):
  6. def __init__(self, num, ta):
  7. AtomicDEVS.__init__(self, "Generator" + str(num))
  8. self.state = None
  9. self.ta = ta
  10. def timeAdvance(self):
  11. return self.ta
  12. class StaticModel(CoupledDEVS):
  13. def __init__(self, size, actives):
  14. CoupledDEVS.__init__(self, "Root")
  15. random.seed(1)
  16. tas = [round(random.random(), 3) for _ in range(int(size/actives+1))]
  17. ta_counter = 0
  18. for i in range(size):
  19. self.addSubModel(Generator(i, tas[0]))
  20. if ta_counter >= actives:
  21. ta_counter = 0
  22. tas.pop(0)
  23. else:
  24. ta_counter += 1
  25. class DynamicGenerator(AtomicDEVS):
  26. def __init__(self, num, nexttype):
  27. AtomicDEVS.__init__(self, "Generator" + str(num))
  28. self.state = (nexttype, True, round(random.uniform(4.00, 6.00), 4))
  29. self.nexttype = nexttype
  30. def intTransition(self):
  31. if self.state[0] - self.timeAdvance() <= 0:
  32. return (self.nexttype, not self.state[1], self.state[2])
  33. else:
  34. return (self.state[0] - self.timeAdvance(), self.state[1], self.state[2])
  35. def timeAdvance(self):
  36. if self.state[1]:
  37. return min(1.0, self.state[0])
  38. else:
  39. return min(self.state[2], self.state[0])
  40. class DynamicModel(CoupledDEVS):
  41. def __init__(self, size):
  42. CoupledDEVS.__init__(self, "Root")
  43. random.seed(1)
  44. for i in range(size):
  45. self.addSubModel(DynamicGenerator(i, 2000))