本文主要是介绍networkx学习(三) 随机网络,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
networkx学习(三) 随机网络
参考:《巴拉巴西网络科学》
1.规则网络
2.随机网络的生成算法
网络科学旨在建立能够重现真实网络性质的模型。 我们遇到的大多数真实网络没有晶格所具有的那种令人愉悦的规则结构, 或者蜘蛛网所具有的那种可预测的放射型结构。 相反, 真实网络乍一看好像是随机连接而成的 。 随机网络理论通过构建和刻画真正随机的网络来解释这种表面上的随机性。
从建模的角度来看, 网络是一个相对简单的对象, 仅由节点和链接组成。 然而, 真正的挑战在于, 在哪些节点间放置链接才能重现真实系统的复杂性。 在这一点上, 随机网络背后的哲学思想很简单: 在节点之间随机放置链接。
随机网络有两种定义方式:
G(N, L) 模型
N个节点通过L条随机放置的链接彼此相连。 埃尔德什和雷尼在他们关于随机网络的系列论文[2-9]中采用的是这种定义方式。
G(N, p) 模型
N个节点中, 每对节点之间以概率p彼此相连。 该模型是由埃德加· N.吉尔伯特(Edgar N. Gilbert) 提出的。
G(N, p) 模型固定了两个节点的连接概率p, G(N, L) 模型则固定了总链接数L。 G(N, L) 模型中, 节点平均度可以简单地算出, 即 =2L/N。 G(N, p) 模型中, 网络其他特征则更容易计算。 本书将主要探讨G(N, p) 模型, 不仅是因为该模型便于计算网络的一些关键特征, 还因为在真实网络中, 链接数很少保持固定不变。
随机网络由N个节点组成, 每对节点相互连接的概率为p。构建随机网络的步骤如下:
(1) 从N个孤立节点开始。
(2) 选择一对节点, 产生一个0到1之间的随机数。 如果该随机数小于p, 在这对节点之间放置一条链接; 否则, 该节点对保持不连接。
(3) 对所有N(N-1) /2个节点对, 重复步骤(2) 。
第一种:G(N,L)
import random
import itertoolsdef GNL(N, L):G = nx.Graph()G.add_nodes_from(range(N))nlist = list(G)edge_count = 0while edge_count < L:# generate random edge,u,vu = random.choice(nlist)v = random.choice(nlist)if u == v or G.has_edge(u, v):continueelse:G.add_edge(u, v)edge_count += 1return GG = GNL(100, 200)
第二种:G(N,p)
def GNP(N, p):edges = itertools.combinations(range(n), 2)G = nx.Graph()G.add_nodes_from(range(N))for e in edges:if random.random() < p:G.add_edge(*e)return GGNP = GNP(100, 0.6)
# 可以直接调用库函数来生成这两种网络
n, m, p = 20,40,0.2
g1 = nx.gnm_random_graph(n, m)
g2 = nx.gnp_random_graph(n, p)plt.figure(figsize=(8,4))plt.subplot(121)
nx.draw(g1, pos=nx.circular_layout(g1), node_size=300, node_color="red",with_labels=True)
plt.title("G(N,L)")plt.subplot(122)
nx.draw(g2, pos=nx.circular_layout(g2), node_size=300, node_color="red",with_labels=True)
plt.title("G(N,p)")
3. ER随机网络的结构特性
3.1 度分布
随机网络中, 有些节点有许多链接, 有些节点只有少量链接, 甚至没有链接(图2-3) 。 这种差异可以通过度分布pk来刻画, pk表示一个随机选择的节点其度为k的概率。
编程实践:绘制不同规模随机网络的度分布
# 导入库
import networkx as nx
import matplotlib.pyplot as plt
import numpy as np
import math
import scipy
from scipy import stats# 定义求度分布的函数
# 度分布:Pk为网络中度为k的节点在整个网络中所占的比例
def get_pdf(G, kmin, kmax):k = list(range(kmin, kmax+1)) # 获取所有可能的度值N = len(G.nodes())Pk = []for ki
这篇关于networkx学习(三) 随机网络的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!