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.

1 Answer 1


I would serious suggest taking a couple of days to make a start at learning python - it and its libraries are awesome both in simplicity of use and in power. One of the big advantages of working in python is it works just about everywhere and you can even have a USB stick installation that will work without installation on most Windows machines - keep an backup of your work and tools on this and you can demo/make changes anywhere.

NetworkX is very good but I would also suggest taking a look at plotly/matplotlib/scipy for some additional tools.

To answer the last bit Python really is that good - there are just a couple of really important things to remember <space>*n is not equal to <tab> and if your code is not well laid out it will not run as you expect or not at all.

  • 1
    I'll give it a shot. Unfortunately, I don't have time to learn Python properly. The library tutorials make it look like it's as simple as typing in a command line. Maybe I can manage it.
    – Agostino
    Feb 11, 2015 at 15:51

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.