Hello Small World

0

源起

在 Wikipedia 上看到一篇 Newman 的文章,講到網路的數學,主要談分析 social network 資料與建構數學模型。於是想要看看如何在 java 中玩一下。

分析這類網路往往想知道重點 (centrality measures) 所在,簡單的 (degree centrality)看連線多的。越多連線,越重要,越值得推薦。

問題在於連線的對象也應該納入考慮,連到大尾(或是比較喜歡)的,應該比較值得推薦,於是出現特徵向量評估方式 eigenvector centrality。文中還提到另外以路徑 Path 評估網路(重)點的方法。

觀察網路慢慢會發現一種特殊的現象,就是某種網路節點之間的聯繫遠比預期的還要緊密,路邊轉角賣吃的或是太空中的太空人可能是你朋友的朋友或是親戚。

提到這個現象,都會說到 Stanley Milgram 的寄信給陌生人實驗,找個朋友請他轉寄,看看經過幾手可以轉寄到該陌生人手上,觀察結果大都不超過六次,可以看出人際關係的網路遠比一般人認為的還要緊密。

http://en.wikipedia.org/wiki/Eigenvector_centrality

http://en.wikipedia.org/wiki/Social_network

http://en.wikipedia.org/wiki/Small-world_network

http://www.cs.cornell.edu/home/kleinber/

JUNG

Java Universal Network/Graph Framework 是個功能很多的工具,提供兩種世界真小的兩種模擬網路 KleinbergSmallWorldGenerator 跟 WattsBetaSmallWorldGenerator。

很方便的可以掛到 Swing 輸出。

WattsBetaSmallWorldGenerator gen = 
  new WattsBetaSmallWorldGenerator(20, 0.1 , 6);
Graph g = (Graph) gen.generateGraph();
JFrame jf = new JFrame();
VisualizationViewer vv = new VisualizationViewer(new SpringLayout(g),
  new PluggableRenderer());
jf.getContentPane().add(vv);        
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.pack();
jf.setVisible(true);

或是輸出 PNG 來看看。

VisualizationViewer vv = new VisualizationViewer(new SpringLayout(g),
  new PluggableRenderer(), new Dimension(600,600));
vv.setSize(600,600);
Container c = new Container();
BufferedImage bi = new BufferedImage(600,600,BufferedImage.TYPE_INT_RGB); 
Graphics2D gr = bi.createGraphics();
c.addNotify(); 
c.add(vv); 
c.setVisible(true); 
c.paintComponents(gr); 
ImageIO.write(bi, "png", new File("testdata/smallworld.png"));

結果出現在下面,應該可以再調。

觀察

  1. 畫出的網路很緊,要如何用等下次有機會再多看書。
  2. 數學的知識在畢業時沒帶走,都留給學校了。

Comments

(leave url/email »)

   Preview comment