You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于SIR模型实现复杂网络中的节点影响力排序?

基于SIR模型的复杂网络节点感染能力排序方案

核心逻辑

要衡量节点的感染能力,核心是以每个节点作为唯一初始感染源,重复运行SIR模拟,统计每次模拟中被感染的总节点数,取平均值作为该节点的感染能力得分,最终按得分从高到低排序。由于SIR过程存在随机性,多次模拟取平均能避免单次结果的偶然性。


具体实现步骤&代码示例

以下用Python结合networkx(网络构建)和ndlib(SIR模拟)实现,可直接适配你的研究场景:

1. 依赖安装

pip install networkx ndlib numpy

2. 完整代码

import networkx as nx
import ndlib.models.epidemics as ep
import ndlib.models.ModelConfig as mc
import numpy as np

# 替换为你的实际网络(可以是导入的真实网络数据)
G = nx.barabasi_albert_graph(100, 2)  # 示例:100节点的BA无标度网络

# 配置SIR模型核心参数
model = ep.SIRModel(G)
config = mc.Configuration()
config.add_model_parameter('beta', 0.1)  # 感染概率
config.add_model_parameter('gamma', 0.05)  # 恢复概率
model.set_initial_status(config)

# 单次SIR模拟:返回初始节点引发的累计感染节点数
def run_single_simulation(initial_node):
    model.reset()
    # 初始化状态:仅目标节点为感染态(1=感染,0=易感)
    initial_status = {n: 0 for n in G.nodes()}
    initial_status[initial_node] = 1
    model.set_initial_status(initial_status)
    
    # 运行模拟直到无感染节点
    iterations = model.iteration_bunch(100, node_status=True)
    # 统计所有曾被感染的节点
    total_infected = set()
    for it in iterations:
        total_infected.update(it['status'].keys())
    return len(total_infected)

# 遍历所有节点,多次模拟取平均得分
num_sim_runs = 20  # 模拟次数,建议根据计算资源调整(次数越多结果越稳定)
node_infection_scores = {}
for node in G.nodes():
    # 多次模拟取平均
    simulation_results = [run_single_simulation(node) for _ in range(num_sim_runs)]
    node_infection_scores[node] = np.mean(simulation_results)

# 按感染能力得分降序排序
sorted_nodes = sorted(node_infection_scores.items(), key=lambda x: x[1], reverse=True)

# 输出排名结果
print("节点感染能力排名(节点ID: 平均累计感染节点数):")
for rank, (node, score) in enumerate(sorted_nodes, 1):
    print(f"{rank}. 节点{node}: {score:.2f}")

关键注意事项

  • 模拟次数选择:SIR是随机过程,单次模拟结果波动大,建议根据网络规模选择20-100次模拟,平衡结果稳定性和计算效率。
  • 参数适配:beta(感染率)和gamma(恢复率)需根据你的研究场景调整,不同参数组合会直接影响节点的感染能力排名。
  • 大规模网络优化:如果节点数过万,直接遍历模拟会很慢,可采用并行计算(比如multiprocessing库)或近似方法(如基于节点度的启发式预筛选,只对高潜力节点做完整模拟)。
  • 感染规模定义:代码中统计的是累计感染节点数(整个传播周期中所有被感染过的节点),如果需要统计最终时刻的感染节点数,可修改为取最后一次迭代的感染节点数量。

内容的提问来源于stack exchange,提问作者Orca

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 13:02:38