一.SIR传播范围
参考代码:Morty Ma
说明:
- 与Morty Ma代码的传播方式不同,换成了从感染节点向邻居传播而不是遍历整个图,把退出循环的条件改成,无感染节点时退出。
- Morty Ma代码每次按G.nodes()的顺序感染节点,且每次先recover,再感染,我换成成了先感染在恢复。(若按回复率1进行实验,某些节点还未传染就已恢复)
- 将代码写为了类
import random
import networkx as nx
import numpy as np
import pandas as pd
import os
'''
程序主要功能
输入:networkx网络图,感染源节点序列,感染率,免疫率,迭代次数step
输出:每次的迭代结果(I+R)/n
'''
class SIR:
def __init__(self,G,source,beta,gamma,step):
self.G = G.copy()
self.beta = beta
self.gamma = gamma
self.step = step
self.n = G.number_of_nodes()
self.nodes = list(G.nodes())
self.I_nubmer = len(source)
self.S_number = self.n - self.I_nubmer
self.R_number = 0
self.I = source
self.R = []
self.S = list(set(self.nodes) - set(self.I))
for i in self.nodes:
self.G.nodes[i]['status'] = 'S'
for i in source:
self.G.nodes[i]['status'] = 'I'
def setG(self,G):
self.G = G.copy()
def setBGS