Exemplo n.º 1
0
def main(file):
    instance = Suppliers_MRCPSP.Instance()
    file_temp = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))

    f_p = file
    f_CN = file_temp+"\data\CNfks.xlsx"
    f_O =file_temp+ "\data\Ofs.xlsx"
    qfs =file_temp+ "\data\qfs.xlsx"
    n=0
    # M=[1, 3, 3, 3, 1, 3, 2, 3, 2, 2, 3, 2, 3, 2, 3, 1]
    # starttime=[0, 12, 2, 4, 35, 27, 42, 44, 55, 54, 67, 43, 64, 78, 53, 91]


    instance.loadData(file_project=f_p, file_CNfks=f_CN, file_Ofs=f_O, file_qfs=qfs)
    supplier=instance.initial_Supplier()

    start_time=time.time()
    for i in range(50):
        ind=GA_Suppliers_MRCPSP.GA_RCPSP_ruba(instance,50,supplier)
        sup,ind=GA_Suppliers_MRCPSP.GA_RCPSP_cost(instance,20,ind,i)
        # sup, ind = GA_Suppliers_MRCPSP.Greedy_cost(instance, ind)
        supplier=sup
    end_time=time.time()
    T=end_time-start_time

    cost=[instance.project_cost(instance.best_ind[g],instance.best_sup[g],instance.best_ind[g].R_order_time) for g in range(len(instance.best_sup))]
    best_cost=min(cost)
    best_index=cost.index(best_cost)

    print(cost)


    best_S=instance.best_sup[best_index]
    best_I=instance.best_ind[best_index]
    best_T=instance.time[best_index]
    print( [instance.time[i]-start_time for i in range(len(instance.time))])
    ruba=instance.project_ruba(best_I,best_S)

    finishtime=[]
    duration=[]
    for i in range(len(best_I.M)):
        finishtime.append(best_I.starttime[i] + instance.job_model_duration[i + 1][best_I.M[i]])
        duration.append(instance.job_model_duration[i + 1][best_I.M[i]])

    doc=open("best_Bi-GA_J16.txt","w")
    print("-------------------最终结果----------------------",file=doc)
    print("寻找最优解时间:",best_T-start_time,file=doc)
    print("总算法时间:",T,file=doc)
    print("supplier",best_S,file=doc)
    print("order",best_I.order,file=doc)
    print("M",best_I.M, file=doc)
    print("starttime",best_I.starttime, file=doc)
    print("finishtime", finishtime, file=doc)
    print("duration", duration, file=doc)
    print("order_time",best_I.R_order_time, file=doc)
    best=instance.project_cost(best_I,best_S,best_I.R_order_time)
    print("best_cost",best,file=doc)
    print("best_ruba",ruba,file=doc)
    doc.close()
Exemplo n.º 2
0
def main(file):
    instance = Suppliers_MRCPSP.Instance()
    f_p = file
    f_CN = "./data/CNfks.xlsx"
    f_O = "./data/Ofs.xlsx"
    qfs = "./data/qfs.xlsx"
    n = 0
    # M=[1, 3, 3, 3, 1, 3, 2, 3, 2, 2, 3, 2, 3, 2, 3, 1]
    # starttime=[0, 12, 2, 4, 35, 27, 42, 44, 55, 54, 67, 43, 64, 78, 53, 91]

    instance.loadData(file_project=f_p,
                      file_CNfks=f_CN,
                      file_Ofs=f_O,
                      file_qfs=qfs)
    supplier = instance.initial_Supplier()

    for i in range(500):
        ind = GA_Suppliers_MRCPSP.GA_RCPSP_ruba(instance, 100, supplier)
        # sup,ind=GA_Suppliers_MRCPSP.GA_RCPSP_cost(instance,1,ind,i)
        sup, ind = GA_Suppliers_MRCPSP.Greedy_cost(instance, ind)
        supplier = sup
    cost = [
        instance.project_cost(instance.best_ind[g], instance.best_sup[g],
                              instance.best_ind[g].R_order_time)
        for g in range(len(instance.best_sup))
    ]
    best_cost = min(cost)
    best_index = cost.index(best_cost)

    print(cost)

    best_S = instance.best_sup[best_index]
    best_I = instance.best_ind[best_index]
    ruba = instance.project_ruba(best_I, best_S)

    finishtime = []
    duration = []
    for i in range(len(best_I.M)):
        finishtime.append(best_I.starttime[i] +
                          instance.job_model_duration[i + 1][best_I.M[i]])
        duration.append(instance.job_model_duration[i + 1][best_I.M[i]])

    doc = open("best.txt", "w")
    print("-------------------最终结果----------------------", file=doc)
    print("supplier", best_S, file=doc)
    print("order", best_I.order, file=doc)
    print("M", best_I.M, file=doc)
    print("starttime", best_I.starttime, file=doc)
    print("finishtime", finishtime, file=doc)
    print("duration", duration, file=doc)
    print("order_time", best_I.R_order_time, file=doc)
    best = instance.project_cost(best_I, best_S, best_I.R_order_time)
    print("best_cost", best, file=doc)
    print("best_ruba", ruba, file=doc)
    doc.close()
