karlycaramelo / HOC

0 stars 0 forks source link

Función de costo #7

Closed canek-pelaez closed 5 years ago

canek-pelaez commented 5 years ago

OK, noté que no estabas revolviendo la solución inicial (generar una permutación aleatoria, para que con cada semilla comiences en un punto distinto del espacio de búsqueda, y al hacerlo me di cuenta de que hay problemas con la función de costo. En la línea [1] agregué lo siguiente:

for i := 0; i < len(cities); i++ {
    for j := i+1; j < len(cities); j++ {
        fmt.Printf("%d:%d:%2.2f\n", cities[i].Id, cities[j].Id, citiesDistance[i][j])
    }
}

Y se imprime lo siguiente:

1:2:0.00
1:3:0.00
1:28:0.00
1:74:0.00
1:163:0.00
...

No todas son cero, pero casi todas. En mi implementación se imprime:

1:2:8783427760215.76
1:3:33305521667253.96
1:28:85144014371551.70
1:74:68800465678558.59
1:163:3222670.07
...

El problema obviamente está en pesoAumentado()[2], y la verdad no lo encuentro. Tienes que reparar esa función, de otra forma nada más va a funcionar. Checa qué es lo que pasa que no se llena bien tu arreglo citiesDistance.

[1] https://github.com/karlycaramelo/HOC/blob/master/go/tsp.go#L604 [2] https://github.com/karlycaramelo/HOC/blob/master/go/tsp.go#L230

karlycaramelo commented 5 years ago

El código correcto para recorrer e imprimir las distancias calculadas en el map es el siguiente:

for i := 0; i < len(cities); i++ {
    for j := i+1; j < len(cities); j++ {
        fmt.Printf("%d:%d:%2.2f\n", cities[i].Id, cities[j].Id, citiesDistance[cities[i].Id][cities[j].Id])
    }
}

En lugar de poner citiesDistance[i][j] se pone citiesDistance[cities[i].Id][cities[j].Id]

Ya con eso las primeras líneas son iguales a las que tu muestras que se imprime en tu implementación

Por lo que creo que el error no está pesoAumento y creo si se está creando correctamente el map citiesDistance

También cree la función aleatorizaSolucion para aleatorizar la solucion entrada como comentas