資源簡介
本資源針對一種邊權重存在重尾分布復雜網絡,改進原本的SIR模型對TopK重要節點進行性能評估。并將傳播過程繪制成可視化圖。本資源使用networkx工具包。
代碼片段和文件信息
import?networkx?as?nx
import?numpy?as?np
import?os.path?as?osp
import?matplotlib.pyplot?as?plt
import?random?
def?spread_model_smooth(DGtopkmax_iter_numinfect_rate=0.8remove_rate=0.2):
????CG?=?DG.to_directed()
????#max_weight?=?max([e[2][‘weight‘]?for?e?in?CG.edges(data=True)])
????N?=?CG.number_of_nodes()
????node_state={node:0?for?node?in?CG}
????nx.set_node_attributes(CG?node_state?“state“)#為節點添加屬性
????for?n?in?topk:
????????CG.node[n][‘state‘]?=?1
????random.seed(150)
????for?e?in?CG.edges():
????????if(CG[e[0]][e[1]][‘weight‘]==1):
????????????CG[e[0]][e[1]][‘prob‘]?=?random.uniform(01)
????????else:
????????????CG[e[0]][e[1]][‘prob‘]?=?1
????
????all_infect_nodes?=?[]#累計受感染節點
????all_infect_nodes.extend(topk)
????all_count_infect?=?[len(all_infect_nodes)]#記錄每一次受感染的節點總數
????
????infected_digraph?=?nx.DiGraph()
????infected_digraph.add_nodes_from(topktime=0)
????
????all_remove_nodes?=?[]#累計治愈節點
????all_count_remove?=?[0]#記錄每一次免疫的總數
????
????count_iter_infect?=?[len(topk)]#記錄每次新增的感染節點數量
????count_iter_remove?=?[0]#記錄每次新增的免疫節點數量
????all_count_suscep?=?[N-len(topk)]#記錄每次易感染節點數量
????for?i?in?range(max_iter_num):
????????new_infect?=?[]
????????new_remove?=?[]
????????#t1?=?‘%s?time‘?%?i?+?‘?%s?nodes‘?%?len(all_infect_nodes)
????????#print(t1)?#?當前有多少個節點被感染
????????for?v?in?all_infect_nodes:
????????????
????????????if?(i!=0?and?random.uniform(01) ????????????????CG.remove_node(v)#該節點具有免疫能力,不再傳播,應該從原始圖中去除
????????????????#all_infect_nodes.remove(v)#治愈之后,將不會出現該節點,節點失效
????????????????#infected_di
評論
共有 條評論