def mutate_ruba(ins, pop, pop_Supplier):

    offsprings = []
    for ind in pop:
        if random.random() < ins.mutate_pb:
            move_job1 = random.choice(ind.order[1:14])
            ava_move_job = []
            order_copy = copy.copy(ind.order)
            index_pre = []
            for i in ins.job_predecessors[move_job1 - 1]:
                index_pre.append(order_copy.index(i))
            premove_maxindex = max(index_pre)
            index_aft = []
            for j in ins.job_successors[move_job1 - 1]:
                index_aft.append(order_copy.index(j))
            aftmove_minindex = min(index_aft)
            position = random.randint(premove_maxindex + 1,
                                      aftmove_minindex - 1)
            ind.order.insert(position, move_job1)
            if position < order_copy.index(move_job1):
                del ind.order[order_copy.index(move_job1) + 1]
            else:
                del ind.order[order_copy.index(move_job1)]

            offspring_order = ind.order

            mutate_job = random.randint(1, 15)
            while True:
                a = random.choice([1, 2, 3])
                if a != ind.M[mutate_job]:
                    break
            ind.M[mutate_job] = a
            offspring_M = ind.M

            starttime, finishtime = ins.job_start_time(ind.order, ind.M)

            offspring_order_time = ins.initial_ordertime(
                starttime, offspring_M, pop_Supplier)

            offspring = Suppliers_MRCPSP.Indivadul(offspring_order,
                                                   offspring_M, starttime,
                                                   offspring_order_time)
            offsprings.append(offspring)
        else:
            offsprings.append(ind)

    return offsprings
def mate_ruba(ins, pop, plist, pop_Supplier):
    new_offspring = []
    offspring_p_list = list(zip(pop, plist))
    for i in range(int(ins.popSize / 2)):
        sum1_p = 0
        for ind1, p in offspring_p_list:
            sum1_p += p
            if random.random() < sum1_p: break
        child_order1 = ind1.order
        child_M1 = ind1.M

        sum2_p = 0
        for ind2, p in offspring_p_list:
            sum2_p += p
            if random.random() < sum2_p: break
        child_order2 = ind2.order
        child_M2 = ind2.M

        #order
        if random.random() < ins.mate_pb:
            offspring_order1 = [0 for _ in range(len(child_order1))]
            offspring_order2 = [0 for _ in range(len(child_order2))]
            x = sorted(random.sample(range(len(child_order1)), 2))
            for i in range(x[0]):
                offspring_order1[i] = child_order1[i]
                offspring_order2[i] = child_order2[i]
            for j in range(x[1], len(child_order1)):
                offspring_order1[j] = child_order1[j]
                offspring_order2[j] = child_order2[j]
                pos1 = x[0]
                pos2 = x[0]
            for gene1 in child_order2:
                if gene1 not in offspring_order1:
                    offspring_order1[pos1] = gene1
                    pos1 += 1
            for gene2 in child_order1:
                if gene2 not in offspring_order2:
                    offspring_order2[pos2] = gene2
                    pos2 += 1

        else:
            offspring_order1 = child_order1
            offspring_order2 = child_order2
        #M
        if random.random() < ins.mate_pb:
            offspring_M1 = [0 for _ in range(len(child_order1))]
            offspring_M2 = [0 for _ in range(len(child_order2))]
            x = random.randint(1, 15)
            for i in range(x):
                offspring_M1[i] = child_M1[i]
                offspring_M2[i] = child_M2[i]
            for j in range(x, len(child_M1)):
                offspring_M1[j] = child_M2[j]
                offspring_M2[j] = child_M1[j]

        else:
            offspring_M1 = child_M1
            offspring_M2 = child_M2

        #order time
        start_time1, finish_time1 = ins.job_start_time(offspring_order1,
                                                       offspring_M1)
        start_time2, finish_time2 = ins.job_start_time(offspring_order2,
                                                       offspring_M2)
        offspring_order_time1 = ins.initial_ordertime(start_time1,
                                                      offspring_M1,
                                                      pop_Supplier)
        offspring_order_time2 = ins.initial_ordertime(start_time2,
                                                      offspring_M2,
                                                      pop_Supplier)

        new_ind1 = Suppliers_MRCPSP.Indivadul(offspring_order1, offspring_M1,
                                              start_time1,
                                              offspring_order_time1)
        new_ind2 = Suppliers_MRCPSP.Indivadul(offspring_order2, offspring_M2,
                                              start_time2,
                                              offspring_order_time2)

        new_offspring.append(new_ind1)
        new_offspring.append(new_ind2)
    return new_offspring
