mosis24DEVS/models/seq_poly/model.py
Yentl Van Tendeloo 66a6860316 Initial commit
2016-08-04 17:38:43 +02:00

53 lines
1.6 KiB
Python

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))