예제 #1
0
def busqueda_local_GRASP(secuencia, TP, num_iteraciones):
    minimo = fo.calcular_makespan_blocking_secuencia(secuencia, TP)
    num_trabajos = len(TP)
    i = 0
    j = 1
    iteraciones = 0
    while (i < num_trabajos - 1 and iteraciones <= num_iteraciones):
        # print("\n============== ITERACIÓN ", iteraciones," ===============")
        s = copy.deepcopy(secuencia)
        aux = s[i]
        s[i] = s[j]
        s[j] = aux
        #print(s, calcular_makespan_blocking_secuencia(s,TP))
        # print(i,j)

        f = fo.calcular_makespan_blocking_secuencia(s, TP)
        # print("Secuencia actual: ", secuencia)
        # print(s, f)
        if (f < minimo):
            minimo = f
            secuencia = s
            i = 0
            j = 1
        else:
            if (j < num_trabajos - 1):
                j = j + 1
            elif (i < num_trabajos - 1):
                i = i + 1
                j = i + 1
            else:
                i = i + 1

        iteraciones += 1
    #elihw
    return (secuencia, fo.calcular_makespan_blocking_secuencia(secuencia, TP))
예제 #2
0
def busqueda_local_GRASP( secuencia, TP, num_iteraciones ):
    minimo = fo.calcular_makespan_blocking_secuencia(secuencia, TP)
    for iteraciones in range(num_iteraciones):
        s = copy.deepcopy(secuencia)
        
        ## Realizar cambios 
        n = 4
        for _ in range(n):
            x = random.randint(0,len(s)-1)
            y = random.randint(0,len(s)-1)
            while( y == x ):
                y = random.randint(0,len(s)-1)
            #elihw
            aux = s[x]
            s[x] = s[y]
            s[y] = aux
        
        #print(s, calcular_makespan_blocking_secuencia(s,TP)) 
        
        f = fo.calcular_makespan_blocking_secuencia(s,TP)
        if( f < minimo ):
            minimo = f
            secuencia = s
            # print(s)
        
    
    return(secuencia, fo.calcular_makespan_blocking_secuencia(secuencia,TP))
예제 #3
0
def principal(argv):
    INSTANCIAS = read_data_XLSX()
    num_alphas = 5
    ALPHAS = [round(i * (1 / num_alphas), 3) for i in range(num_alphas + 1)]
    print(ALPHAS)

    for a in ALPHAS:
        workbook = xlsxwriter.Workbook('Results_Makespan ALPHA(' + str(a) +
                                       ').xlsx')
        ti = time.time()
        for inst in INSTANCIAS:

            ## Parámetros de la instancia
            tp = inst.tiempos_procesamiento
            dd = inst.due_dates
            num_trabajos = len(tp)
            num_maquinas = len(tp[0])

            ## Obtener secuencia de Grasp_Makespan
            ALPHA = a
            t_max = 0.01 * num_trabajos * num_maquinas
            repeticiones = 1
            minimo = 10000000000000
            print("AlPHA: ", a, "; Inst:", INSTANCIAS.index(inst))
            for _ in range(repeticiones):
                t1 = time.time()
                s, s_bl = GRASP_Makespan(tp, ALPHA, t_max)
                f = fo.calcular_makespan_blocking_secuencia(s_bl, tp)
                print(f)
                if (f < minimo):
                    minimo = f
                    secuencia = s
                    secuencia_bl = s_bl
                    tiempo_funcion = time.time() - t1

            print("----------------------------")

            ## Indicadores
            makespan = fo.calcular_makespan_blocking_secuencia(secuencia, tp)
            tardanza = fo.calcular_tardanza_blocking_secuencia(
                secuencia, tp, dd)
            makespan_bl, mat_t = fo.mat_calcular_makespan_blocking_secuencia(
                secuencia_bl, tp)
            tardanza_bl, dd_sec = fo.dd_calcular_tardanza_blocking_secuencia(
                secuencia_bl, tp, dd)

            ## Imprimir archivo
            nombre_hoja = "Inst" + str(INSTANCIAS.index(inst) + 1)
            imprimir_XLSX(workbook, nombre_hoja, secuencia, secuencia_bl,
                          makespan, tardanza, makespan_bl, tardanza_bl,
                          tiempo_funcion, mat_t, dd_sec)

        tt = time.time() - ti
        worksheet = workbook.add_worksheet("TIEMPO TOTAL")
        worksheet.merge_range(1, 1, 1, 3, "Tiempo total de ejecución")
        worksheet.merge_range(1, 4, 1, 5, round(tt, 2))
        workbook.close()
