复杂网络中的SIS疾病传播模型Python实现与网络结构影响分析引言在当今高度互联的世界中疾病传播的数学模型变得尤为重要。SIS易感-感染-易感模型作为传染病动力学研究的基础框架能够帮助我们理解疾病在不同网络结构中的传播规律。本文将带您深入探索如何用Python实现SIS模型并分析ER随机网络、WS小世界网络和BA无标度网络这三种典型网络结构对疾病传播的影响。对于研究人员和开发者而言掌握这些模拟技术不仅有助于理解流行病学原理还能为社交网络信息传播、计算机病毒扩散等场景提供分析工具。我们将从基础理论出发逐步构建完整的模拟框架并通过可视化对比不同网络中的传播动态。1. 复杂网络与SIS模型基础1.1 复杂网络基本概念复杂网络是由大量节点通过边相互连接构成的系统具有以下关键特征度分布节点连接数的概率分布决定网络的异质性集聚系数衡量节点邻居间相互连接的程度平均路径长度网络中任意两节点间最短路径的平均值三种经典网络模型的对比如下网络类型度分布特征集聚系数平均路径长度ER随机网络泊松分布低较短WS小世界网络近似均匀高很短BA无标度网络幂律分布较低很短1.2 SIS传播模型原理SIS模型将人群分为两类易感者(S)可能被感染的健康个体感染者(I)具有传染能力的患病个体模型动力学由两个参数决定感染率(β)易感者与感染者接触后被感染的概率恢复率(γ)感染者恢复为易感者的概率关键阈值R0基本再生数的计算公式R0 β/γ * k²/k其中 为网络平均度k²为度的二阶矩。当R01时疾病将在网络中持续传播。2. Python实现框架搭建2.1 网络生成与可视化我们使用NetworkX库创建三种网络结构import networkx as nx import matplotlib.pyplot as plt def generate_networks(N500): # ER随机网络 (每个边存在的概率p0.02) ER nx.erdos_renyi_graph(N, 0.02) # WS小世界网络 (每个节点连接k4个邻居重连概率p0.1) WS nx.watts_strogatz_graph(N, 4, 0.1) # BA无标度网络 (每次加入m2条边) BA nx.barabasi_albert_graph(N, 2) return ER, WS, BA def plot_degree_distribution(networks): fig, axs plt.subplots(1, 3, figsize(15,4)) for i, (name, G) in enumerate(zip([ER,WS,BA], networks)): degrees [d for n, d in G.degree()] axs[i].hist(degrees, binsrange(min(degrees), max(degrees)1)) axs[i].set_title(f{name}网络度分布) axs[i].set_xlabel(度) axs[i].set_ylabel(频数) plt.show()2.2 SIS模型核心实现import numpy as np from tqdm import tqdm def sis_simulation(G, beta0.3, gamma0.1, steps100): N len(G) # 初始化随机选择5%的节点作为初始感染者 status np.zeros(N, dtypeint) initial_infected np.random.choice(N, sizeint(0.05*N), replaceFalse) status[initial_infected] 1 # 存储每步感染密度 infection_rates [] for _ in range(steps): new_status status.copy() # 感染者恢复过程 infected np.where(status 1)[0] recovery np.random.random(len(infected)) gamma new_status[infected[recovery]] 0 # 易感者感染过程 susceptible np.where(status 0)[0] for node in susceptible: neighbors list(G.neighbors(node)) infected_neighbors sum(status[n] for n in neighbors) if np.random.random() 1 - (1 - beta)**infected_neighbors: new_status[node] 1 status new_status infection_rates.append(np.mean(status)) return infection_rates3. 网络结构对传播的影响分析3.1 传播动力学对比我们固定β0.3γ0.1在不同网络上运行SIS模拟def compare_networks(): ER, WS, BA generate_networks() results {} for name, G in zip([ER,WS,BA], [ER,WS,BA]): # 计算网络统计特征 avg_degree sum(dict(G.degree()).values())/len(G) k_squared sum([d**2 for n,d in G.degree()])/len(G) R0 (0.3/0.1) * (k_squared/avg_degree) # 运行模拟 infection sis_simulation(G) results[name] { infection: infection, R0: R0, steady_state: np.mean(infection[-20:]) } return results典型模拟结果可能显示ER网络中等传播速度最终感染密度适中WS网络快速传播较高稳态感染密度BA网络极快初始传播但因超级传播者存在呈现两极分化3.2 R0阈值与相变分析通过扫描β值观察相变行为def phase_transition_analysis(): G nx.barabasi_albert_graph(1000, 2) beta_range np.linspace(0.01, 0.5, 20) steady_states [] for beta in beta_range: infection sis_simulation(G, betabeta, steps200) steady_states.append(np.mean(infection[-50:])) plt.plot(beta_range, steady_states, o-) plt.xlabel(感染率β) plt.ylabel(稳态感染密度) plt.title(BA网络上的相变行为) plt.show()关键发现无标度网络的传播阈值理论上趋近于零这意味着即使很小的感染率也可能导致疾病在BA网络中持续传播。4. 高级分析与优化技巧4.1 基于度分组的平均场理论对于异质网络如BA网络我们可以按节点度分组分析def degree_based_analysis(G, beta0.3, gamma0.1): degrees dict(G.degree()) k_values sorted(set(degrees.values())) rho_k {k:0.05 for k in k_values} # 初始感染密度 for _ in range(100): # 迭代步数 theta sum(k*rho_k[k] for k in rho_k)/sum(k for k in rho_k) new_rho_k {} for k in rho_k: infection_prob 1 - (1 - beta*theta)**k new_rho_k[k] rho_k[k] (-gamma*rho_k[k] (1-rho_k[k])*infection_prob) rho_k new_rho_k return rho_k4.2 并行化加速模拟对于大规模网络可使用多进程加速from multiprocessing import Pool def parallel_sis(args): G, beta, gamma args return sis_simulation(G, beta, gamma) def run_parallel_simulations(networks, params_list): with Pool() as pool: args [(networks, beta, gamma) for beta, gamma in params_list] results pool.map(parallel_sis, args) return results5. 实际应用与扩展方向5.1 关键节点识别通过计算不同节点的传播影响力优化防控策略def identify_superspreaders(G): betweenness nx.betweenness_centrality(G) degree dict(G.degree()) # 综合度中心性和介数中心性 ranked_nodes sorted(G.nodes(), keylambda x: degree[x]*betweenness[x], reverseTrue) return ranked_nodes[:10] # 返回前10个关键节点5.2 模型扩展建议SEIR模型增加潜伏期状态时变网络考虑动态连接模式多层网络分析跨层传播机制干预策略模拟隔离、疫苗接种效果# 示例加入免疫节点的SEIR模型框架 class SEIR_Model: def __init__(self, G): self.G G self.status np.zeros(len(G)) # 0:S, 1:E, 2:I, 3:R self.time_in_state np.zeros(len(G)) def step(self, beta, gamma, sigma): # 实现状态转移逻辑 pass结论通过本文的Python实现我们直观展示了网络拓扑结构如何显著影响疾病传播动力学。BA无标度网络中的超级传播者现象、WS小世界网络的快速传播特性都揭示了网络科学在流行病研究中的重要性。这些技术同样适用于社交网络信息传播、基础设施网络故障扩散等场景的分析。