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_Tardiness 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 = 1 * num_trabajos * num_maquinas repeticiones = 10 minimo = 10000000000000 print("AlPHA: ", a, "; Inst:", INSTANCIAS.index(inst)) for _ in range(repeticiones): t1 = time.time() s, s_bl = GRASP_Tardiness(tp, dd, ALPHA, t_max) f = fo.calcular_tardanza_blocking_secuencia(s_bl, tp, dd) 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 = 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) imprimir_XLSX(workbook, nombre_hoja, secuencia, secuencia_bl, makespan, tardanza, makespan_bl, tardanza_bl, tiempo_funcion) 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() workbook.close()
def principal(argv): INSTANCIAS = read_data_XLSX() for inst in INSTANCIAS: workbook = xlsxwriter.Workbook('Results_Tardiness_MO Inst(' + str(INSTANCIAS.index(inst) + 1) + ').xlsx') print("\n============== Inst: ", INSTANCIAS.index(inst), " ===============") ## Parámetros de la instancia tp = inst.tiempos_procesamiento dd = inst.due_dates num_trabajos = len( tp) ## Obtener número de trabajos y número de máquinas num_maquinas = len(tp[0]) ## Obtener secuencia de Grasp_Makespan ALPHA = 0.4 ## No se está usando t_max = 1.5 * num_trabajos * num_maquinas ALPHA_make = 0.2 t_max_make = 0.01 * num_trabajos * num_maquinas repeticiones = 3 for rep in range(repeticiones): print("--- Rep: ", rep, " ---") t1 = time.time() secuencia, secuencia_bl, min_makespan = GRASP_Tardanza_MO( tp, dd, ALPHA, t_max, ALPHA_make, t_max_make) 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_makespan) workbook.close()
def principal(argv): INSTANCIAS = read_data_XLSX() for inst in INSTANCIAS: ## Crear Archuvo de impresión workbook = xlsxwriter.Workbook('Results_Tardiness 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 = 10 print("Inst:", INSTANCIAS.index(inst)) for rep in range(repeticiones): t1 = time.time() secuencia, secuencia_bl = GRASP_Tardiness(tp, dd, 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 GRASP(argv): ## TP[t][m]: tiempo de procesamiento del trabajo t en la máquina m. TP1 = [ [45, 13, 26, 24], [25, 76, 14, 73], [56, 76, 20, 24], [39, 51, 7, 6], [61, 23, 43, 85], ] TP2 = [ [3, 3, 2], [2, 1, 3], [4, 1, 3], ] TP3 = [[1, 13, 6, 2], [10, 12, 18, 18], [17, 9, 13, 4], [12, 17, 2, 6], [11, 3, 5, 16]] due_date3 = [20, 75, 45, 34, 41] ## Etapa de construcción de solución ALPHA = 0.6 secuencia, tardanza = construccion_GRASP(TP3, due_date3, ALPHA) print("Secuencia construcción GRASP: ", secuencia, "; Tardanza: ", tardanza, "; Makespan: ", fo.calcular_makespan_blocking_secuencia(secuencia, TP3)) ## Tardanza mínima ALPHA_tard = 0.5 num_iteraciones_tard = 1 min_makespan = GRASP_Makespan(TP3, ALPHA_tard, num_iteraciones_tard) print("Makespan mínimo: ", min_makespan) ## Etapa de busqueda local num_iteraciones = 30 secuencia_bl, makespan_bl = busqueda_local_GRASP(secuencia, TP3, due_date3, num_iteraciones, min_makespan) print("Secuencia busqueda local GRASP: ", secuencia_bl, "; Tardanza: ", makespan_bl, "; Makespan: ", fo.calcular_makespan_blocking_secuencia(secuencia_bl, TP3))
def GRASP(argv): ## TP[t][m]: tiempo de procesamiento del trabajo t en la máquina m. TP1 = [ [45, 13, 26, 24], [25, 76, 14, 73], [56, 76, 20, 24], [39, 51, 7, 6], [61, 23, 43, 85], ] TP2 = [ [3, 3, 2], [2, 1, 3], [4, 1, 3], ] TP3 = [[1, 13, 6, 2], [10, 12, 18, 18], [17, 9, 13, 4], [12, 17, 2, 6], [11, 3, 5, 16]] due_date3 = [20, 75, 45, 34, 41] ## Etapa de construcción de solución ALPHA = 0.6 secuencia, tardanza = construccion_GRASP(TP3, due_date3, ALPHA) print("Secuencia construcción GRASP: ", secuencia, "; Tardanza: ", tardanza, "; Makespan: ", fo.calcular_makespan_blocking_secuencia(secuencia, TP3)) ## Etapa de busqueda local num_trabajos = len(TP3) num_maquinas = len(TP3[0]) t_max = 1 * num_trabajos * num_maquinas secuencia_bl, tardanza_bl = busqueda_local_GRASP(secuencia, TP3, due_date3, t_max) print("Secuencia busqueda local GRASP: ", secuencia_bl, "; Tardanza: ", tardanza_bl, "; Makespan: ", fo.calcular_makespan_blocking_secuencia(secuencia_bl, TP3))
def imprimir_XLSX(workbook, nombre_hoja, secuencia, secuencia_bl, makespan, make_mat_i, make_mat_f, tardanza, due_date_sec, tp, dd): worksheet = workbook.add_worksheet(nombre_hoja) worksheet.set_column(1, 1, 9.5) cell_format_bold = workbook.add_format({ 'bold': 1, 'align': 'center', 'valign': 'vcenter' }) cell_format = workbook.add_format({'align': 'center'}) worksheet.merge_range("B2:D2", "FASE DE CONSTRUCCIÓN", cell_format_bold) worksheet.write("B3", "Secuencia", cell_format_bold) row = 2 col = 2 for s in secuencia: worksheet.write(row, col, s, cell_format) col += 1 worksheet.write("B4", "Tardanza", cell_format_bold) worksheet.write( "C4", fo_aux.calcular_tardanza_blocking_secuencia(secuencia, tp, dd), cell_format) worksheet.write("B5", "Makespan", cell_format_bold) worksheet.write("C5", fo_aux.calcular_makespan_blocking_secuencia(secuencia, tp), cell_format) worksheet.merge_range("B7:D7", "FASE DE BUSQUEDA LOCAL", cell_format_bold) worksheet.write("B8", "Secuencia", cell_format_bold) row = 7 col = 2 for s in secuencia_bl: worksheet.write(row, col, s, cell_format) col += 1 worksheet.write("B9", "Tardanza", cell_format_bold) worksheet.write("C9", tardanza, cell_format) worksheet.write("B10", "Makespan", cell_format_bold) worksheet.write("C10", makespan, cell_format) row = 11 col = 1 worksheet.merge_range(row, col, row, col + 4, "Matriz Tiempos Inicio", cell_format_bold) worksheet.merge_range(row, col + len(make_mat_i[0]) + 1, row, col + len(make_mat_i[0]) + 5, "Matriz Tiempos Finales", cell_format_bold) worksheet.merge_range(row, col + 2 * len(make_mat_i[0]) + 2, row, col + 2 * len(make_mat_i[0]) + 3, "Due Dates(SEC)", cell_format_bold) row += 1 for i in range(len(make_mat_i)): col = 1 col2 = 2 + len(make_mat_i[i]) for j in range(len(make_mat_i[i])): worksheet.write(row, col, make_mat_i[i][j], cell_format) col += 1 worksheet.write(row, col2, make_mat_f[i][j], cell_format) col2 += 1 worksheet.merge_range(row, col2 + 1, row, col2 + 2, due_date_sec[i], cell_format) row += 1