예제 #1
0
def get_S_qavg_lists(Vs, policy, S):
    qavg = 0
    qlist = [0, 0, 0]  # a list for values of the average queue length
    # in the order of q11, q12, q21
    for t in range(1, ITER + 1):
        lambdaRv_list = ht.arrivalRate(Vs[0], Vs[1], Vs[2], S)
        # a list for random variables of the arrival rate, normal distr
        # in the order of lambda11_norm, lambda12_norm, lambda21_norm
        qlist = ht.updateQ(
            qlist[0], qlist[1], qlist[2], lambdaRv_list[0], lambdaRv_list[1],
            lambdaRv_list[2])  # Update arrivals on queue lengths in qlist
        if policy == "MaxWt":
            qlist = ht.MaxWt(qlist[0], qlist[1], qlist[2])
        elif policy == "PriE":
            qlist = ht.PriE(qlist[0], qlist[1], qlist[2])
        elif policy == "Algo_2":
            qlist = ht.Algo_2(qlist[0], qlist[1], qlist[2])
        elif policy == "Algo_3":
            qlist = ht.Algo_3(qlist[0], qlist[1], qlist[2])
        # Update qlist
        if t > ITER / 10:
            tau = t - ITER / 10
            qavg = ht.updateQavg(qlist, qavg, tau)
        # Update the total average queue length
    return [S, qavg]  # Return S and its corresponding average queue length
def get_Plot_lists(Vs, policy, S):
    plotlistx = []
    plotlisty = []
    plotlistz = []
    qlist = [0, 0, 0, 0] # a list for values of the average queue length
    # in the order of q11, q12, q21
    for t in range(1, ITER + 1):
        lambdaRv_list = ht.arrivalRate(Vs[0], Vs[1], Vs[2], Vs[3], S)
        # a list for random variables of the arrival rate, normal distr
        # in the order of lambda11_norm, lambda12_norm, lambda21_norm
        if policy == "MaxWt":
            qlist = ht.MaxWt(qlist[0], qlist[1], qlist[2], qlist[3],
                    lambdaRv_list[0], lambdaRv_list[1],
                    lambdaRv_list[2], lambdaRv_list[3])
        elif policy == "Pri_E":
            qlist = ht.Pri_E(qlist[0], qlist[1], qlist[2], qlist[3],
                    lambdaRv_list[0], lambdaRv_list[1],
                    lambdaRv_list[2], lambdaRv_list[3])
        elif policy == "MaxSize_PriMaxWt":
            qlist = ht.MaxSize_PriMaxWt(qlist[0], qlist[1], qlist[2], qlist[3],
                    lambdaRv_list[0], lambdaRv_list[1],
                    lambdaRv_list[2], lambdaRv_list[3])
        elif policy == "MaxSize_PriMaxWtLog":
            qlist = ht.MaxSize_PriMaxWtLog(qlist[0], qlist[1], qlist[2], qlist[3],
                    lambdaRv_list[0], lambdaRv_list[1],
                    lambdaRv_list[2], lambdaRv_list[3])
        elif policy == "Algo_2":
            qlist = ht.Algo_2(qlist[0], qlist[1], qlist[2], qlist[3],
                    lambdaRv_list[0], lambdaRv_list[1],
                    lambdaRv_list[2], lambdaRv_list[3])
        elif policy == "Algo_3":
            qlist = ht.Algo_3(qlist[0], qlist[1], qlist[2], qlist[3],
                    lambdaRv_list[0], lambdaRv_list[1],
                    lambdaRv_list[2], lambdaRv_list[3])
        # Update qlist
        if t > ITER*6/10: #Throwing away the first 60%
            #tau = t-ITER*6/10
            #qavg = ht.updateQavg(qlist, qavg, tau)
            # Update the total average queue length
            #epsilon_times_qavg = (1 - S) * qavg # epsilon = (1 - S)
            plotlistx.append(qlist[0])
            plotlisty.append(qlist[2])
            plotlistz.append(qlist[3])
    return [policy, plotlistx, plotlisty, plotlistz] # Return S and its corresponding average queue length