计算网络中节点的SIR值(Python)

1 SIR模型代码

复杂网络研究中的SIR传播模型(Python实现)_Morty的博客-CSDN博客

2 计算每个节点的SIR值

import networkx as nx
import numpy as np
import pandas as pd

# 引入1中的SIR代码,也可直接复制粘贴到本代码中
from SIR import SIR_network

if __name__ == '__main__':
    '''
    数据准备。更换为自己的数据文件!!!
    '''
    adj = np.loadtxt('data/adj.txt', dtype=np.int)  # 网络的邻接矩阵
    graph = nx.from_numpy_matrix(adj)  # 网络图:默认无向图;nx.DiGraph(adj)为创建有向图
    nodes_n = adj.shape[0]  # 行数,节点数
    print('共 ' + str(nodes_n) + ' 个节点!')

    '''
    SIR传播
    '''
    dfSIR = pd.DataFrame(columns=['Id', 'SIR'])
    str_fm = "{0:^5}\t{1:^10}"  # 格式化输出
    print(str_fm.format("Id", "SIR"))
    # 循环所有节点
    for j in range(nodes_n):
        node_id = j + 1  # 索引序列[0~n-1],此处+1转回为Id
        # 由于SIR为概率模型,我们进行多次实验取平均值,实验次数可自行设置
        n = 100  # 实验次数
        sir_list = []
        for k in range(n):
            # SIR参数设置,可自行设置
            beta = 0.1  # 感染率
            gamma = 0.5  # 免疫率
            step = 20  # SIR模型中的感染传播轮次
            # 节点的感染情况
            sir_source = [j]  # 方法输入为数组,将节点强制转换为数组,且SIR实现中使用的为节点索引号[0~n-1],此处使用j索引号
            sir_values = SIR_network(graph, sir_source, beta, gamma, step)
            Fc = sir_values[step - 1]  # 最终的感染范围
            # 由于有概率出现节点直接免疫,传播停止的“异常”情况
            # 我们设置阈值,只统计传播覆盖范围大于1%(0.01)的情况
            if Fc > 0.01:
                sir_list.append(Fc)
        sir = np.mean(sir_list)  # 对100实验的输出结果求均值
        print(str_fm.format(node_id, sir, chr(12288)))
        # 添加至dataframe
        dfSIR = dfSIR.append({
            'Id': int(node_id),
            'SIR': sir
        }, ignore_index=True)
    '''
    输出到文件。更换为自己的数据文件!!!
    '''
    dfSIR.to_csv('result/Node-SIR.csv', index=False)

  • 0
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
SIR模型是一种用于描述疾病传播的经典模型,其S代表易感者、I代表感染者、R代表治愈者或免疫者。在社交网络SIR模型同样适用于描述信息、观点和消息的传播过程。 实现SIR模型传播的Python代码需要考虑以下几个方面: 1.节点模型:使用Python的networkx库或者其他网络模型工具,生成社交网络节点模型。节点模型需要考虑节点之间的联通关系以及它们与观点传播相关的参数,如节点的状态。 2. 观点传播模型:将每个节点的状态定义为S、I或R。S代表易感节点,可以接收新观点,I代表感染节点,可以向其他节点传播观点,R代表已接受观点或免疫的节点。为了模拟疾病传播或观点传播的过程,还需要引入传播速率、潜伏期和恢复期等参数。 3. 传播算法:根据SIR模型,每个节点的状态会随着时间发生变化。可以使用一些常见的传播算法,例如SIS(易感-感染-易感)算法或SIR算法,模拟各个节点的状态转移过程。 4. 仿真实验:在生成节点模型、设计观点传播模型,并完成传播算法之后,可以进行仿真实验来验证模型的有效性。可以使用Python的matplotlib库来可视化仿真实验的结果。 总之,利用Python实现社交网络SIR模型传播,需要设计节点模型、观点传播模型和传播算法,并进行仿真实验。同时需要注意调整参数、优化算法,使得模拟结果更加准确和可信。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值