def tester(buffer_size, rps, num_packets=100, num_tests=1000): # we are testing in milliseconds # or milli unit time, as it can be scaled naturally. lam = rps / 1000 # beta is average time interval between two arrival events. (measured compared to processing speed) beta = 1 / lam # just using Rayleigh distribution for processing time of requests. # Can play around with other distributions such as Maxwell-Boltzmann. arrival_times = np.random.exponential(beta, (num_tests, num_packets)) process_times = np.random.rayleigh(1, (num_tests, num_packets)) buffer = Buffer(buffer_size) dropped = np.zeros(num_tests) for i in range(num_tests): arrival_time = 0 Q = EventQueue() for j in range(num_packets): arrival_time += arrival_times[i, j] process_time = process_times[i, j] Q.insert(arrival(arrival_time, process_time)) while Q.notEmpty(): e = Q.next() e.action(Q, buffer) dropped[i] = buffer.num_dropped() buffer.reset() # restarting buffer for next test. Q.reset() # restarting queue for next test. return dropped
def __init__(self, prevState=None): """ Generates a new state by copying information from its predecessor. """ if prevState != None: # Initial state self.data = GameStateData(prevState.data) self.eventQueue = prevState.eventQueue.deepCopy() else: self.data = GameStateData() self.eventQueue = EventQueue()