Pregunta

Estoy escribiendo un programa Java para deportes de liga que pasa por el conjunto actual de juegos jugados de cada equipo y sus horarios de los próximos juegos, y luego, en base a eso, hago un modelo de red de flujo. La idea del programa es encontrar qué equipos ya están eliminados y no tienen posibilidades de ganar o compartir 1 lugar con ningún otro equipo. Después de analizar la red (aplicando algo EdmondsKarp.) Descubro si el equipo se elimina o no. Ahora también quiero simular esto. Estoy usando JGraphT como biblioteca de gráficos, y probablemente usaré JGraph para la visualización (razón: una vez que creo objetos JGraphT, simplemente puedo crear instancias de objetos JGraph con ellos y mostrar el gráfico). También me enteré de Jung Framework ayer, parece agradable.

El problema principal es que nunca escribí simulación y es el punto donde necesito "Hola Mundo" ayuda. Cuando digo simulación, quiero decir que quiero mostrar visualmente cada parte de la ejecución del algoritmo, y este es un escenario de ejemplo: el algoritmo tiene que encontrar rutas de aumento, por lo que quiero mostrar cuándo se agrega cada nueva arista a la ruta de aumento. El usuario podrá reproducir y detener la animación. También quiero mostrar cambios en el flujo en todos los bordes y cosas así. Hasta ahora, tengo un algoritmo funcionando pero no sé cómo abordar la simulación. ¿Debo usar un hilo separado para la ejecución de la simulación? ¿Debo escribir una clase separada que se ejecute como algoritmo pero con grabación de estados sin siquiera saber el algoritmo real (porque no quiero interrumpir el rendimiento del algoritmo real)? ¿Debo usar el algoritmo actual y agregar algunas líneas intermedias para guardar estados de ejecución en algunas estructuras de datos que podría usar más tarde para mostrar la simulación al usuario? Cualquier idea podría ayudar ...

¿Fue útil?

Solución

Si te entiendo correctamente, estás pidiendo una forma de animar tu algoritmo y controlar su ejecución de forma interactiva desde la animación, que no es lo mismo que la simulación (una simulación solo ejecuta un modelo, generalmente durante un intervalo de tiempo determinado, que no tiene nada que ver con la interacción o la animación del usuario, pero, por supuesto, también podría combinarse con ambos).

Te sugiero que dividas el problema en las dos partes principales, interacción y animación. Ambos se pueden resolver aplicando un model-view-controller :

  • Para interactuar con su algoritmo, identifique los 'pasos atómicos' que desea distinguir, p. La adición de un borde a un camino. Luego, extiende su algoritmo para trabajar también paso a paso o escribe una clase adicional que envuelve el algoritmo y proporciona las rutinas necesarias para una ejecución por pasos.

  • Para animar el estado actual en que se encuentra su algoritmo, debe usar el patrón de observador , donde su componente de animación es el observador y es notificado por el algoritmo cada vez que cambia su estado, por ejemplo se agregó un borde a un camino. También puede describir el cambio de estado real pasando una sugerencia (como el objeto de borde que se ha agregado a la ruta); esto podría facilitar la visualización de la diferencia entre el estado antiguo y el nuevo.

Con respecto a las preguntas de subprocesamiento: el algoritmo probablemente debería ejecutarse en un subproceso adicional (a menos que sea muy rápido), y también podría poner la animación en un subproceso adicional (probablemente JGraph ya lo haya proporcionado, de todos modos, simplemente verifique los documentos o use sus componentes como se recomienda). Sin embargo, debe tener en cuenta que el rendimiento en tiempo de ejecución de su algoritmo casi seguramente se ve afectado por la aninmación, incluso si está ejecutándose en otro subproceso (ya que el algoritmo aún debe realizar la notificación), así que tenga cuidado con análisis de rendimiento y use una versión no animada para tales estudios.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top