Я пытаюсь смоделировать очередь с ограниченным буфером, в которой ни один пакет не отбрасывается, но находится в ожидании. Потерпите меня, так как я всего лишь студент с базовыми навыками кодирования.
Пакет поступает экспоненциально распределенным, и каждый из них содержит средний размер пакета 1250 байт. Мне удалось заставить код работать для прибытия пакета + время обработки, но я не мог заставить пакет «отправиться», а также имитировать очередь (пока что это с неограниченным буфером). Есть ли что-нибудь, что я мог бы сделать для имитации отправления пакета и лимит очереди?
код:
import random
import simpy
RANDOM_SEED = 42
NEW_CUSTOMERS = 100 # Total number of customers
INTERVAL_CUSTOMERS = 1 # Generate new customers roughly every x seconds
SIZE = 1250
def source(env, number, interval, port):
"""Source generates packet randomly"""
for i in range(number):
size = int(random.expovariate(0.0008))
packet = Packet(env, '%d' % i, size, port, time_in_port=1)
env.process(packet)
t = random.expovariate(1 / interval)
yield env.timeout(t)
def Packet(env, id, size, port, time_in_port):
arrive = env.now
yield Queue.buffer.put(size)
print('packet%s %s arriving at %lf' % (id, size, arrive))
with port.request() as req:
yield req
tip = random.expovariate(1/time_in_port)
yield env.timeout(tip)
amount = size
yield Queue.buffer.get(amount)
print('packet%s %s finished processing at %lf' % (id, size, env.now))
class queue: #THIS PART WON'T WORK
def __init__(self, env):
self.port = simpy.Resource(env, capacity=1)
self.buffer = simpy.Container(env, init = 0, capacity=12500)
self.mon_proc = env.process(self.monitor_tank(env))
def monitor_tank(self, env):
while True:
if self.buffer.level > 12500:
print('Full at %d' % env.now)
random.seed(RANDOM_SEED)
env = simpy.Environment()
Queue = queue(env)
port = simpy.Resource(env, capacity=1)
env.process(source(env, NEW_CUSTOMERS, INTERVAL_CUSTOMERS, port))
env.run()
Класс очереди не работал (программа вообще не запускается). Он будет работать, если только я удалю класс очереди и смоделирую время прибытия и обработки пакетов. Буду признателен за любую помощь, чтобы заставить меня имитировать отправку пакета (используя приемник) и ограничение очереди. Спасибо.