예제 #4
0
def principal(argv):
    INSTANCIAS = read_data_XLSX()
    for inst in INSTANCIAS:
        ## Crear Archivo de impresión
        workbook = xlsxwriter.Workbook('Results_Makespan_MO Inst(' +
                                       str(INSTANCIAS.index(inst) + 1) +
                                       ').xlsx')

        print("========== Inst", INSTANCIAS.index(inst), " =========")
        ## Parámetros de la instancia
        tp = inst.tiempos_procesamiento
        dd = inst.due_dates

        ## Obtener número de trabajos y número de máquinas
        num_trabajos = len(tp)
        num_maquinas = len(tp[0])

        ## Obtener secuencia de Grasp_Makespan
        ALPHA = -1
        t_max = 1.5 * num_trabajos * num_maquinas
        ALPHA_tard = 0.2
        t_max_tard = 0.01 * num_trabajos * num_maquinas

        repeticiones = 3
        for rep in range(repeticiones):
            print("--- Rep: ", rep, " ---")
            t1 = time.time()  ##No se está usando
            secuencia, secuencia_bl, min_tard = GRASP_Makespan_MO(
                tp, dd, ALPHA, t_max, ALPHA_tard, t_max_tard)
            tiempo_funcion = time.time() - t1

            ## Indicadores
            makespan = fo.calcular_makespan_blocking_secuencia(secuencia, tp)
            tardanza = fo.calcular_tardanza_blocking_secuencia(
                secuencia, tp, dd)
            makespan_bl = fo.calcular_makespan_blocking_secuencia(
                secuencia_bl, tp)
            tardanza_bl = fo.calcular_tardanza_blocking_secuencia(
                secuencia_bl, tp, dd)

            ## Imprimir archivo
            nombre_hoja = "Inst" + str(INSTANCIAS.index(inst) +
                                       1) + "(REP" + str(rep + 1) + ")"
            imprimir_XLSX(workbook, nombre_hoja, secuencia, secuencia_bl,
                          makespan, tardanza, makespan_bl, tardanza_bl,
                          tiempo_funcion, min_tard)

        workbook.close()
예제 #5
0
def principal(argv):
    INSTANCIAS = read_data_XLSX()
    for inst in INSTANCIAS:

        workbook = xlsxwriter.Workbook('Results_Makespan_ML Inst(' +
                                       str(INSTANCIAS.index(inst) + 1) +
                                       ').xlsx')

        print("============ Inst: ", INSTANCIAS.index(inst), " ============")
        ## Parámetros de la instancia
        tp = inst.tiempos_procesamiento
        dd = inst.due_dates

        ## Obtener secuencia de Modelo Lineal
        tiempo_limite = 500
        secuencia, makespan, tardanza = modelo_makespan(tp, dd, tiempo_limite)
        print("Secuencia: ", secuencia, "; Makespan: ", makespan,
              "; Tardanza: ", tardanza)
        print(fo.calcular_makespan_blocking_secuencia(secuencia, tp),
              fo.calcular_tardanza_blocking_secuencia(secuencia, tp, dd))

        ## Imprimir archivo
        nombre_hoja = "Inst" + str(INSTANCIAS.index(inst) + 1)
        imprimir_XLSX(workbook, nombre_hoja, secuencia, tardanza, makespan)

        workbook.close()
예제 #6
0
def principal(argv):
    INSTANCIAS = read_data_XLSX()

    for inst in INSTANCIAS:
        ## Crear Archuvo de impresión
        workbook = xlsxwriter.Workbook('Results_Makespan Inst(' +
                                       str(INSTANCIAS.index(inst) + 1) +
                                       ').xlsx')

        ## Parámetros de la instancia
        tp = inst.tiempos_procesamiento
        dd = inst.due_dates
        num_trabajos = len(tp)
        num_maquinas = len(tp[0])

        ## Obtener secuencia de Grasp_Makespan
        ALPHA = 0.5
        t_max = 0.01 * num_trabajos * num_maquinas
        repeticiones = 3
        print("Inst:", INSTANCIAS.index(inst))
        for rep in range(repeticiones):
            t1 = time.time()
            secuencia, secuencia_bl = GRASP_Makespan(tp, ALPHA, t_max)
            tiempo_funcion = time.time() - t1

            ## Indicadores
            makespan = fo.calcular_makespan_blocking_secuencia(secuencia, tp)
            tardanza = fo.calcular_tardanza_blocking_secuencia(
                secuencia, tp, dd)
            makespan_bl = fo.calcular_makespan_blocking_secuencia(
                secuencia_bl, tp)
            tardanza_bl = fo.calcular_tardanza_blocking_secuencia(
                secuencia_bl, tp, dd)

            ## Imprimir archivo
            nombre_hoja = "Inst" + str(INSTANCIAS.index(inst) +
                                       1) + "(REP" + str(rep + 1) + ")"
            imprimir_XLSX(workbook, nombre_hoja, secuencia, secuencia_bl,
                          makespan, tardanza, makespan_bl, tardanza_bl,
                          tiempo_funcion)

        workbook.close()
