📜  小世界模型——使用Python Networkx

📅  最后修改于: 2022-05-13 01:55:15.198000             🧑  作者: Mango

小世界模型——使用Python Networkx

在本文中,我们将学习如何使用Python中的 Networx 模块创建一个小世界网络。在继续之前,让我们先了解一些关于小世界现象的基础知识。

什么是小世界现象
小世界现象是我们都通过少量边连接的研究和概念。已经有三个著名的实验来证明小世界现象:

  1. Milgram 小世界现象实验: 296 名随机选择的人被要求将一封信转发给“目标”人(波士顿的一名股票经纪人)。如果这个人是个人认识的,那封信就直接寄给他,否则,这封信就寄给一个认识他的可能性较高的人。 64 个字母到达目标人,中位长度为 6 即。平均而言,一个随机的人通过中间的 6 个人连接到目标人。
  2. Miscrosoft Instant Messenger 实验: Microsoft Instant Messenger 有 2.4 亿活跃用户。如果两个用户在一个月内进行双向通信,则它们是连接的。对于任意两个随机人,中间距离为 7,即 2 个随机人通过 7 个中间连接连接。
  3. 基于 Facebook 的实验:Facebook进行的实验计算出 2008 年的平均路径长度为 5.28,而 2011 年减少到 4.74。

1998 年,Duncan Watts 和 Steven Strogatz 发表了题为“Collective Dynamics of Small World Networks”的研究论文,进一步研究了小世界模型。他们研究了三种不同的网络:

  1. 电影演员网络,其中各个节点是电影演员,只有当演员出现在同一部电影中时,它们才会连接。
  2. 一个电网网络,其中节点是发电机、变压器和变电站,如果两个节点之间有传输线,则两个节点是相连的。
  3. 一个网络,其中节点是神经元,如果两个节点具有突触或间隙连接,则它们是链接的。

他们得出的结论是,小世界网络通常具有较低的平均路径长度,但具有较高的聚类系数。

小世界网络如何形成?

Watts 和 Strogatz 提出了一个关于如何构建小世界网络的模型。假设有n 个节点,其中每个节点连接到m个最近的邻居,这被称为规则格子,如下图所示,其中 n = 10 和 m = 4。

考虑每条边(u, v)并以概率p随机选择一个节点w并重新连接边(u, v)使其变为(u, w) 。对于p = 0 ,Regular Lattice 保留其结构并具有高平均距离和高聚类。对于p = 1 ,形成一个平均距离小、聚类度低的随机网络。如下图所示,其中 n = 10,m = 4,p = 1。

对于p的中间值,我们将得到一个平均距离小、聚类度高的理想小世界网络。

对于Python,我们可以使用 Networkx 轻松构建小世界网络。

import networkx as nx
import matplotlib.pyplot as plt
  
G = nx.watts_strogatz_graph(n = 10, m = 4, p = 0.5)
pos = nx.circular_layout()
  
plt.figure(figsize = (12, 12))
nx.draw_networkx(G, pos)

输出:

由此产生的小世界网络可能是一个断开的图。如果我们想得到一个连通图,我们可以修改上面代码的第 4 行如下:

G = nx.connected_watts_strogatz_graph(n=10, m=4, p=0.5, t=20)

它运行原始函数t 次(在本例中为 t = 20),直到实现连接网络。它将提供以下网络:

G = nx.newman_watts_strogatz_graph(n=10, m=4, p=0.5)

上面的代码将运行一个类似的模型,但是以概率p添加新的边,而不是重新连接已经存在的边。它将产生以下网络: