原文來自:http://blog.sciencenet.cn/blog-404069-297233.htmlhtml
做複雜網絡研究離不開對各類實際或模擬網絡的統計、計算、繪圖等工做。對於通常性的工做,咱們能夠用Pajek、Netdraw和Ucinet等軟件完成。但對一些特殊應用(好比本身開發了一個新模型),現有的軟件不能提供相應的建模或計算功能,這時就必需要經過編程的辦法來解決問題了。
在這篇文章中,向你們介紹我使用過的4個面向圖論及複雜網絡分析的程序庫,它們能夠(分別或同時)用C、C++、C#和Python等語言調用。同時這些庫都是開源的,能夠經過研讀它們的源代碼提升編程水平。
好,下邊開始介紹,第一位出場的是:
1、Boost Graph Library —— 「準」C++標準庫
Boost Graph Library(BGL)是C++ Boost庫的成員之一。Boost是一個通過千錘百煉的C++庫,做爲標準模板庫STL的後備,是C++標準化進程的發動機之一。Boost庫由C++標準委員會庫工做組成員發起,在C++社區中影響甚大,是徹徹底底的「準」標準庫。
BGL的特色是靈活性和高運行效率。BGL是以模板的形式提供的,這意味着你能夠在模板的基礎上建立本身的類型,好比自定義的節點類。BGL的開發者是世界上最頂尖的C++專家,這個庫中實現的各類圖算法具備很是高的執行效率,並且BGL自己具備工業強度,你能夠放心的使用它。此外,BGL的代碼結構良好,是很是值得研讀的精品,對於學習算法與數據結構會有很大的幫助。
從個人角度來看,BGL的缺點是沒有提供複雜網絡分析的算法,因此在實際中我使用的還很少。建議對於分析大規模的網絡問題時使用這個庫,利用它良好的圖數據結構,開發本身的複雜網絡分析算法,將會得到很高的執行效率。
參考資源:
BGL官方網站:http://www.boost.org/doc/libs/1_42_0/libs/graph/
技術書籍《The Boost Graph Library》,做者: Jeremy G. Siek,Lie-Quan Lee,Andrew Lumsdaine,見:http://www.douban.com/subject/1463103/
《使用Boost Graph library》,一個簡短的BGL使用介紹,適合快速上手,見:http://www.cppprog.com/2009/0408/100.html
《Boost Graph Library 學習筆記》,討論學習BGL中遇到的問題,見:http://blog.csdn.net/magicblue/archive/2009/05/22/4208976.aspx
2、QuickGraph —— .NET平臺下的BGL
QuickGraph是一個用C#語言編寫的.NET組件庫,所提供的算法與BGL相似,能夠看做是Boost Graph Library在.NET平臺下的實現。目前QuickGraph的最高版本是3.3,支持.NET 2.0和.NET 3.5平臺。
對於複雜網絡研究,QuickGraph可以提供的幫助與BGL基本相似。若是你對C#語言(以及其它支持.NET的語言)比較熟悉,能夠考慮選擇這個庫。但因爲.NET程序是在虛擬機下運行的緣由,因此效率不夠高,不適合處理大規模的計算問題。
參考資源:
QuickGraph官方網站:http://www.codeplex.com/quickgraph
中文資料暫時還找不到。
3、igraph —— C語言寫的複雜網絡分析庫
igraph是一個創建和操縱無向圖、有向圖的開源C程序庫,它既包含經典圖論裏的各類算法(例如最小支撐樹、網絡流等),也包含了最近的出現的一些網絡分析算法(如社團結構搜索等)。
igraph是C寫的,這意味着你很容易在C/C++中使用它。若是你不熟悉這兩種語言,或者以爲用C/C++太繁瑣的話,igraph還提供了R語言(一種國外很流行的統計分析語言)和Python語言的接口,因此也很適合科研人員使用(我如今用的是Python,調用igraph很簡單)。
參考資料:
igraph官方網站:http://igraph.sourceforge.net/
關於Python語言的介紹,見:http://zh.wikipedia.org/wiki/Python
關於R語言的介紹,見:http://zh.wikipedia.org/wiki/R語言
4、NetworkX —— 全面支持複雜網絡分析的Python包
NetworkX是一個建立和操縱複雜網絡,並對複雜網絡的結構、功能和動力學進行研究的Python包,它提供了目前應用最普遍的一些複雜網絡分析算法,固然也包括基本的經典圖論算法。NetworkX目前只能在Python語言中使用(這也是我學Python的緣由之一,見《從C#到Python —— 談談我學習Python一週來的體會》)。
我我的認爲NetworkX比igraph要好用,由於NetworkX的文檔更清晰易讀,程序結構組織得也很好,我如今主要在用這個包。但NetworkX的執行效率多數狀況下會比igraph要低(見Drew Conway所做的對比:http://files.meetup.com/1406240/sna_in_R.pdf)。因此也不適合做太大規模的網絡分析計算。此外,NetworkX和Python的一個繪圖包——Matplotlib結合得很好,可很方便地進行復雜網絡可視化。
參考資源:
NetworkX官方網站:http://networkx.lanl.gov/
Matplotlib(科學繪圖的Python包):http://matplotlib.sourceforge.net
5、總結
本文介紹了圖論與複雜網絡研究經常使用的一些程序庫。用好這些程序庫(以及其它一些軟件工具),能夠避免咱們無謂的re-invent the wheel,從而提升工做效率。在網上了解到,國外同行用這些庫的不少,而在國內還不多搜索到這方面的資料(除了BGL)。做爲我進複雜網絡圈的敲門磚,向各位圈友推薦這幾個庫。另外,我近期正在學習Python和NetworkX,若是您感興趣,歡迎和我交流:)
附:幾個庫的開發及調用語言對比(*看來學Python仍是不錯的,這幾個庫均可以調用-_-)python
庫名稱 | 原始開發語言 | 可用某語言調用 |
BGL | C++ | C++/ Python(經過boost-python) |
QuickGraph | C# |
支持.NET平臺的任何語言(Python程序員可用IronPython) |
igraph | C | C/C++/R/Python(理論上至少有50種語言可直接或間接調用C程序) |
NetworkX | Python | Python |
複雜網絡研究
http://blog.sciencenet.cn/blog-404069-297233.html 程序員