SIR
import random
'''
程序主要功能
输入:网络图邻接矩阵,需要被设置为感染源的节点序列,感染率,免疫率,迭代次数step
输出:被设置为感染源的节点序列的SIR感染情况---每次的迭代结果(I+R)/n
'''
def update_node_status(graph, node, beta, gamma):
"""
更新节点状态
:param graph: 网络图
:param node: 节点序数
:param beta: 感染率
:param gamma: 免疫率
"""
if graph.nodes[node]['status'] == 'I':
p = random.random()
if p < gamma:
graph.nodes[node]['status'] = 'R'
if graph.nodes[node]['status'] == 'S':
neighbors = list(graph.predecessors(node))
for neighbor in neighbors:
if graph.nodes[neighbor]['status'] == 'I':
p = random.random()
if p < beta:
graph.nodes[node]['status'] = 'I'
break
def count_node(graph):
"""
计算当前图内各个状态节点的数目
:param graph: 输入图
:return: 各个状态(S、I、R)的节点数目
"""
s_num, i_num, r_num = 0, 0, 0
for node in graph:
if graph.nodes[node]['status'