예제 #7
0
def busqueda_local_GRASP(secuencia, TP, dd, t_max, min_tard):
    minimo = fo.calcular_makespan_blocking_secuencia(secuencia, TP)
    num_trabajos = len(TP)
    i = 0
    j = 1
    iteraciones = 0
    t_inicial = time.time()
    t_final = time.time() - t_inicial
    while (i < num_trabajos - 1 and t_final <= t_max):

        s = copy.deepcopy(secuencia)
        aux = s[i]
        s[i] = s[j]
        s[j] = aux
        # print("\n============== ITERACIÓN ", iteraciones," ===============")
        # print("Secuencia actual: ", secuencia)
        # print(s, fo.calcular_makespan_blocking_secuencia(s,TP))
        # print(i,j)

        cmax = fo.calcular_makespan_blocking_secuencia(s, TP)
        tard = fo.calcular_tardanza_blocking_secuencia(s, TP, dd)
        if (cmax < minimo and tard <= min_tard):
            minimo = cmax
            secuencia = s
            i = 0
            j = 1
        else:
            if (j < num_trabajos - 1):
                j = j + 1
            elif (i < num_trabajos - 1):
                i = i + 1
                j = i + 1
            else:
                i = i + 1

        iteraciones += 1
        t_final = time.time() - t_inicial
    #elihw
    return (secuencia, fo.calcular_makespan_blocking_secuencia(secuencia, TP))
예제 #8
0
def busqueda_local_GRASP(secuencia, TP, num_iteraciones):
    minimo = 100000000000
    for iteraciones in range(num_iteraciones):
        for i in range(len(secuencia)):
            for j in range(i + 1, len(secuencia)):
                ## Paso 1
                s = copy.deepcopy(secuencia)
                aux = s[i]
                s[i] = s[j]
                s[j] = aux
                #print(s, calcular_makespan_blocking_secuencia(s,TP))

                ## Paso 2
                f = fo.calcular_makespan_blocking_secuencia(s, TP)
                if (f < minimo):
                    minimo = f
                    secuencia_aux = s

        ## Paso 3
        secuencia = copy.deepcopy(secuencia_aux)
        #print(minimo, secuencia_aux)

    return (secuencia, fo.calcular_makespan_blocking_secuencia(secuencia, TP))
예제 #9
0
def busqueda_local_GRASP(secuencia, TP, t_max):
    minimo = fo.calcular_makespan_blocking_secuencia(secuencia, TP)
    num_trabajos = len(TP)
    i = 0
    j = 1
    iteraciones = 0
    t_inicial = time.time()
    t_final = time.time() - t_inicial
    while (i < num_trabajos - 1 and t_final <= t_max):
        print("\n============== ITERACIÓN ", iteraciones, " ===============")
        s = copy.deepcopy(secuencia)
        aux = s[i]
        s[i] = s[j]
        s[j] = aux
        print(i, j)

        f = fo.calcular_makespan_blocking_secuencia(s, TP)
        print("Secuencia actual: ", secuencia)
        print(s, f)
        if (f < minimo):
            minimo = f
            secuencia = s
            i = 0
            j = 1
        else:
            if (j < num_trabajos - 1):
                j = j + 1
            elif (i < num_trabajos - 1):
                i = i + 1
                j = i + 1
            else:
                i = i + 1

        iteraciones += 1
        t_final = time.time() - t_inicial
    #elihw
    return (secuencia, fo.calcular_makespan_blocking_secuencia(secuencia, TP))
예제 #10
0
def GRASP_Makespan_MO(tp, dd, ALPHA, t_max, ALPHA_tard, t_max_tard):

    # ## Etapa de construcción de solución
    # secuencia, makespan = construccion_GRASP(tp, ALPHA)
    # print("Secuencia construcción GRASP: ", secuencia, "; Makespan: ", makespan, "; Tardanza: ", fo.calcular_tardanza_blocking_secuencia(secuencia, tp, dd))

    ## Tardanza mínima
    secuencia, min_tard = GRASP_Tardiness(tp, dd, ALPHA_tard, t_max_tard)
    print("Secuencia construcción GRASP: ", secuencia, "; Makespan: ",
          fo.calcular_makespan_blocking_secuencia(secuencia, tp),
          "; Tardanza: ", min_tard)

    ## Etapa de busqueda local
    secuencia_bl, makespan_bl = busqueda_local_GRASP(secuencia, tp, dd, t_max,
                                                     min_tard)
    print("Secuencia busqueda local GRASP: ", secuencia_bl, "; Makespan: ",
          makespan_bl, "; Tardanza: ",
          fo.calcular_tardanza_blocking_secuencia(secuencia_bl, tp, dd))

    return (secuencia, secuencia_bl, min_tard)


#fed