<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Extreme Pattern: Hello Small World</title>
    <link>http://blog.extremepattern.com/articles/2006/11/30/hello-small-world</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description>enjoy</description>
    <item>
      <title>Hello Small World</title>
      <description>&lt;h3&gt;源起&lt;/h3&gt;


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


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


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


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


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


	&lt;p&gt;http://en.wikipedia.org/wiki/Eigenvector_centrality&lt;/p&gt;


	&lt;p&gt;http://en.wikipedia.org/wiki/Social_network&lt;/p&gt;


	&lt;p&gt;http://en.wikipedia.org/wiki/Small-world_network&lt;/p&gt;


	&lt;p&gt;http://www.cs.cornell.edu/home/kleinber/&lt;/p&gt;


	&lt;h3&gt;&lt;span class="caps"&gt;JUNG&lt;/span&gt;&lt;/h3&gt;


	&lt;p&gt;&lt;a href="http://jung.sourceforge.net/"&gt;Java Universal Network/Graph Framework&lt;/a&gt; 是個功能很多的工具，提供兩種世界真小的兩種模擬網路 KleinbergSmallWorldGenerator 跟 WattsBetaSmallWorldGenerator。&lt;/p&gt;


	&lt;p&gt;很方便的可以掛到 Swing 輸出。&lt;/p&gt;


&lt;pre&gt;
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);
&lt;/pre&gt;

	&lt;p&gt;或是輸出 &lt;span class="caps"&gt;PNG&lt;/span&gt; 來看看。&lt;/p&gt;


&lt;pre&gt;
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"));
&lt;/pre&gt;

	&lt;p&gt;結果出現在下面，應該可以再調。&lt;/p&gt;


	&lt;p&gt;&lt;img src="/files/smallworld.png" alt="" /&gt;&lt;/p&gt;


	&lt;h3&gt;觀察&lt;/h3&gt;


	&lt;ol&gt;
	&lt;li&gt;畫出的網路很緊，要如何用等下次有機會再多看書。&lt;/li&gt;
		&lt;li&gt;數學的知識在畢業時沒帶走，都留給學校了。&lt;/li&gt;
	&lt;/ol&gt;</description>
      <pubDate>Thu, 30 Nov 2006 02:04:00 -0800</pubDate>
      <guid isPermaLink="false">urn:uuid:7c4c1e18-e57b-4771-a462-8717be49aff7</guid>
      <author>LIN</author>
      <link>http://blog.extremepattern.com/articles/2006/11/30/hello-small-world</link>
      <category>java</category>
    </item>
  </channel>
</rss>

