I'm about to start an academic project and I need to create syntetic networks, that is graphs with special properties.
The kinds of graphs (network topologies) I need to generate are:
- Erdos-Renyi
- Barabasi-Albert
- Random regular
- Watts-Strogatz (optional)
I may take 2 of the graphs generated using the above models and link them together, for example connecting an Erdos-Renyi graph with a Random regular graph.
I need a tool or a library capable of generating and exporting graphs. Acceptable export formats are: CSV, JSON, XML and gml files. The simpler the export format, the better.
Arcs in the graph can be directed or undirected, weighted or unweighted, and nodes should be able to contain basic information (e.g. a "consumption" parameter). The latter may be done through inheritance and is not crucial.
I do not need to visualize the generated graphs right now, I could use another tool for that. It would be nice to have, but what I care the most for is the quality of generated network.
My preference is for tools with a good documentation and quality tutorials.
I know Java and C++, with a preference for the former. I could use Python as well (if that's the best option), but I'm not really familiar with it.
Some of the libraries I'm considering are:
JGraphT is a famous Java library, has a comprehensive JavaDoc, but its tutorials are quite poor and it does not seem to be able to generate all the network topologies I need.
Boost Graph Library is a famous C++ library, has a comprehensive documentation, but I can't find any tutorials for it and I'm not sure it has all the generators I need.
Neo4j is a set of Java algorithms, has a comprehensive JavaDoc but does not have tutorials and seems to miss the random regular generator.
NetworkX is a Python library that seems to have the best documentation and tutorials, it seems to have all the generators I need, but would require me to use Python. Is it really that good?
Your advise is welcome.