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")
Пример #2
0
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:
Пример #3
0
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")
Пример #4
0
        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")
Пример #5
0
# 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()