| 查看: 2313 | 回复: 1 | ||
[求助]
SI模型病毒扩散程序问题求助 已有1人参与
|
|
小弟最近在做SI模型下的病毒扩散,因为使用的是图的广度优先原则来进行扩散,即一次只能是一个节点在进行扩散。实际上,每个被感染的节点都会同时向周围扩散,请问如下的代码逻辑该怎么改?为什么出来的结果不是我想要的结果。 %记录以当前节点作为传播源的开始时间 t1=cputime; %按照图的广度优先的原则来进行病毒传播 function [practiceTime,infection]=BFSspreading(A,N,source_infection_node,irate,rrate,susceptible,infection,recover,time_gap,t1,obesever) %初始化队列 %队列头 head=1; %队列尾,开始队列为空,tail==head tail=1; %向头中加入感染源节点 queue(head)=source_infection_node; %队列扩展 .这样保证头在右边,队尾在左边了 head=head+1; %开始按照广度优先搜索顺序向邻居节点传播 %判断队列是否为空 while tail~=head %记录当前已经经过了多少传播结束时间 t2=cputime; if (t2-t1)>time_gap tail=head; end %取队尾节点 i=queue(tail); %如果该节点不在移除列表之中 if isempty(find(recover==i,1)) for j=1:N %如果节点j与当前节点i相连并且节点j不在感染列表和恢复列表中,即节点j与当前节点i相连,并且还没有被感染过 if A(i,j)==1 && isempty(find(infection==j,1)) && isempty(find(recover==j,1)) %以一定的概率向周围传播 infection_random=rand(1); if infection_random < irate %新节点入列 queue(head)=j; %扩展队列 head=head+1; %将新节点j加入感染列表 infection=[infection j]; %从易感染节点列表中删除该节点,设置为-1 [row,col,v] = find(susceptible==j) ; susceptible(col)=-1; susceptible(find(susceptible==-1))=[]; end end end tail=tail+1; end %end if isempty(find(recover==i,1) end %end while end |
» 猜你喜欢
存款400万可以在学校里躺平吗
已经有15人回复
拟解决的关键科学问题还要不要写
已经有6人回复
Materials Today Chemistry审稿周期
已经有6人回复
基金委咋了?2026年的指南还没有出来?
已经有10人回复
基金申报
已经有6人回复
推荐一本书
已经有13人回复
国自然申请面上模板最新2026版出了吗?
已经有17人回复
纳米粒子粒径的测量
已经有8人回复
疑惑?
已经有5人回复
计算机、0854电子信息(085401-058412)调剂
已经有5人回复
2楼2018-08-19 21:30:44











回复此楼