
所谓正态分布是最「自然」的,背后是中心极限定理在起作用——大量独立同分布的随机变量之和(或均值)的分布配资行情最新消,会趋近于正态分布。
注意成立的前提是,大量独立同分布的随机变量之和。这意味着,如果影响一个结果的因素不是独立的,或者不是同等重要的,那么结果可能不会服从正态分布。而人类社会资源的幂律分布则源于非独立、非线性的相互作用,其核心机制是正反馈(Positive Feedback)。
在社交网络、财富积累等领域,节点(个体)的后续连接概率与其已有连接数成正比。比如,社交平台的大V更容易被新用户关注,富人的投资渠道更多,形成滚雪球效应。这种效应可以用Barabási-Albert模型(BA模型)来描述。
BA模型的核心机制有两个:
增长(Growth):网络从一个小的初始网络开始,然后逐步增加新的节点。在每一个时间步,一个新的节点加入网络,并与其他已存在的节点建立连接。优先连接(Preferential Attachment):新节点更倾向于与那些已经拥有较多连接的节点建立连接。具体来说,一个新节点与现有节点i建立连接的概率P(i)与节点i的度k_i成正比,可以用以下公式表示:P(i) = frac{k_i}{sum_j k_j}其中,sum_j k_j表示所有现有节点的度之和。举个例子,假设我们从一个包含两个相连节点的初始网络开始,每一步增加一个节点,并与已存在的节点建立一个连接。
第1步:初始网络有两个节点,分别记为A和B,它们之间有一条边。因此,节点A和B的度均为1。第2步:加入一个新节点C。根据优先连接机制,节点C与A或B建立连接的概率相等,均为frac{1}{1+1} = frac{1}{2}。假设C与A建立了连接,此时,A的度变为2,B的度为1,C的度为1。第3步:加入一个新节点D。现在网络中有A、B、C三个节点,它们的度分别为2、1、1。因此,节点D与A建立连接的概率为frac{2}{2+1+1} = frac{1}{2},与B或C建立连接的概率均为frac{1}{4}。通过不断重复这个过程,网络会逐渐演化,最终形成一个具有幂律分布的网络,也叫无尺度网络。
我们可以用编程的方式来模拟一下这个过程:
import networkx as nx import matplotlib.pyplot as plt # 使用 NetworkX 内置的 BA 模型生成器 n_nodes = 1000 m_edges = 1 G = nx.barabasi_albert_graph(n_nodes, m_edges) # 统计度数分布 degree_count = nx.degree_histogram(G) degrees = range(len(degree_count)) counts = degree_count # 可视化 plt.figure(figsize=(10, 6)) plt.scatter(degrees, counts, alpha=0.6) plt.xscale('log') plt.yscale('log') plt.xlabel('Degree (log)') plt.ylabel('Count (log)') plt.title('Degree Distribution of BA Model (NetworkX Implementation)') plt.grid(True) plt.show()上面这个用了nx里内置的生成器,我们也可以手动实现一下:
import random import matplotlib.pyplot as plt from collections import defaultdict def simulate_ba_model(n_nodes, m_edges): """ 手动模拟 BA 模型 :param n_nodes: 总节点数(包含初始节点) :param m_edges: 每个新节点连接的边数 """ # 初始化网络:两个互相连接的节点 network = {0: [1], 1: [0]} degrees = [1, 1] # 每个节点的度数 for new_node in range(2, n_nodes): # 选择 m_edges 个现有节点(按度数概率选择) selected = [] for _ in range(m_edges): # 按度数计算概率(权重) total_degree = sum(degrees) probs = [d / total_degree for d in degrees] # 按概率随机选择一个节点 chosen = random.choices(range(len(degrees)), weights=probs)[0] selected.append(chosen) # 更新度数(防止重复连接同一节点) degrees[chosen] += 1 # 添加新节点及其连接 network[new_node] = selected degrees.append(m_edges) # 新节点初始度数为 m_edges # 更新被连接节点的邻居列表 for node in selected: network[node].append(new_node) return network # 参数设置 n_nodes = 1000 # 总节点数 m_edges = 1 # 每个新节点连接1个现有节点(与BA模型原始定义一致) # 生成网络 network = simulate_ba_model(n_nodes, m_edges) # 统计度数分布 degree_count = defaultdict(int) for node in network: degree = len(network[node]) degree_count[degree] += 1 # 可视化度数分布(对数坐标) degrees = list(degree_count.keys()) counts = list(degree_count.values()) plt.figure(figsize=(10, 6)) plt.scatter(degrees, counts, alpha=0.6) plt.xscale('log') plt.yscale('log') plt.xlabel('Degree (log)') plt.ylabel('Count (log)') plt.title('Degree Distribution of BA Model (Manual Implementation)') plt.grid(True) plt.show()效果是差不多的配资行情最新消。
启泰网配资提示:文章来自网络,不代表本站观点。