Herramienta o biblioteca para generación de gráficos con exportación

Estoy por comenzar un proyecto académico y necesito crear redes sintéticas , es decir grafos con propiedades especiales.

Los tipos de gráficos ( topologías de red ) que necesito generar son:

  • Erdos-Renyi
  • Barabasi-Albert
  • Regular al azar
  • Watts-Strogatz (opcional)

Puedo tomar 2 de los gráficos generados con los modelos anteriores y vincularlos, por ejemplo, conectando un gráfico Erdos-Renyi con un gráfico aleatorio regular.

Necesito una herramienta o una biblioteca capaz de generar y exportar gráficos. Los formatos de exportación aceptables son: archivos CSV, JSON, XML y gml. Cuanto más simple sea el formato de exportación, mejor.

Los arcos del gráfico pueden ser dirigidos o no, ponderados o no, y los nodos deben poder contener información básica (por ejemplo, un parámetro de "consumo"). Esto último puede hacerse a través de la herencia y no es crucial.

No necesito visualizar los gráficos generados en este momento, podría usar otra herramienta para eso. Sería bueno tenerlo, pero lo que más me importa es la calidad de la red generada.

Mi preferencia son las herramientas con una buena documentación y tutoriales de calidad .

Conozco Java y C++ , con preferencia por el primero. También podría usar Python (si esa es la mejor opción), pero no estoy muy familiarizado con él.

Algunas de las bibliotecas que estoy considerando son:

JGraphT es una biblioteca de Java famosa, tiene un JavaDoc completo , pero sus tutoriales son bastante deficientes y no parece ser capaz de generar todas las topologías de red que necesito.

Boost Graph Library es una famosa biblioteca de C++, tiene una documentación completa , pero no puedo encontrar ningún tutorial y no estoy seguro de que tenga todos los generadores que necesito.

Neo4j es un conjunto de algoritmos de Java, tiene un JavaDoc completo pero no tiene tutoriales y parece perder el generador regular aleatorio .

NetworkX es una biblioteca de Python que parece tener la mejor documentación y tutoriales, parece tener todos los generadores que necesito, pero me obligaría a usar Python. ¿Es realmente tan bueno?

Su consejo es bienvenido.

Respuestas (1)

Sugeriría seriamente tomarse un par de días para comenzar a aprender Python: él y sus bibliotecas son increíbles tanto en simplicidad de uso como en potencia. Una de las grandes ventajas de trabajar en python es que funciona en casi todas partes e incluso puede tener una instalación de memoria USB que funcionará sin instalación en la mayoría de las máquinas con Windows: mantenga una copia de seguridad de su trabajo y herramientas en esto y puede hacer una demostración / hacer cambia en cualquier lugar.

NetworkX es muy bueno, pero también sugeriría echar un vistazo a plotly/matplotlib/scipy para obtener algunas herramientas adicionales.

Para responder a la última parte, Python realmente es así de bueno: solo hay un par de cosas realmente importantes para recordar <space>*nque no son iguales <tab>y si su código no está bien diseñado, no se ejecutará como espera o no se ejecutará en absoluto.

Le daré una oportunidad. Desafortunadamente, no tengo tiempo para aprender Python correctamente. Los tutoriales de la biblioteca hacen que parezca tan simple como escribir una línea de comando. Tal vez pueda manejarlo.