写在前面:首次发帖,有哪里不对请多指教。
学习论文:基于马氏决策过程的突发传染病防控决策模型_于振宇学习目的:学习研究方法,用python写出来,没有在网上找到网络迭代模型
所用的库:networkx #复杂网络分析库
matplotlib.pyplot #科学绘图库
random
numpy
核心代码:复杂网络迭代模型
[Python] 纯文本查看 复制代码 #一次网络迭代
def iteration(G,β,fl): # G网络对象 β感染率 fl是否采用动态防控标志
ganNum = 0
state = G.nodes(data='state') #获取网络每个节点状态
for i in range(len(G)):
if state[i] == 3: #如果免疫
pass
elif state[i] == 1: #如果感染
ganNum += 1 #统计每轮感染者数量
if G.nodes[i]['qian'] > 0 : #潜伏期没有感染能力
G.nodes[i]['qian'] -= 1
else:
if G.nodes[i]['gan'] > 0 :
G.nodes[i]['gan'] -= 1
neig = list(G.neighbors(i)) #获取节点相邻节点
if fl == 1:
if ((len(neig)*0.05)+1) * 7 <= 10: #若动态防控成本小于隔离成本,采取动态防控
β = 0.05
else: #否则采取隔离措施
β = 0.01
for j in neig:
if G.nodes[j]['state'] == 2: #邻居易感染,则概率β感染
if ran_happen(β) == 1:
G.nodes[j]['state'] = 1
else:
if G.nodes[i]['zhi'] > 0:
G.nodes[i]['zhi'] -= 1
else:
G.nodes[i]['state'] = 3 #治疗期满则免疫
return(G,ganNum)
生成图像:
随机生成的网络图像
ER随机网络,WS小世界网络,BA无标度网络 三种网络的度分布图
左边是三种网络无措施感染人数,右边为采取动态防控措施的感染人数
六种情况每种模拟100次,每次迭代100轮,黑线为平均值
随防控措施有效率变化,防控次数与隔离次数变化图
最后奉上全部代码,以供大家交流讨论。
百度网盘:链接:https://pan.baidu.com/s/1VE5mBxgvZ0V3PqE3yJoyVw
提取码:g32b
解压密码:www.52pojie.cn
|