精华内容
下载资源
问答
  • 基础图论:“小世界图”简述
    千次阅读
    更多相关内容
  • 正在进行中的Java实现分层可导航小世界图(HNSW)算法进行近似最近邻搜索。
  • 没有使用igraph库哦 因为...Watts和Strogatz建立的小世界网络模型就介于这两种网络之间,同时具有小世界特性和聚类特性,可以很好的来表示真实网络。 小世界模型构造算法 1、从规则开始:考虑一个含有N个点的最近邻耦
  • 小世界图

    千次阅读 2017-03-26 16:41:18
    最近,读了一本《复杂性思考》的书,书中在第4章介绍到的小世界图,我十分感兴趣,在网上找到了这篇文章,希望对大家有用~博主真的写的特别好实现小世界图:...Dijkstra算法

    最近,读了一本《复杂性思考》的书,书中在第4章介绍到的小世界图,我十分感兴趣,在网上找到了这篇文章,希望对大家有用~博主真的写的特别好

    实现小世界图:http://blog.csdn.net/sinat_30046339/article/details/49388095

    其中,Dijkstra算法在下面有给出,喜欢的可以去下载,是免费的:

    http://download.csdn.net/detail/m0_37885286/9794335

    展开全文
  • 复杂性思维第二版 三、小世界图

    万次阅读 2017-11-03 01:39:53
    三、小世界图现实世界中的许多网络,包括社交网络在内,具有“小世界属性”,即节点之间的平均距离,以最短路径上的边数来衡量,远远小于预期。在本章中,我介绍了斯坦利·米拉格(Stanley Milgram)的著名的“小...

    三、小世界图

    原文:Chapter 3 Small world graphs

    译者:飞龙

    协议:CC BY-NC-SA 4.0

    自豪地采用谷歌翻译

    现实世界中的许多网络,包括社交网络在内,具有“小世界属性”,即节点之间的平均距离,以最短路径上的边数来衡量,远远小于预期。

    在本章中,我介绍了斯坦利·米拉格(Stanley Milgram)的著名的“小世界实验”,这是小世界属性在真正的社交网络中的第一次科学演示。之后我们将考虑 Watts-Strogatz 图,它是一个小世界图的模型。我将复制 Watts 和 Strogatz 所做的实验,并解释它打算展示的东西。

    这个过程中,我们将看到两种新的图算法:广度优先搜索(BFS)和 Dijkstra 算法,用于计算图中节点之间的最短路径。

    本章的代码在本书仓库的chap03.ipynb中。使用代码的更多信息请参见第(?)章。

    3.1 Stanley Milgram

    斯坦利·米拉格(Stanley Milgram)是美国社会心理学家,他进行了两项最著名的社会科学实验,即 Milgram 实验,研究人们对权威的服从(http://en.wikipedia.org/wiki/Milgram_experiment)和小世界实验,研究了社交网络的结构(http://en.wikipedia.org/wiki/Small_world_phenomenon)。

    在小世界实验中,Milgram 向堪萨斯州威奇托(Wichita, Kansas)的几个随机选择的人发送了包裹,带有一个指示,要求他们向马萨诸塞州沙龙(Sharon, Massachusetts)的目标人员发送一封附带的信(在我长大的地方,波士顿附近),目标人员通过名字和职业确定。受访者被告知,只有当他亲自认识目标人员时,才可以将该信直接邮寄给目标;否则他们按照指示,将信和同一个指示发送给他们认为的,更有可能认识目标人员的亲戚或朋友。

    许多信件从来没有发出过,但是对于发出的信件,平均路径长度(信件转发次数)的大约为 6。这个结果用于确认以前的观察(和猜测),社交网络中任何两个人之间的通常距离是“六度分隔”。

    这个结论令人惊讶,因为大多数人都希望社交网络本地化 - 人们往往会靠近他们的朋友 - 而且在一个具有本地连接的图中,路径长度往往会与地理距离成比例增加。例如,我的大多数朋友都住在附近,所以我猜想社交网络中节点之间的平均距离是大约 50 英里。威奇托距离波士顿约有 1600 英里,所以如果 Milgram 的信件穿过了社交网络的典型环节,那么他们应该有 32 跳,而不是 6 跳。

    3.2 Watts 和 Strogatz

    1998年,Duncan Watts 和 Steven Strogatz 在 Nature 杂志上发表了一篇“小世界网络的集体动态”(Collective dynamics of ’small-world’ networks)论文,提出了小世界现象的解释。 你可以从 http://www.nature.com/nature/journal/v393/n6684/abs/393440a0.html 下载。

    Watts 和 Strogatz 从两种很好理解的图开始:随机图和正则图。在随机图中,节点随机连接。在正则图中,每个节点具有相同数量的邻居。他们考虑这些图的两个属性,群聚性和路径长度:

    群聚是图表的“集团性”(cliquishness)的度量。在图中,集团是所有节点的子集,它们彼此连接;在一个社交网络中,集团是一群人,彼此都是朋友。Watts 和 Strogatz 定义了一个群聚系数,用于量化两个节点彼此连接,并同时连接到同一个节点的可能性。

    路径长度是两个节点之间的平均距离的度量,对应于社交网络中的分离度。

    Watts 和 Strogatz 表明,正则图具有高群聚性和长路径长度,而大小相同的随机图通常具有群聚性和短路径长度。所以这些都不是一个很好的社交网络模型,它是高群聚性与短路径长度的组合。

    他们的目标是创造一个社交网络的生成模型。生成模型通过为构建或导致现象的过程建模,试图解释现象。Watts 和 Strogatz 提出了用于构建小世界图的过程:

    1. 从一个正则图开始,节点为n,每个节点连接k个邻居。

    2. 选择边的子集,并将它们替换为随机的边来“重新布线”。

    边的重新布线的概率是参数p,它控制图的随机性。当p = 0时,该图是正则的;p = 1是随机的。

    Watts 和 Strogatz 发现,较小的p值产生高群聚性的图,如正则图,短路径长度的图,如随机图。

    在本章中,我将按以下步骤复制 Watts 和 Strogatz 实验:

    • 我们将从构建一个环格(ring lattice)开始,这是一种正则图。
    • 然后我们和 Watts 和 Strogatz 一样重新布线。
    • 我们将编写一个函数来测量群聚度,并使用 NetworkX 函数来计算路径长度。
    • 然后,我们为范围内的p值计算群聚度和路径长度。
    • 最后,我将介绍一种用于计算最短路径的高效算法,Dijkstra 算法。

    3.3 环格

    图 3.1 n=10k=4的环格

    正则图是每个节点具有相同数量的邻居的图;邻居的数量也称为节点的度。
    环格是一种正则图,Watts 和 Strogatz 将其用作模型的基础。 在具有n个节点的环格中,节点可以排列成圆形,每个节点连接k个最近邻居。

    例如,n = 3k = 2的环形网格将拥有以下边:(0, 1), (1, 2), (2, 0)。 请注意,边从编号最高的节点“绕回”0。

    更一般地,我们可以像这样枚举边:

    
    def adjacent_edges(nodes, halfk):
        n = len(nodes)
        for i, u in enumerate(nodes):
            for j in range(i+1, i+halfk+1):
                v = nodes[j % n]
                yield u, v

    adjacent_edges接受节点列表和参数halfk,它是k的一半。它是一个生成器函数,一次产生一个边。它使用模运算符%,从编号最高的节点绕回最低的节点。

    我们可以这样测试:

    
    >>> nodes = range(3)
    >>> for edge in adjacent_edges(nodes, 1):
    ...     print(edge)
    (0, 1)
    (1, 2)
    (2, 0)

    现在我们可以使用adjacent_edges来生成环格。

    
    def make_ring_lattice(n, k):
        G = nx.Graph()
        nodes = range(n)
        G.add_nodes_from(nodes)
        G.add_edges_from(adjacent_edges(nodes, k//2))
        return G

    注意,make_ring_lattice使用地板除计算halfk,所以如果k是奇数,它将向下取整并产生具有度k-1的环格。这可能不是我们想要的,但现在还不错。

    我们可以像这样测试函数:

    lattice = make_ring_lattice(10, 4)

    图(?)展示了结果。

    3.4 WS 图

    图 3.2 WS 图,n=20k=4p=0(左边),p=0.2(中间),p=1(右边)。

    为了制作 Watts-Strogatz(WS)图,我们从一个环格开始,并为一些边“重新布线”。 在他们的论文中,Watts 和 Strogatz 以特定顺序考虑边,并用概率p重新布置每个边。 如果边被重新布置,则它们使第一个节点保持不变,并随机选择第二个节点。它们不允许自环或多边;也就是说,节点不能拥有到它自身的边,并且两个节点之间不能拥有多个边。

    这是我的这个过程的实现。

    
    def rewire(G, p):
        nodes = set(G.nodes())
        for edge in G.edges():
            if flip(p):
                u, v = edge
                choices = nodes - {u} - set(G[u])
                new_v = choice(tuple(choices))
                G.remove_edge(u, v)
                G.add_edge(u, new_v)

    参数p是边的重新布线的概率。for循环枚举了边,并使用flip,它以概率p返回True,来选择哪些被重新布置。

    如果我们重新布置节点u到节点v的边,我们必须选择一个节点来替换v,称为new_v。为了计算可能的选择,我们从节点集开始,它是一个集合,并且移除u和它的邻居,这避免了自环和多边。

    然后我们从选项中选择new_v,将uv的现有删除,并从添加一个unew_v的新边。

    另外,表达式G[u]返回一个字典,他的键是包含u的邻居。在这种情况下,它比使用G.neighbors更快一点。

    这个函数不按照 Watts 和 Strogatz 指定的顺序考虑边缘,但它似乎不会影响结果。

    图(?)展示了n = 20k = 4和范围内p值的 WS 图。当p = 0时,该图是环格。 当p = 1时,它是完全随机的。我们将看到,有趣的事情发生在两者之间。

    3.5 群聚性

    下一步是计算群聚系数,它量化了节点形成集团的趋势。 集团是一组完全连接的节点;也就是说,在集团中的所有节点对之间都存在边。

    假设一个特定的节点u具有k个邻居。如果所有的邻居都相互连接,则会有k(k-1)/2个边。 实际存在的这些边的比例是u的局部群聚系数,表示为Cu。它被称为“系数”,因为它总是在 0 和 1 之间。

    如果我们计算所有节点上的Cu平均值,我们得到“网络平均群聚系数”,表示为C

    这是一个计算它的函数。

    
    def node_clustering(G, u):
        neighbors = G[u]
        k = len(neighbors)
        if k < 2:
            return 0
    
        total = k * (k-1) / 2
        exist = 0
        for v, w in all_pairs(neighbors):
            if G.has_edge(v, w):
                exist +=1
        return exist / total

    同样,我使用G [u],它返回一个字典,键是节点的邻居。如果节点的邻居少于两个,则群聚系数未定义,但为简便起见,node_clustering返回 0。

    否则,我们计算邻居之间的可能的边数量,total,然后计算实际存在的边数量。结果是存在的所有边的比例。

    我们可以这样测试函数:

    
    >>> lattice = make_ring_lattice(10, 4)
    >>> node_clustering(lattice, 1)
    0.5

    k=4的环格中,每个节点的群聚系数是0.5(如果你不相信,可以看看图(?))。

    现在我们可以像这样计算网络平均群聚系数:

    
    def clustering_coefficient(G):
        cc = np.mean([node_clustering(G, node) for node in G])
        return cc

    np.mean 是个 NumPy 函数,计算列表或数组中元素的均值。

    然后我们可以像这样测试:

    
    >>> clustering_coefficient(lattice)
    0.5

    这个图中,所有节点的局部群聚系数是 0.5,所以节点的平均值是 0.5。当然,我们期望这个值和 WS 图不同。

    3.6 最短路径长度

    下一步是计算特征路径长度L,它是每对节点之间最短路径的平均长度。 为了计算它,我将从 NetworkX 提供的函数开始,shortest_path_length。 我会用它来复制 Watts 和 Strogatz 实验,然后我将解释它的工作原理。

    这是一个函数,它接受图并返回最短路径长度列表,每对节点一个。

    
    def path_lengths(G):
        length_map = nx.shortest_path_length(G)
        lengths = [length_map[u][v] for u, v in all_pairs(G)]
        return lengths

    nx.shortest_path_length的返回值是字典的字典。外层字典每个节点u到内层字典的映射,内层字典是每个节点vu->v的最短路径长度的映射。

    使用来自path_lengths的长度列表,我们可以像这样计算L

    
    def characteristic_path_length(G):
        return np.mean(path_lengths(G))

    并且我们可以使用小型的环格来测试它。

    
    >>> lattice = make_ring_lattice(3, 2)
    >>> characteristic_path_length(lattice)
    1.0

    这个例子中,所有三个节点都互相连接,所以平均长度为 1。

    3.7 WS 实验

    图 3.3:WS 图的群聚系数C和特征路径长度L,其中n=1000, k=10p是一个范围。

    现在我们准备复制 WS 实验,它表明对于一系列p值,WS 图具有像正则图像那样的高群聚性,像随机图一样的短路径长度。

    我将从run_one_graph开始,它接受nkp;它生成具有给定参数的 WS图,并计算平均路径长度mpl和群聚系数cc

    
    def run_one_graph(n, k, p):
        ws = make_ws_graph(n, k, p)
        mpl = characteristic_path_length(ws)
        cc = clustering_coefficient(ws)
        print(mpl, cc)
        return mpl, cc

    Watts 和 Strogatz 用n = 1000k = 10进行实验。使用这些参数,run_one_graph在我的电脑上需要大约一秒钟;大部分时间用于计算平均路径长度。

    现在我们需要为范围内的p计算这些值。我将再次使用 NumPy 函数logspace来计算ps

    
    ps = np.logspace(-4, 0, 9)

    对于每个p的值,我生成了 3 个随机图,并且我们将结果平均。这里是运行实验的函数:

    
    def run_experiment(ps, n=1000, k=10, iters=3):
        res = {}
        for p in ps:
            print(p)
            res[p] = []
            for _ in range(iters):
                res[p].append(run_one_graph(n, k, p))
        return res

    结果是个字典,将每个p值映射为(mpl, cc)偶对的列表。

    最后一步就是聚合结果:

    
    L = []
    C = []
    for p, t in sorted(res.items()):
        mpls, ccs = zip(*t)
        mpl = np.mean(mpls)
        cc = np.mean(ccs)
        L.append(mpl)
        C.append(cc)

    每次循环时,我们取得一个p值和一个(mpl, cc)偶对的列表。 我们使用zip来提取两个列表,mplsccs,然后计算它们的均值并将它们添加到LC,这是路径长度和群聚系数的列表。

    为了在相同的轴上绘制LC,我们通过除以第一个元素,将它们标准化:

    
    L = np.array(L) / L[0]
    C = np.array(C) / C[0]

    图(?)展示了结果。 随着p的增加,平均路径长度迅速下降,因为即使少量随机重新布线的边,也提供了图区域之间的捷径,它们在格中相距很远。另一方面,删除局部链接降低了群聚系数,但是要慢得多。

    因此,存在较宽范围的p,其中 WS 图具有小世界图的性质,高群聚度和短路径长度。

    这就是为什么 Watts 和 Strogatz 提出了 WS 图,作为展示小世界现象的,现实世界网络的模型。

    3.8 能有什么解释?

    如果你问我,为什么行星轨道是椭圆形的,我最开始会为一个行星和一个恒星建模;我将在

    3.9 广度优先搜索

    当我们计算最短路径时,我们使用了 NetworkX 提供的一个函数,但是我没有解释它是如何工作的。为此,我将从广度优先搜索开始,这是用于计算最短路径的 Dijkstra 算法的基础。

    在第(?)节,我提出了reachable_nodes,它寻找从给定的起始节点可以到达的所有节点:

    
    def reachable_nodes(G, start):
        seen = set()
        stack = [start]
        while stack:
            node = stack.pop()
            if node not in seen:
                seen.add(node)
                stack.extend(G.neighbors(node))
        return seen

    我当时没有这么说,但它执行深度优先搜索(DFS)。现在我们将修改它来执行广度优先搜索(BFS)。

    为了了解区别,想象一下你正在探索一座城堡。你最开始在一个房间里,带有三个门,标记为 A,B 和 C 。你打开门 C 并发现另一个房间,它的门被标记为 D ,E 和 F。

    下面你打开哪个门呢?如果你打算冒险,你可能想更深入城堡,选择 D,E 或 F。这是一个深度优先搜索。

    但是,如果你想更系统化,你可以在 D,E 和 F 之前回去探索 A 和 B,这将是一个广度优先搜索。

    reachable_nodes中,我们使用list.pop选择下一个节点来“探索”。默认情况下,pop返回列表的最后一个元素,这是我们添加的最后一个元素。在这个例子中,这是门 F。

    如果我们要执行 BFS,最简单的解决方案是将第一个元素从栈中弹出:

    node = stack.pop(0)

    这有效,但速度很慢。在 Python 中,弹出列表的最后一个元素需要常数时间,但是弹出第一个元素线性于列表的长度。在最坏的情况下,就是堆栈的长度O(n),这使得 BFS 的O(nm)的实现比O(n + m)差得多。

    我们可以用双向队列(也称为deque)来解决这个问题。deque的一个重要特征就是,你可以在开头和末尾添加和删除元素。要了解如何实现,请参阅 https://en.wikipedia.org/wiki/Double-ended_queue

    Python 在collections模块中提供了deque,所以我们可以像这样导入它:

    
    from collections import deque

    我们可以使用它来编写高效的 BFS:

    
    def reachable_nodes_bfs(G, start):
        seen = set()
        queue = deque([start])
        while queue:
            node = queue.popleft()
            if node not in seen:
                seen.add(node)
                queue.extend(G.neighbors(node))
        return seen

    差异在于:

    • 我用名为queuedeque替换了名为stack的列表。
    • 我用popleft替换pop,它删除并返回队列的最左边的元素,这是第一个添加的元素。

    这个版本恢复为O(n + m)。现在我们做好了寻找最短路径的准备。

    3.10 (简化的)Dijkstra 算法

    Edsger W. Dijkstra 是荷兰计算机科学家,发明了一种有效的最短路径算法(参见

    
    def shortest_path_dijkstra(G, start):
        dist = {start: 0}
        queue = deque([start])
        while queue:
            node = queue.popleft()
            new_dist = dist[node] + 1
    
            neighbors = set(G[node]) - set(dist)
            for n in neighbors:
                dist[n] = new_dist
    
            queue.extend(neighbors)
        return dist

    这是它的工作原理:

    • 最初,队列包含单个元素startdiststart映射为距离 0(这是start到自身的距离)。
    • 每次循环中,我们使用popleft获取节点,按照添加到队列的顺序。
    • 接下来,我们发现节点的所有邻居都没有在dist中。
    • 由于从起点到节点的距离是dist [node],到任何未访问的邻居的距离是dist [node] +1
    • 对于每个邻居,我们向dist添加一个条目,然后将邻居添加到队列中。

    只有在我们使用 BFS 而不是 DFS 时,这个算法才有效。为什么?

    第一次循环中,nodestartnew_dist1。所以start的邻居距离为 1,并且进入了队列。

    当我们处理start的邻居时,他们的所有邻居距离为2。我们知道,他们中没有一个距离为1,因为如果有的话,我们会在第一次迭代中发现它们。

    类似地,当我们处理距离为 2 的节点时,我们将他们的邻居的距离设为3。我们知道它们中没有一个的距离为12,因为如果有的话,我们将在之前的迭代中发现它们。

    等等。如果你熟悉归纳证明,你可以看到这是怎么回事。

    但是,在我们开始处理距离为2的节点之前,只有我们处理了距离为1的所有节点,这个论证才有效,依此类推。这正是 BFS 所做的。

    在本章末尾的练习中,你将使用 DFS 编写 Dijkstra 算法的一个版本,以便你有机会看到出现什么问题。

    3.11 练习

    练习 1:

    在一个环格中,每个节点的邻居数量相同。邻居的数量称为节点的度,所有节点的度相同的图称为正则图。

    所有环格都是正则的,但不是所有的正则图都是环格。特别地,如果k是奇数,则不能构造环格,但是我们可以构建一个正则图。

    编写一个名为make_regular_graph的函数,该函数接受nk,并返回包含n个节点的正则图,其中每个节点都有k个邻居。如果不可能使用nk的给定值来制作正则图,则该函数应该抛出ValueError

    练习 2:

    我的reachable_nodes_bfs实现是有效的,因为它是O(n + m)的,但它产生了很多开销,将节点添加到队列中并将其删除。 NetworkX 提供了一个简单,快速的 BFS 实现,可从 GitHub 上的 NetworkX 仓库获取,网址为 https://github.com/networkx/networkx/blob/master/networkx/algorithms/components/connected.py

    这里是我修改的一个版本,返回一组节点:

    def _plain_bfs(G, source):
        seen = set()
        nextlevel = {source}
        while nextlevel:
            thislevel = nextlevel
            nextlevel = set()
            for v in thislevel:
                if v not in seen:
                    seen.add(v)
                    nextlevel.update(G[v])
        return seen

    将这个函数与reachable_nodes_bfs相比,看看哪个更快。之后看看你是否可以修改这个函数来实现更快的shortest_path_dijkstra版本。

    练习 3:

    下面的 BFS 实现包含两个性能错误。它们是什么?这个算法的实际增长级别是什么?

    
    def bfs(top_node, visit):
        """Breadth-first search on a graph, starting at top_node."""
        visited = set()
        queue = [top_node]
        while len(queue):
            curr_node = queue.pop(0)    # Dequeue
            visit(curr_node)            # Visit the node
            visited.add(curr_node)
    
            # Enqueue non-visited and non-enqueued children
            queue.extend(c for c in curr_node.children
                         if c not in visited and c not in queue)

    练习 4:在第(?)节中,我说了除非使用 BFS,Dijkstra 算法不能工作。编写一个shortest_path_dijkstra的版本,它使用 DFS,并使用一些例子测试它,看看哪里不对。

    练习 5:

    Watts 和 Strogatz 的论文的一个自然问题是,小世界现象是否特定于它的生成模型,或者其他类似模型是否产生相同的定性结果(高群聚和短路径长度)。

    为了回答这个问题,选择 WS 模型的一个变体并重复实验。 你可能会考虑两种变体:

    • 不从常规图开始,从另一个高群聚的图开始。 例如,你可以将节点放置在二维空间中的随机位置,并将每个节点连接到其最近的k个邻居。
    • 尝试不同种类的重新布线。

    如果一系列类似的模型产生类似的行为,我们认为论文的结果是可靠的。

    练习 6:

    Dijkstra 算法解决了“单源最短路径”问题,但为了计算图的特征路径长度,我们其实需要解决“多源最短路径”问题。

    当然,一个选择是运行 Dijkstra 算法n次,每个起始节点一次。 对于某些应用,这可能够好,但是有更有效的替代方案。

    找到一个多源最短路径的算法并实现它。请参阅 https://en.wikipedia.org/wiki/Shortest_path_problem#All-pairs_shortest_paths

    将实现的运行时间与运行 Dijkstra 算法n次进行比较。哪种算法在理论上更好?哪个在实践中更好?NetworkX 使用了哪一个?

    展开全文
  • 小世界网络Matlab代码传染病模型,会自动出,亲测可用,点下运行即可。
  • 小世界网络模型MATLAB程序
  • 进一步得到了WS和NW小世界网络模型的度分布以及NW小世界网络模型的平均最短路径和平均聚类系数的归一化.使用Matlab软件,用邻接矩阵表示网络连接,用随机数产生器产生概率,生成两种小世界模型.并且使用稀疏...
  • 用于计算和测试网络小世界性的 MATLAB 代码包括用于针对随机空模型计算小世界性分数的 P 值的代码
  • 精美的带国家标识的世界地图PPT背景图片素材下载,关键词:世界地图,国家国旗,幻灯片插图素材下载,.PPTX格式; 精美的带国家标识的世界地图PPT背景图片素材下载,关键词:世界地图,国家国旗,幻灯片插图素材...
  • 小世界网络和无标度网络的平均路径长度与聚类系数的求解
  • 小世界网络模型

    千次阅读 2021-09-12 17:49:38
    因此,规则的最近邻网络和ER随机都不能再现许多实际网络同时具有的明显聚类和小世界特征。从直观上看,毕竟大部分实际网络并不是完全规则或完全随机的。 WS小世界模型构造算法: (1)从规则开始:给定一个含有N...

    一、小世界网络模型

    1、WS小世界模型

    在这里插入图片描述
    我们在前面的文章中介绍过,上图(a)所示的完全规则的最近邻耦合网络具有较高的聚类特性,但并不具有较短的平均距离。另一方面,完全随机的ER随机图虽然具有小的平均路径长度却没有高聚类特性。因此,规则的最近邻网络和ER随机图都不能再现许多实际网络同时具有的明显聚类和小世界特征。从直观上看,毕竟大部分实际网络并不是完全规则或完全随机的。
    WS小世界模型构造算法:
    (1)从规则图开始:给定一个含有N个点的环状最近邻耦合网络,其中每个节点都与它左右相邻的各K/2个节点相连,K是偶数。
    (2)随机化重连:以概率p随机地重新连接网络中原有地每条边,即把每条边的一个端点保持不变,另一个端点改取为网络中随机选择的一个节点。其中规定不得有重边或者自环。
    在上述模型中,p=0对应于完全规则网络,p=1对应于完全随机网络,通过调节参数p的值就可以实现从规则网络到随机网络的过渡。

    2、仿真分析

    由上述构造模型算法得到的WS模型的聚类系数C§和平均路径长度L§都可看作是重连概率p的函数。
    在这里插入图片描述
    上图显示了在给定参数N=1000,K=10下,网络的聚类系数和平均路径长度随重连概率p的变化关系。
    上图的一些科学处理方法值得我们学习:
    (1)归一化处理:图中并没有直接画出C§和L§,而是对这两个量做了归一化处理,即为C§/C(0),L§/L(0),从而使得两个量的最大值均为1。一般而言,要把不同的量的变化趋势绘制在同一张图中,应该尽可能使得这些量具有统一的尺度。
    (2)对数化坐标,图中横坐标取得是对数坐标。这是因为这里重点关注的是p较小时的聚类系数和平均路径长度的变化情形,采用对数坐标的好处就在于可以在横轴上把较小p值的刻度拉宽而压缩较大p值的区间。
    (3)平均化处理:考虑到随机性,图中的数据是20次平均的结果。一般而言,在做含有随机性的实验时,应尽可能考虑做多次实验然后取平均,从而保证所得到的结果的合理性。
    上图中当p从零开始增大时,随机重连后的网络的聚类系数下降缓慢但平均路径长度却下降很快。即当p较小时
    在这里插入图片描述
    这意味着,当重连概率p较小时,网络即具有较短的平均路径长度又具有较高的聚类系数。

    3、实验验证

    前人们在仿真分析后计算了3个实际网络的平均路径长度L a c t u a l _{actual} actual和聚类系数,C a c t u a l _{actual} actual,并与相应的具有相同节点数和平均度的随机图的平均路径长度L r a n d o m _{random} random和平均聚类系数,C r a n d o m _{random} random相比较。这三个网络分别是:
    电影演员合作网络:N=225226,< k>=61;
    美国西部电力网络:N=4941,< k>=2.67;
    线粒虫神经网络:N=225226282,< k>=14;
    这三和实际网络具有如下共同特征:L a c t u a l _{actual} actual稍大于L r a n d o m _{random} random,C a c t u a l _{actual} actual远大于C r a n d o m _{random} random
    在这里插入图片描述

    4、动力学分析

    在这里插入图片描述
    前人通过仿真研究了WS小世界模型上的病毒传播动力学。初始时刻网络中仅有单个个体感染病毒,然后在各时刻每个感染个体以概率r感染健康的邻居节点。上图(a)显示的是病毒感染一半人口的临界传染概率r h a l f _{half} halfr与WS模型的重连概率p的关系。可以看出,当重连概率p从零增大时,r h a l f _{half} half快速下降。如果固定r=1,那么只要网络是连通的,病毒就总能感染网络中的所有节点。从图(b)可以看出,病毒扩散至整个网络(即所有节点都被感染)所需时间T§与平均距离长度L§随着WS模型重连概率p的变化趋势几乎一致,从而表明病毒在小世界网络中传播更快。
    在WS模型提出之后,人们自然希望进一步对该模型的性质做理论分析。不久之后,Newman和Watts提出了另一个在理论分析方面相对容易处理的小世界模型,现在称为NW小世界模型。

    5、NW小世界模型

    在这里插入图片描述
    NW模型是通过用“随机化加边”取代WS模型构造中的“随机化重连”而得到的。注意到在WS模型中,边的数目固定为NK/2,但是以概率p对这些边进行随机重连,这意味着随机重连得到的长程边数目的均值为NKp/2。在NW模型中,原来的NK/2条边保持不变,而是在此基础上再随机添加一.些边,为便于比较,这些添加的长程边数目的均值同样取为NKp/2。NW模型的具体构造算法如下:
    (1)从规则图开始:给定一个含有N个节点的环状最近邻耦合网络,其中每个节点都与它左右相邻的各K/2个节点相连,K是偶数。
    (2)随机化加边:以概率p在随机选取的NK/2对节点之间添加边,其中规定不得有重边和自环。
    在p=0时,WS模型和NW模型都对应于原来的最近邻耦合网络;在p=1时,WS模型相当于随机图,而NW模型则相当于在规则最近邻耦合网络的基础上再叠加一个一定边数的随机图。当p足够小而N足够大时,可以认为WS模型和NW模型是等价的。

    二、拓扑性质分析

    1、聚类系数

    1.1 WS小世界网络

    网络的聚类系数C定义为网络中所有节点的聚类系数的平均值:
    在这里插入图片描述
    其中。网络中一个度为k i _i i的节点i的聚类系数C i _i i定义为:
    在这里插入图片描述
    这里E i _i i和k i _i i(k i _i i-1)/2分别为节点i的k i _i i个邻居节点之间实际存在的边数和可能存在的最大边数。考虑到WS模型的随机性,我们通过上式的分子和分母的均值来估计聚类系数的均值。分母k i _i i(k i _i i-1)/2的均值显然是K(K-1)/2。下面计算
    E i _i i的均值为:
    在这里插入图片描述
    其中M 0 _0 0为K个邻居节点之间的边数。
    所有WS模型的聚类系数的估计值如下:
    在这里插入图片描述
    可以看出聚类系数估计值函数是重连概率p的单调递减函数,这意味着随着随机性的增强,网络的聚类效应减弱。

    1.2 NW小世界网络

    在前面的文章中我们介绍过可以用网络中三角形的相对数量来刻画网络的聚类特性:
    在这里插入图片描述
    现在基于这一定义来计算NW小世界网络模型的聚类系数。
    (1)计算网络中三角形的数目
    p=0时,最近邻耦合网络中的三角形数量为 1 4 \frac{1}{4} 41NK( 1 2 \frac{1}{2} 21K-1)。p>0时,这些三角形在NW模型中仍然保留,现在我们需要计算在添加了长程边之后新增加的三角形的数量。网络中长程边的的平均数为 1 2 \frac{1}{2} 21NKp,这些边可以在 1 2 \frac{1}{2} 21N(N-1)个点对之间添加,从而每一对节点之间有长程边的相连的概率为
    在这里插入图片描述
    包含一条长程边的三角形数量近似为一个与N无关的常数:
    在这里插入图片描述
    当网络规模N趋于无穷时,这一常数与最近邻耦合网络的三角形数量O(N)相比是可以忽略不记的。同样,包含两条或三条长程边的三角形数量也可以忽略不记。因此,对于0<=p<<1,NW模型中的三角形数量近似为 1 4 \frac{1}{4} 41NK( 1 2 \frac{1}{2} 21K-1)。
    (2)计算网络中连通三元组的数量
    最近邻耦合网络中连通三元组数量为 1 2 \frac{1}{2} 21NK(K-1)。每条长程边都可以与N条边的两个端点之一形成连通三元组。因此包含一条长城边的连通三元组的平均数量为:

    如果一个节点与m>1条长程边相连,那么从中任选两条长程边就构成一个连通三元组,共有 1 2 \frac{1}{2} 21m(m-1)中可能。平均一个节点与Kp条长程边相连,因此网络中以一个节点为中心的包含两条长程边的连通三元组数量的均值为:
    在这里插入图片描述
    综上所述,NW模型中总的连通三元组的数量的均值为:
    在这里插入图片描述
    所以,当0<=p<<1时,NW小世界网络模型的聚类系数的估计值为:
    在这里插入图片描述

    2、平均路径长度

    关于NW或WS小世界模型的平均路径的理论分析至今仍然是很困难的事情,人们还没有得到这两个模型的平均路径长度L的精确解析表达式。已有研究表明,小世界模型的平均路径长度应该具有如下形式:
    在这里插入图片描述
    其中f(u)为一与模型参数无关的普适标度函数。目前还没有f(u)的精确显式表达式,只是给出了如下的近似表达式:
    在这里插入图片描述
    我们可以基于上述两个式子推得平均路径长度是网络规模的对数增长函数。基于关系式
    在这里插入图片描述
    f(u)可以写为:
    在这里插入图片描述
    把上式代入到平均路径长度中,可得
    在这里插入图片描述
    NKp是网络中随机添加的长城边数目均值的两倍,上式意味着:只要网络中随机添加的边的绝对数量足够大(但是占整个网络边数的比例任然可以相当小),平均路径长度就可以视为网络规模的对数增长函数。

    3、度分布

    3.1 WS小世界网络

    WS模型在重连概率p=0时,每个节点的度都为K(偶数) ,亦即每个节点都与K条边相连:在p>0时,基于WS模型的随机重连规则的实现算法,每个节点仍然至少与顺时针方向的K/2条原有的边相连,亦即每个节点的度至少为K/2。为此,不妨记节点i的度为k i _i i=s i _i i+ K/2,s i _i i为整数。
    进一步地,s i _i i可分为两部分s i _i i=s i 1 _i^1 i1+s i 2 _i^2 i2,s i 1 _i^1 i1表示在原有的与节点i相连的逆时针方向的K/2条边中仍然保持不变的边的数目,其中每条边保持不变的概率为1-p,s i 2 _i^2 i2表示通过随机重连机制连接到节点i上的长程边,每条这样的边的概率为p/N。我们有
    在这里插入图片描述
    当N充分大时:
    在这里插入图片描述
    对于任一度为k>=K/2的节点s i 1 ∈ _i^1\in i1[0,min(k-K/2,K/2)]。因此,当k>=K/2时
    在这里插入图片描述
    而当k<K/2时,p(k)=0。

    3.2 NW小世界网络

    在基于“随机加边”机制的NW模型中,由于原有的规则最近邻网络中的所有边保持不变,每个节点的度至少为K。当k<K时,P(k)=0。当k≥K时,一个节点的度为k就意味着有k-K条长程边与该节点相连。之前我们说过每一对节点之间有边相连的概率为Kp/(N-1)。因此,一个随机选取的节点的度为k的概率为
    在这里插入图片描述
    NW模型中长程边的平均数为 1 2 \frac{1}{2} 21NKp。因此,平均而言,网络中与每个节点相连的长程边的数量为Kp,当N充分大时,二项分布可写为如下泊松分布:
    在这里插入图片描述
    上式为近似等式,当N无穷大时成立。

    三、Kleinberg模型与可搜索性

    1、Kleinberg模型

    二维Kleinberg模型构造算法:
    (1)从规则网格开始:给定一个含有N= N ˉ × N ˉ \bar{N}\times\bar{N} Nˉ×Nˉ个点的最近邻耦合网络,他们分布在一个二维网络上,使得每一行和每一列都恰好有 N ˉ \bar{N} Nˉ个节点。每个节点都通过有向边指向所有与该节点的网格距离不超过p>=1的节点。
    (2)随机化加边:对于每个节点,添加从该节点指向网络中的其它q个节点的q条有向边,其中节点u有添加边指向节点v的概率为:
    在这里插入图片描述
    在这里插入图片描述
    随着参数 α \alpha α值的增加,两个在网络距离上相隔较远的节点之间有长程连接的概率越来越小。当 α \alpha α很大时,添加的边几乎都成为了短程连接。
    上述表明,以规则网络为基础添加连边时,过分的随机和过分的规则都不利于网络上的搜索。所以,是否存在规则性和随机性之间的最佳折中,即最理想的 α \alpha α值,使得生成的网络即是小世界又便于快速分散式搜索。

    2、最优网络结构

    在这里插入图片描述
    上图为平均传递步数的对数与 α \alpha α值的关系。可以发现当N趋于无穷时 α \alpha α=2是唯一的最优值。
    Kleinberg定理:考虑二维Kleinberg网络模型上的搜索问题,假设每个节点采用的都是局部信息的分散式算法,我们有:
    (1)对于0<= α \alpha α<2,存在一个与p,q, α \alpha α相关但与N无关的常数c α _\alpha α,使得对于任意的分散式算法,平均传递步数都有一个下界c α _\alpha αN ( 2 − α ) / 3 ^{(2-\alpha)/3} (2α)/3
    (2)当 α \alpha α=2时,当前信的持有节点只需把信件传递给一个在网格距离上最接近目标节点的邻居节点,这种分散式算法的平均传递步数有一个上界c 2 _2 2 (logN) 2 ^2 2,其中c 2 _2 2是一个与N无关的常数。
    (3)对于 α \alpha α>2,存在一个与p、q、 α \alpha α相关但与N无关的常数c α _\alpha α,使得对于任意的分散式算法,平均传递步教都有一个下界c α _\alpha αN ( α − 2 ) / ( α − 1 ) ^{(\alpha-2)/(\alpha-1)} (α2)/(α1)

    3、Kleinberg模型的理论分析

    一维Kleinberg模型有向小世界模型构造算法:
    (1)从规则网络开始:给定一个含有N个点的环状最近邻耦合网络,其中每个节点都有边指向与它左右相邻的各K/2个节点,K是偶数。
    (2)随机化加边:对于每个节点,添加从该节点指向网络中的其它q个节点的q条有向边,其中节点u有添加边指向节点v的概率与这两个节点之间的格子距离成正比,即有
    在这里插入图片描述
    对于网络中随机选取的源节点s和目标节点t,我们要估计基于局部信息的贪婪算法所需的搜索步数X的期望值E(X)。
    (1)当 α \alpha α=1时,期望搜索步数上界与网络规模的对数的平方成正比,即存在常数c,使得
    在这里插入图片描述
    (2)当 α ≠ \alpha\neq α= 1时,期望搜索的步数的下界与网络规模的幂函数成正比,即存在与 α \alpha α有关的常数C α _\alpha α和c α _\alpha α>0,使得
    在这里插入图片描述

    4、在线网络实验认证

    基于Kleinberg模型得到的结论在多大程度上符合实际呢?
    在Kleinberg模型中有两个基本假设:
    (1)两个节点之间存在长程连接的概率是由它们之间的网格距离(对应于现实世界的地理距离)决定的。这种只依赖于地理距离建立的长程连接与实际情形的兰只有多大?或者说,在网络搜索中地理因素起着多大的作用?
    (2)所有节点在空间上是均匀分布的。但是在现实世界中,节点的分布往往是高度非均匀的:有些区域节点集中,有些区域则节点稀疏。这种非均匀的节点分布对搜索又会带来什么样的影响?
    通过前人的实验表明:
    (1)从可搜索性的角度看,在Kleinberg理论模型中仅考虑地理因素对长程连接的影响是合理的;也就是说,在这样的理论模型下是可以找到较短路径的。
    (2)从最优性的角度来看,基于秩的模型可能更加符合实际。
    基于秩的二维经纬网络模型构建:
    (1)构建规则经纬网络:N个点分布在一个二维网格上,每个节点都与其4个方向的最近的4个邻居节点之间有短程连接。
    (2)基于秩的随机化加边:每个节点u添加一条长程连接,它指向节点v的概率为:
    在这里插入图片描述

    四、层次树结构网络模型与可搜索性

    Watts等人提出了另一个基于层次树的社会结构的模型,从另一角度解释了社会网络的可搜索性。
    在这里插入图片描述
    在一个层次树状结构中,定义节点i和j最低的共同上级所在的层数为它们之间的距离x i j _{ij} ij;当节点i和j在同一个群中时,x i j _{ij} ij=1。节点i和j向上找到的共同祖先的层数越高,它们之间的距离就越大,如上图所示,其中l为层数,b为分叉率,g为群体大小。个体(用点表示)首先聚集成群(用椭圆表示),然后小的群再聚集成更大的群,这样一直继续下去就形成了一个层次树结构。
    假设人们是基于局部信息和贪婪算法向邻居传递消息。当前节点i所知道的信息为自己的坐标向量v i _i i,节点i在网络中所有邻居j的坐标向量以及目标节点t的坐标向量v t _t t,而不知道所有其他节点的信息。那么在什么条件下网络可以实现快速搜索呢?也就是说,在什么条件下可以找到随机选择的源节点s和目标节点t之间的较短的传递步数?Watts等考虑了消息前传有一个损耗率p≈0.25,即每一步消息终止的概率为0.25。网络实现快速搜索的判据是,消息最终到达目标节点的概率q不低于设定值r=0.05,即
    在这里插入图片描述
    最大平均传递步数< L >可以近似的由一个与网络规模N无关的常数估计:
    在这里插入图片描述

    展开全文
  • 粉色世界地图PPT插图免费下载下载,关键词:世界地图幻灯片背景图片,PowerPoint插图素材,.PPTX格式; 粉色世界地图PPT插图免费下载下载,关键词:世界地图幻灯片背景图片,PowerPoint插图素材,.PPTX格式...
  • 图论 二分 小世界网络 语义网络

    千次阅读 2016-07-29 01:27:09
    小世界网络 二分 最小覆盖 最大匹配 聚合系数 集聚系数 社交网络 物联网 语义网络图论首先“连通”很容易理解,比如这个世界每个人做一个节点的话,把相互认识的两人间连一条线,整张多半可能就是一张连通。...
  • 小世界”网络理解

    千次阅读 2019-12-21 17:49:47
    1998年Watts和Strogatz在Nature上发表了《Collective dynamics of ‘small-world’ networks》,首次提出了小世界网络。 论文地址:http://worrydream.com/refs/Watts-CollectiveDynamicsOfSmallWorldNetworks.pdf ...
  • 复杂网络实验2:WS小世界模型(matlab)

    万次阅读 多人点赞 2019-03-28 22:49:56
    复杂网络实验2:WS小世界模型(matlab) 一.思路 1.小世界模型3个参数,N为点的数目,K表示每个点左边K/2个邻居,右边K/2个邻居,一共K个邻居,P代表每条边以多少概率重连 2.首先给定这三个参数(源码是人工输入...
  • 复杂网络中小世界网络的MATLAB实现

    千次阅读 2018-12-18 13:02:23
    最近看了一些网上关于用MATLAB实现小世界网络的代码,大部分人在用MATLAB写代码的时候,用的还是C语言里面的思维,一般都是用for之类的循环语句,编写小世界网络时代码往往就大几十行。实际上MATLAB作为矩阵实验室,...
  • 小世界模型简介

    千次阅读 2019-03-14 19:40:14
    小世界模型 “小世界现象”源于社会心理学家Stanley Milgram在20世纪60年代所做的试验。Milgram设计了一个实验,他在美国内布拉斯加州奥马哈市或者堪萨斯州戚奇托市,随机选取了一些用户,给在波士顿的日标用户送信...
  • 提出了一种基于Cayley小世界网络模型(CSWN),该模型具有高聚集性和小网络直径;在分析了该网络模型的一些主要性质后给出了其路由算法;最后通过仿真实验证明了该模型符合小世界网络的特性。
  • NBA总决赛结束还没一周,马上世界杯就如期而至。大家在熬夜看球,而我关在小黑屋默默码字(可怜脸)。在体验到程序的 方便快捷省内存 之后,前段时间的“骑勇大战”果断用了程序观看。由于体验不错,又正在...
  • 世界(洲界线、国家)
  • BA无标度网络,WS小世界,随机matlab实现
  • 小世界网络matlab源码

    热门讨论 2011-01-25 22:20:20
    matlab实现小世界网络模型的算法源码
  • 小世界网络 MATLAB 建模 简介 小世界网络存在于数学 物理学和社会学中 是一种数学的模型 在这种中大部份的结 点不与彼此邻接 但大部份结点可以通过任一其它节点经少数几步就可以产生联系 若将一 个小世界网络中...
  • 3. 随机小世界网络和真实网络的度分布 (1)ER:生成n=5242个节点以及m=14484条边的随机。可以自己写代码,也可以使用SNAP或Networkx函数。 (2)SW随机网络,从n=5242个节点的环形网络开始,加上节点连成...
  • python小世界网络生成

    千次阅读 2019-01-23 22:05:11
    最近刚怒学完matplotlib的一些基操,想起来之前科创搞过小世界模型,就用python实现了一下。 没有使用igraph库哦 因为我还没学 小世界网络简介: 1998年, Watts和Strogatz 提出了小世界网络这一概念,并建立了WS...
  • 看上面的,从左到右依次是正则网络、小世界网络、随机网络。从代价-效能角度来看,正则网络的代价很低(因为它只有短连接的边,所以消耗的资源少),同时效能也很低(因为路径长度很高)。随机网络的代价很高...
  • 聚类系数与小世界网络

    千次阅读 2020-06-02 21:46:19
    聚类系数 聚类系数也称为聚集系数,...如果用来表示整体聚类系数,使用来表示中封闭三点组的个数,使用来比啊是开三点组的个数,则: 同样的对于某个节点的局部聚类系数: 以上为例: 封闭三点组为:...
  • WS小世界网络模型构造算法

    万次阅读 2016-05-19 14:54:34
    /*********************************************************************... * WS小世界模型构造算法: * (1)从规则开始:给定一个含有N个节点的环状最近邻耦合网络, * 其中的每个节点都与它左右相邻的各
  • 粉色世界地图PPT插图免费下载下载,关键词:世界地图幻灯片背景图片,PowerPoint插图素材,.PPTX格式;

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 523,292
精华内容 209,316
关键字:

小世界图