Exemplo n.º 5
0
def main(file):
    instance = Suppliers_MRCPSP.Instance()

    file_temp = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))

    f_p = file
    f_CN = file_temp+"\data\CNfks.xlsx"
    f_O =file_temp+ "\data\Ofs.xlsx"
    qfs =file_temp+ "\data\qfs.xlsx"
    n=0
    # M=[1, 3, 3, 3, 1, 3, 2, 3, 2, 2, 3, 2, 3, 2, 3, 1]
    # starttime=[0, 12, 2, 4, 35, 27, 42, 44, 55, 54, 67, 43, 64, 78, 53, 91]

    doc = open("best.txt_%s" % ("J" + str(instance.number_job)), "w")
    instance.loadData(file_project=f_p, file_CNfks=f_CN, file_Ofs=f_O, file_qfs=qfs)
    supplier=instance.initial_Supplier()
    IRM=[]
    IC=[]
    ruba_com=[]
    cost_com=[]
    for z in range(5):
        instance.best_sup=[]
        instance.best_ind=[]
        for i in range(50):
            ind=GA_Suppliers_MRCPSP.GA_RCPSP_ruba(instance,50,supplier)
            # sup,ind=GA_Suppliers_MRCPSP.GA_RCPSP_cost(instance,1,ind,i)
            sup, ind = GA_Suppliers_MRCPSP.Greedy_cost(instance, ind)
            supplier=sup
        cost=[instance.project_cost(instance.best_ind[g],instance.best_sup[g],instance.best_ind[g].R_order_time) for g in range(len(instance.best_sup))]
        best_cost=min(cost)
        best_index=cost.index(best_cost)

        print(cost)


        best_S=instance.best_sup[best_index]
        best_I=instance.best_ind[best_index]
        ruba=instance.project_ruba(best_I,best_S)

        finishtime=[]
        duration=[]
        for i in range(len(best_I.M)):
            finishtime.append(best_I.starttime[i] + instance.job_model_duration[i + 1][best_I.M[i]])
            duration.append(instance.job_model_duration[i + 1][best_I.M[i]])


        doc=open("best.txt_%s"%("J"+str(instance.number_job)),"a")
        print("-------------------最终结果----------------------",file=doc)
        print("supplier",best_S,file=doc)
        print("order",best_I.order,file=doc)
        print("M",best_I.M, file=doc)
        print("starttime",best_I.starttime, file=doc)
        print("finishtime", finishtime, file=doc)
        print("duration", duration, file=doc)
        print("order_time",best_I.R_order_time, file=doc)
        best=instance.project_cost(best_I,best_S,best_I.R_order_time)
        print("best_cost",best,file=doc)
        print("best_ruba",ruba,file=doc)
        doc.close()


        e=copy.copy(ruba)
        t=copy.copy(best)

        IRM.append(e)
        IC.append(t)


        a, b, c, d = instance.job_start_time_2(best_I.order, best_I.M)
        best_I.starttime=a
        ordertime=instance.initial_ordertime(a,best_I.M,best_S)
        ruba_com.append(instance.project_ruba(best_I,best_S))
        cost_com.append(instance.project_cost(best_I,best_S,ordertime))

    print("\n")
    # print(IRM)
    # print(IC)
    # print("\n")
    #
    # print(ruba_com)
    # print(cost_com)



    IRM_rate=[(IRM[i]-ruba_com[i])/ruba_com[i] for i in range(len(IRM))]
    IC_rate = [( cost_com[i]- IC[i]) /  IC[i] for i in range(len(IC))]


    print(IRM_rate)
    print(IC_rate)

    print(max(IRM_rate),min(IRM_rate),sum(IRM_rate)/len(IRM))
    print(max(IC_rate), min(IC_rate), sum(IC_rate) / len(IC))

    doc.close()