karlycaramelo / HOC

0 stars 0 forks source link

Dividiendo sobre máxima distancia #5

Open canek-pelaez opened 5 years ago

canek-pelaez commented 5 years ago

En [1] (y otros lados) haces:

fmt.Print(FloatToString(efenewbestCities/tspParams.maximaDistancia))

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

karlycaramelo commented 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?

karlycaramelo commented 5 years ago

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

canek-pelaez commented 5 years ago

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