Open tabitaCatalan opened 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
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).
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.
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:
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.
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.
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.
Para ver si la sospecha de Vera es cierta (sospecho que sí). Haré lo siguiente:
@jit
). Si funciona bien es probable que sea un error de aproximación.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.
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:
Comparar la última parte con la imagen obtenida por d3, ya que se usaron los mismos parámetros
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!