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))
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))
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()
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()
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()
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()
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))
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))
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))
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