i += Pobl.proximaGeneracion() if n % 10 == 0: i += Pobl.aplicaBL(maxEval=50000 - i, prob=0.1, mejores=False, nSteps=400) print(str(int(i / 500.0)) + "% en la generacion " + str(n)) print("Mejor coste hasta ahora: " + str(Pobl.mejor.coste())) tiempo_final = time() first_sol = Pobl.mejor with open(printFile, 'w') as f: f.write(str(first_sol) + "\n") f.write("TiempoGenetico2OPXM2:\t" + str(tiempo_final - tiempo_inicial) + "\n") f.write("CosteGenetico2OPXM2:\t" + str( coste(matDist=matrizDistancias, matFlujo=matrizFlujos, perm=first_sol.P)) + "\n") # Mejor Solucion mejorPerm, newCost = readSolution(solveName) mejorSol = Permutacion(P=mejorPerm, F=matrizFlujos, D=matrizDistancias) f.write(str(mejorSol) + "\n") f.write("Mejor:\t" + str(newCost) + "\n")
matrizDistancias = numpy.array(matrizDistancias) n = int(n) matrizFlujos = [[int(matrizFlujos[i][j]) for j in range(len(matrizFlujos[i]))] for i in range(len(matrizFlujos))] matrizDistancias = [[ int(matrizDistancias[i][j]) for j in range(len(matrizDistancias[i])) ] for i in range(len(matrizFlujos))] # Lectura del problema hecho. tiempo_inicial = time() # Algoritmo. soluciones = [] for i in range(25): soluciones.append(Permutacion.randPerm(D=matrizDistancias, F=matrizFlujos)) mejorSol = None for sol in soluciones: sol, j = sol.busquedaLocal(50000 // 25) if mejorSol == None: mejorSol = sol if mejorSol.coste() > sol.coste(): mejorSol = sol tiempo_final = time() # Se guarda es MejorES a la mejor solución por enfriamiento simulado. first_sol = mejorSol with open(printFile, 'w') as f:
matrizFlujos = numpy.array(matrizFlujos) matrizDistancias = numpy.array(matrizDistancias) n = int(n) matrizFlujos = [[int(matrizFlujos[i][j]) for j in range(len(matrizFlujos[i]))] for i in range(len(matrizFlujos))] matrizDistancias = [[ int(matrizDistancias[i][j]) for j in range(len(matrizDistancias[i])) ] for i in range(len(matrizFlujos))] # Lectura del problema hecho. tiempo_inicial = time() # Algoritmo. mejorSol = Permutacion.randPerm(D=matrizDistancias, F=matrizFlujos) mejorSol = mejorSol.ES(nBusquedas=50000) tiempo_final = time() # Se guarda es MejorES a la mejor solución por enfriamiento simulado. first_sol = mejorSol with open(printFile, 'w') as f: f.write(str(first_sol) + "\n") f.write("TiempoES:\t" + str(tiempo_final - tiempo_inicial) + "\n") f.write("CosteES:\t" + str( coste(matDist=matrizDistancias, matFlujo=matrizFlujos, perm=first_sol.P)) + "\n")
candidats = candidatos(D=matrizDistancias, F=matrizFlujos, S=solucion) maximo = max([candidats[i][1] for i in range(len(candidats))]) minimo = min([candidats[i][1] for i in range(len(candidats))]) umbral = minimo + 0.3 * (maximo - minimo) i = 0 mejores = [] while i < len(candidats): if candidats[i][1] >= umbral: mejores.append(candidats[i]) i += 1 candidats = mejores candidats = sample(candidats, 1) solucion[candidats[0][0][0]] = candidats[0][0][1] if mejorSol == None: mejorSol, l = Permutacion(solucion, matrizDistancias, matrizFlujos).busquedaLocal(50000 // 25) mejorCoste = mejorSol.coste() else: unaSol, l = Permutacion(solucion, matrizDistancias, matrizFlujos).busquedaLocal(50000 // 25) if unaSol.coste() < mejorCoste: mejorSol = unaSol mejorCoste = mejorSol.coste() tiempo_final = time() first_sol = mejorSol # Se guarda es MejorES a la mejor solución por enfriamiento simulado. with open(printFile, 'w') as f: f.write(str(first_sol) + "\n")
# Lectura del problema hecho. greedySolution = [-1 for i in range(n)] # Iniciamos el conteo de tiempo. tiempo_inicial = time() ordenFlujos = ordenSuma(matrizFlujos)[::-1] ordenDistancias = ordenSuma(matrizDistancias) for i in range(n): greedySolution[ordenFlujos[i][0]] = ordenDistancias[i][0] tiempo_greedy = time() # print(greedySolution) greedySol = Permutacion(P=greedySolution, F=matrizFlujos, D=matrizDistancias) with open(printFile, 'w') as f: f.write(str(greedySol) + "\n") f.write("TiempoGreedy:\t" + str(tiempo_greedy - tiempo_inicial)) f.write("\nCosteGreedy:\t" + str( coste(matDist=matrizDistancias, matFlujo=matrizFlujos, perm=greedySol.P)) + "\n") # Ahora comienza la búsqueda local. tiempo_inicio_BL = time() #BLSol,j = Permutacion.randPerm(F=matrizFlujos,D=matrizDistancias).busquedaLocal(MaxIter=50000) BLSol, j = Permutacion.randPerm(F=matrizFlujos, D=matrizDistancias).busquedaLocal() tiempo_final_BL = time()