Prismoid’s diary

自分の備忘録・メモのために書き始めました。

Pythonによるネットワークシミュレーション (自分用のメモ)

NS3がACMディジタルライブラリなどの論文でも使われていてそれを使いたいが、簡単に使えなさそう(Computer Scienceの世界では、Easy come, easy goではない)だったので、python3でも簡単に動かせそうなnetworkXを用いる。
ノード数がある程度までならスケールするといいけど。

次のブログを参考に環境を作成する
qiita.com

$ pip install networkx
$ pip install -U networkx # バージョンを更新

単純なシミュレーションとして、次の例が挙げられる
「Following a behavior similar to the default in Bitcoin’s reference client, each node initiates links to 8 uniformly selected neighbors (and accepts all links others initiated)」(https://fc15.ifca.ai/preproceedings/paper_30.pdf:image=https://fc15.ifca.ai/preproceedings/paper_30.pdfより引用)

import networkx as nx
from matplotlib import pyplot

g=nx.Graph() # まずは、空のグラフオブジェクトを用意。                                                                  
g.add_nodes_from([2,3,4,5]) #  用意したグラフオブジェクトにノード(だけ)を追加。引数はノードのリスト。                                                                 
g.add_edge(2, 3) # エッジを追加
nx.draw_networkx(g,pos=nx.spring_layout(g)) # グラフの描画に必要

他には、下記リンクのようにErd ̋os-R ́enyiモデルなどもある。
(http://www.math.is.tohoku.ac.jp/~obata/laboratory/file/2006-Takahashi.pdf:image=http://www.math.is.tohoku.ac.jp/~obata/laboratory/file/2006-Takahashi.pdf)

次のサイトでは、networkxによる、最大連結部分の計算。ネットワークの脆弱性チェック
qiita.com


(追記続ける)