Как сократить мой класс и исправить ошибку в коде - PullRequest
0 голосов
/ 18 апреля 2020

Так что для моего задания я должен стимулировать систему очередей 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()
...