123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- import sys
- sys.path.append("../../src/")
- from DEVS import *
- import random
- class Generator(AtomicDEVS):
- def __init__(self, num, ta):
- AtomicDEVS.__init__(self, "Generator" + str(num))
- self.state = None
- self.ta = ta
-
- def timeAdvance(self):
- return self.ta
- class StaticModel(CoupledDEVS):
- def __init__(self, size, actives):
- CoupledDEVS.__init__(self, "Root")
- random.seed(1)
- tas = [round(random.random(), 3) for _ in range(int(size/actives+1))]
- ta_counter = 0
- for i in range(size):
- self.addSubModel(Generator(i, tas[0]))
- if ta_counter >= actives:
- ta_counter = 0
- tas.pop(0)
- else:
- ta_counter += 1
- class DynamicGenerator(AtomicDEVS):
- def __init__(self, num, nexttype):
- AtomicDEVS.__init__(self, "Generator" + str(num))
- self.state = (nexttype, True, round(random.uniform(4.00, 6.00), 4))
- self.nexttype = nexttype
- def intTransition(self):
- if self.state[0] - self.timeAdvance() <= 0:
- return (self.nexttype, not self.state[1], self.state[2])
- else:
- return (self.state[0] - self.timeAdvance(), self.state[1], self.state[2])
-
- def timeAdvance(self):
- if self.state[1]:
- return min(1.0, self.state[0])
- else:
- return min(self.state[2], self.state[0])
- class DynamicModel(CoupledDEVS):
- def __init__(self, size):
- CoupledDEVS.__init__(self, "Root")
- random.seed(1)
- for i in range(size):
- self.addSubModel(DynamicGenerator(i, 2000))
|