我正在进行一个模拟,涉及随机、无向、时态网络(即链路状态以一定概率分布逐步变化的复杂网络)上的SI流行病传播(https://institutefordiseasemodeling.github.io/Documentation/general/model-si.html,但具有离散时间)。初始条件只施加一个受感染的节点。 我把网络模拟成一个形状为(T,N,N)的小数组,我的想法是把感染的发展也模拟成一个数组,比如说一个(T,N)数组,每次关联感染状态{0,1}。 我对传染病模拟的持续时间一点也不满意,因为它需要太多的时间,这是一个大问题,因为它应该重复上百次,以便在同一网络的不同实现上产生静态相关的结果。如果一个可支持的节点链接到一个受感染的节点,则会发生感染,其概率取决于链接持续时间,显然取决于感染率,根据指数分布:从均匀分布中选择一个0到1的数字,如果它低于与链接持续时间相关的概率,则会发生感染。这是模拟的一部分,即使听起来效率不高,也不能改变。我强调每一个I节点每次可以感染超过一个S。 我贴出了感染的代码,希望它是清楚的。我尝试了许多不同的解决方案,但我找不到比这个更快的。 你能换点东西吗?你知道吗
for t in range(1,T):
if len(infecteds) == N:
break #infection is complete
susceptibles = {node for node in range(N) if states_sequence[t-1][node]==0 and neighbourhood(tempnet[t-1],node).intersection(infecteds) != {} }
for s in susceptibles.copy(): #copy avoids rising an error when the iteration set changes
for i in neighbourhood(tempnet[t-1],s).intersection(infecteds).copy():
if probabilities[contact_lasting(tempnet,states_sequence,t-1,i,s)]>extractions[t-1,s]: #rand extraction
set_infected(s,t) #if successful, change the state of the node, at next t
infecteds.add(s)
break
目前没有回答
相关问题 更多 >
编程相关推荐