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
예제 #2
0
 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()