tabitaCatalan / python.ForceBundle

Python implementation of Force-Directed Edge Bundling for Graph Visualization
GNU General Public License v3.0
2 stars 0 forks source link

Caso juguete para hacer tests #5

Open tabitaCatalan opened 3 years ago

tabitaCatalan commented 3 years ago

Definir un caso con unas cuantas aristas. Hacer animaciones, variar parámetros, testear que las funciones estén bien, etc.

Hacer un gif donde se vea qué está haciendo el algoritmo!

tabitaCatalan commented 3 years ago

Conseguí una animación de un caso juguete.

Las aristas usadas fueron

-4.0, -2.0, -2.0, 3.0 
-4.0, -4.0, 1.0, 4.0
-3.0, -3.0, 4.0, 4.0
-1.0, -4.0, 3.0, 2.0
-2.0, 3.0, 0.0, -4.0

https://user-images.githubusercontent.com/35073597/105518483-1cfc4f00-5cb7-11eb-83f9-9f8ab22c58da.mp4

Está raro, hay que estudiar bien qué está haciendo. Especialmente el orden en que se aplican las fuerzas (#8) y la forma en que se subdividen las aristas (#2).

tabitaCatalan commented 3 years ago

Aerolíneas de EEUU

Aplicando fuerzas de manera no simultánea

https://user-images.githubusercontent.com/35073597/105543729-e0414f80-5cd8-11eb-980d-44d8a46d6c2a.mp4

Aplicando fuerzas de manera simultánea

Editado el 26-01-2021 a las 11:37 Esa animación inicial no estaba bien, de hecho, era idéntica a la primera. El problema está un par de respuestas más abajo:

Encontré el problema! Estaba en el orden de aplicación de las fuerzas en mi animación. Ya había comentado en #8 que el orden en que se aplicaban las fuerzas era importante, y eso es especialmente cierto cuando las aristas están tan lejos. Al hacer la animación no estaba usando el código de los ciclos de feb, si no que estaba usando uno de Vera. Pero en ese no había corregido el tema de las fuerzas.

https://user-images.githubusercontent.com/35073597/105860762-b3d54e00-5fcc-11eb-92ae-24a31832b388.mp4

tabitaCatalan commented 3 years ago

Definitivamente hay algo muuuuy raro aquí. Usando estas aristas:

-3.0, -3.0, 4.0, 4.0
-1.0, -4.0, 3.0, 2.0
-3.0, 0.0, -2.0, 1.0
-2.0, -1.0, -1.0, 0.0

se obtiene esta animación:

https://user-images.githubusercontent.com/35073597/105612260-aab06b00-5d99-11eb-8325-db2a5fbbe89b.mp4

Se puede ver cómo los nodos centrales en el primer ciclo se alejan muchísimo de su posición original, dando lugar a una arista excesivamente estirada.

tabitaCatalan commented 3 years ago

Pensé que el problema estaba en que las aristas grandes atraían a las pequeñas, pero al retirarlas se mantiene el comportamiento extraño.

https://user-images.githubusercontent.com/35073597/105612795-fc0e2980-5d9c-11eb-82e3-1ddc7fe5080d.mp4

tabitaCatalan commented 3 years ago

Me imagino que el problema es lo que sospechaba Vera: una acumulación de errores en los puntos flotantes. Tras revisar los resultados de la primera iteración, se ve que, a pesar de la simetría del problema, hay una pequeña diferencia en los resultados. Esta diferencia va creciendo y se van a acumulando errores.

Hice una animación en Julia de cómo debería verse el proceso para dos divisiones (la animación anterior hasta el segundo 8), y se ve que los nodos centrales deberían quedarse oscilando al centro. jl_8A3Z6nzMDA

tabitaCatalan commented 3 years ago

Plan de acción

Para ver si la sospecha de Vera es cierta (sospecho que sí). Haré lo siguiente:

tabitaCatalan commented 3 years ago

Acabo de correrlo eliminando Numba y se mantiene el comportamiento extraño! Al importar la librería no aparece el warning (claramente, no estoy usando Numba), pero aún así obtengo los mismo resultados. Habrá que debuggear las funciones con más cuidado. Es interesante que en general parece funcionar bien, pero cuando los nodos están muy cerca hay un comportamiento extraño. Tendré que revisarlo más a fondo.

tabitaCatalan commented 3 years ago

Encontré el problema! Estaba en el orden de aplicación de las fuerzas en mi animación. Ya había comentado en #8 que el orden en que se aplicaban las fuerzas era importante, y eso es especialmente cierto cuando las aristas están tan lejos. Al hacer la animación no estaba usando el código de los ciclos de feb, si no que estaba usando uno de Vera. Pero en ese no había corregido el tema de las fuerzas. Tras arreglar eso se obtiene:

https://user-images.githubusercontent.com/35073597/105633938-3a0d5b00-5e3a-11eb-83c8-22476e730ea4.mp4

tabitaCatalan commented 3 years ago

Animación Final

https://user-images.githubusercontent.com/35073597/105865167-68716e80-5fd1-11eb-993c-4e6403a9eb2a.mp4

Comparar la última parte con la imagen obtenida por d3, ya que se usaron los mismos parámetros airline_graph_d3