Так что для моего задания я должен стимулировать систему очередей FIFO из четырех серверов. Для этого я использовал этот код. Он имеет 4 класса, каждый из которых представляет сервер. Я знаю, что этот код, вероятно, не такой dry, как мог бы быть, и мои знания о занятиях очень плохие (поэтому, пожалуйста, не стесняйтесь высмеивать меня и исправлять меня).
Моя главная проблема, однако, в том, что когда я запускаю этот код, я получаю результат, говорящий, что длина моих ожиданий равна нулю. Буду очень признателен за любые предложения или помощь
импорт случайный импорт математика
class Jobs1:
def __init__(self,arrival,service_start,duration):
self.arrival = arrival
self.service_start = service_start
self.duration = duration
self.wait = service_start + duration
class Jobs2:
def __init__(self,arrival,service_start,duration):
self.arrival = arrival
self.service_start = service_start
self.duration = duration
self.wait = service_start + duration
class Jobs3:
def __init__(self,arrival,service_start,duration):
self.arrival = arrival
self.service_start = service_start
self.duration = duration
self.wait = service_start + duration
class Jobs4:
def __init__(self,arrival,service_start,duration):
self.arrival = arrival
self.service_start = service_start
self.duration = duration
self.wait = service_start + duration
def timing(time_next_arrival, time_next_departure):
if time_next_arrival<=time_next_departure:
return 1
else:
return 2
def main():
for counter in range (10):
intro=input('Would you like to input your variables (y/n)?')
if intro=='y':
average_arrival=int(input("Your average arrival time?:"))
average_packet_size=int(input("Your average packet size?:"))
elif intro=='n':
average_arrival=10
average_packet_size=1500
else:
raise IndexError
mean_arrival=10+counter
#initialisation of values
time = 0
completed_jobs = 0
end_of_simulation = 10
mean_duration = 10
mean_arrival=average_arrival+counter
queue_size=0
queue_area=0.0
Jobs=[]
Job1=[]
Job2=[]
Job3=[]
Job4=[]
x1=[]
while(time < end_of_simulation):
i=random.randint(1,4)
if len(Jobs)!=0:
next_event = timing(time_next_arrival, time_next_departure)
else:
next_event = 1
if next_event == 1:
## arrival
duration=mean_duration
if len(Job1) == 0 or len(Job2) == 0 or len(Job3) == 0 or len(Job4) == 0 :
time_next_arrival=random.expovariate(1/mean_arrival)
service_start=time_next_arrival
time_next_departure=time_next_arrival+duration
else:
time_next_arrival+=random.expovariate(1/mean_arrival)
service_start=max(time_next_arrival,Jobs[-1].service_end)
if i==1:
Job1.append(Jobs1(time_next_arrival,service_start,duration))
elif i==2:
Job2.append(Jobs2(time_next_arrival,service_start,duration))
elif i==3:
Job3.append(Jobs3(time_next_arrival,service_start,duration))
elif i==4:
Job4.append(Jobs4(time_next_arrival,service_start,duration))
queue_area+=(time_next_arrival-time)*queue_size
queue_size=queue_size+1
time=time_next_arrival
if queue_size == 0:
time_next_departure=time+duration
else:
#departure
queue_area+=(time_next_departure-time)*queue_size
queue_size=queue_size-1
completed_jobs=completed_jobs+1
time=time_next_departure
if queue_size != 0:
time_next_departure=Jobs[completed_jobs].service_end
Wait1=[Job1.wait for Job1 in Jobs]
Wait2=[Job2.wait for Job2 in Jobs]
Wait3=[Job3.wait for Job3 in Jobs]
Wait4=[Job4.wait for Job4 in Jobs]
print(len(Wait1))
print("current time is: ", time)
print("number of completed jobs: ", completed_jobs)
print("average wait in server1: ", sum(Wait1)/len(Wait1))
print("average wait in server2: ", sum(Wait2)/len(Wait2))
print("average wait in server3: ", sum(Wait3)/len(Wait3))
print("average wait in server4: ", sum(Wait4)/len(Wait4))
print("length wait in server1: ", len(Wait1))
print("length wait in server2: ", len(Wait2))
print("length wait in server3: ", len(Wait3))
print("length wait in server4: ", len(Wait4))
print("average queue size is: ", queue_area/time)
finallist1.append(sum(Wait1)/len(Wait1))
finallist2.append(sum(Wait2)/len(Wait2))
finallist3.append(sum(Wait3)/len(Wait3))
finallist4.append(sum(Wait4)/len(Wait4))
x1.append(3600/mean_arrival)
main()