Open canek-pelaez opened 5 years ago
Creo que estoy calculando incorrectamente si es una solución es factible o no yo pensaba que para saber si una solución era factible se calculaba el costo de la solución y se dividía entre la máxima distancia, pero por lo que me pones aqui no es así la pregunta es como que se calcula la factibilidad de una solución?
Esta es la diferencia de la factibilidad que me da cuando le quito la división entre la máxima distancia
Con Division T value inicial: 786432 1,329,979,493,654,816,981,165,490,653,815,2,163,817,978,3,164,327,489,491,492,980,74,166,330,655,1037,169,328,495,167,326,494,814,818,819,28,658,666,1073 MejorSolucionFactibilidad: 0.040771
Sin Division T value inicial: 786432 1,329,979,493,654,816,981,165,490,653,815,2,163,817,978,3,164,327,489,491,492,980,74,166,330,655,1037,169,328,495,167,326,494,814,818,819,28,658,666,1073 MejorSolucionFactibilidad: 201410.474454
El problema es más sencillo [1]:
var sqlQueryDistance = "SELECT distance FROM connections WHERE id_city_1="+ strconv.Itoa(cid1.Id) +" AND id_city_2="+ strconv.Itoa(cid2.Id)
Si cid1.Id > cid2.Id, eso regresa vacío aunque sí haya conexión. Sólo asegúrate que cid1.Id < cid2.Id (invierte las variables de ser necesario). A mí me sale el óptimo a la primera.
[1] https://github.com/karlycaramelo/HOC/blob/master/go/tsp.go#L107
En [1] (y otros lados) haces:
Eso está mal (o en el mejor de los casos es engañoso); no debes dividir entre maximaDistancia, el resultado debe salir entre 0 y 1 si es factible sin necesidad de dividir la evaluación.
[1] https://github.com/karlycaramelo/HOC/blob/master/go/tsp.go#L426