适应局域信息的扩散过程

WS小世界网络

相关代码

program activity_diffusion
  implicit none
  integer, parameter :: n=10000,e=2,space=100,time=30000
  integer :: i,j,k,head,tail,tt,cc,o
  integer :: adj(n*space)=0,degree(n)=0
  real :: r,t,p
  real :: k1,k2,k3,k4,kk
  real :: activity(n)=0,D(n)=0,suma(n)=0
  real :: temp(n)=0,avactivity(n)=0
  
  open(10,file='activity.txt',status='old')

do o=1,20
!****************************************************************
  forall(i=1:n*space)adj(i)=0
  forall(i=1:n)degree(i)=0
!####################generate a WS network#######################
  do i=1,n
    if(i<n)then
      adj(space*(i-1)+1)=i+1
      adj(space*(i+1-1)+3)=i
    else
      adj(space*(i-1)+1)=1
      adj(space*(1-1)+3)=i
    end if
    
    if(i<n-1)then
      adj(space*(i-1)+2)=i+2
      adj(space*(i+2-1)+4)=i
    else
      adj(space*(i-1)+2)=i+2-n
      adj(space*(i+2-n-1)+4)=i
    end if
  end do
  do i=1,n
    degree(i)=4
  end do
  
  p=0.2
  call random_seed
  do i=1,n
    if(degree(i)==1)then
      goto 102
    end if
    do j=1,2
      call random_number(r)
      if(r<p)then
        adj(space*(i-1)+j)=0
101     call random_number(r)
        head=r*n+1
        if(i+j<=n)then
          do k=1,degree(i+j)
            if(adj(space*(i+j-1)+k)==head)then
              goto 101
            end if
          end do
          adj(space*(i+j-1)+degree(i+j)+1)=head
          adj(space*(head-1)+degree(head)+1)=i+j
          degree(head)=degree(head)+1
        else
          do k=1,degree(i+j-n)
            if(adj(space*(i+j-n-1)+k)==head)then
              goto 101
            end if
          end do
          adj(space*(i+j-n-1)+degree(i+j-n)+1)=head
          adj(space*(head-1)+degree(head)+1)=i+j-n
          degree(head)=degree(head)+1   
        end if
      end if
    end do
102 continue
  end do

  do i=1,n
    do j=1,2
      if(adj(space*(i-1)+1)==0)then
        do k=1,degree(i)
          adj(space*(i-1)+k)=adj(space*(i-1)+k+1)
        end do
        degree(i)=degree(i)-1
      end if
    end do
  end do

  
!####################the network is generated####################
!##########################diffusion#############################

  do i=1,n
    call random_number(r)
    activity(i)=r
  end do

  t=0.01
  
  do tt=1,time
    do i=1,n
      cc=0
      suma(i)=0
      D(i)=0
      do k=1,degree(i)
        suma(i)=suma(i)+(activity(adj(space*(i-1)+k))-activity(i))
        if(activity(adj(space*(i-1)+k))-activity(i)>0)then
          cc=cc+1
        end if
          end do
      D(i)=cc/degree(i)
      k1=t*(D(i)*suma(i))
      
      suma(i)=0
      do k=1,degree(i)
        suma(i)=suma(i)+(activity(adj(space*(i-1)+k))-(activity(i)+k1/2))
      end do
      k2=t*(D(i)*suma(i))
      
      suma(i)=0
      do k=1,degree(i)
        suma(i)=suma(i)+(activity(adj(space*(i-1)+k))-(activity(i)+k2/2))
      end do
      k3=t*(D(i)*suma(i))
      
      suma(i)=0
      do k=1,degree(i)
        suma(i)=suma(i)+(activity(adj(space*(i-1)+k))-(activity(i)+k3))
      end do
      k4=t*(D(i)*suma(i))
      
      kk=((k1+k4)/2+k2+k3)/3
      
      activity(i)=activity(i)+kk 
    end do
  end do
!****************************************************************
  do i=1,n
    temp(i)=temp(i)+activity(i)
  end do
  write(*,*)o
end do

  do i=1,n
    avactivity(i)=temp(i)/20
  end do
!###########################[output]#############################
  do i=1,n
    write(10,20) degree(i),avactivity(i)
    write(*,*) degree(i),avactivity(i)
  end do
  
20 format(1x,I5,2x,f15.5)  
  close(10)
  
  stop
end program


BA无标度网络

代码

program activity_diffusion
  implicit none
  integer, parameter :: n=100,space=100,time=30000
  integer :: i,j,k,head,tail1,tail2,tt,cc,o
  integer :: adj(n*space)=0
  real :: r,t,ktotal
  real :: k1,k2,k3,k4,kk
  real :: CDF(0:n)=0,degree(n)=0
  real :: activity(n)=0,D(n)=0,suma(n)=0
  real :: temp(n)=0,avactivity(n)=0
  
  open(10,file='activity.txt',status='old')
!####################generate a BA network#######################
  adj(space*(1-1)+1)=2
  adj(space*(1-1)+2)=3
  adj(space*(2-1)+1)=1
  adj(space*(2-1)+2)=3
  adj(space*(3-1)+1)=1
  adj(space*(3-1)+2)=2
  do i=1,3
    degree(i)=2
    CDF(i)=CDF(i-1)+1/3
  end do
  
  call random_seed
  do head=4,n
    call random_number(r)
    do i=1,head-1
      if(r<=CDF(i))then
        tail1=i
        goto 101
      end if
    end do
101 continue
    adj(space*(head-1)+1)=tail1
    degree(tail1)=degree(tail1)+1
102 call random_number(r)
    do i=1,head-1
      if(r<=CDF(i))then
        tail2=i
        if(tail2==tail1)then
          goto 102
        end if
        goto 103
      end if
    end do
103 continue
    adj(space*(head-1)+2)=tail2
    degree(tail2)=degree(tail2)+1
    degree(head)=2
    do k=1,space
      if(adj(space*(tail1-1)+k)==0)then
        adj(space*(tail1-1)+k)=head
        goto 104
      end if
    end do
104 continue
    do k=1,space
      if(adj(space*(tail2-1)+k)==0)then
        adj(space*(tail2-1)+k)=head
        goto 105
      end if
    end do
105 continue
    ktotal=0
    do i=1,head
      ktotal=ktotal+degree(i)
    end do
    
    do i=1,head
      CDF(i)=CDF(i-1)+degree(i)/ktotal
    end do
  end do

!####################the network is generated####################
!##########################diffusion#############################
do o=1,20
!****************************************************************
  do i=1,n
    call random_number(r)
    activity(i)=r
  end do

  t=0.01
  
  do tt=1,time
    do i=1,n
      cc=0
      suma(i)=0
      D(i)=0
      do k=1,space
        if(adj(space*(i-1)+k)/=0)then
          suma(i)=suma(i)+(activity(adj(space*(i-1)+k))-activity(i))
        end if
        if(activity(adj(space*(i-1)+k))-activity(i)>0)then
          cc=cc+1
        end if
          end do
      D(i)=cc/degree(i)
          k1=t*(D(i)*suma(i))
      
      suma(i)=0
      do k=1,space
        if(adj(space*(i-1)+k)/=0)then
          suma(i)=suma(i)+(activity(adj(space*(i-1)+k))-(activity(i)+k1/2))
        end if
      end do
      k2=t*(D(i)*suma(i))
      
      suma(i)=0
      do k=1,space
        if(adj(space*(i-1)+k)/=0)then
              suma(i)=suma(i)+(activity(adj(space*(i-1)+k))-(activity(i)+k2/2))
        end if
      end do
      k3=t*(D(i)*suma(i))
      
      suma(i)=0
      do k=1,space
        if(adj(space*(i-1)+k)/=0)then
          suma(i)=suma(i)+(activity(adj(space*(i-1)+k))-(activity(i)+k3))
        end if
      end do
      k4=t*(D(i)*suma(i))
      
      kk=((k1+k4)/2+k2+k3)/3
      
      activity(i)=activity(i)+kk 
!    write(*,*)o,tt,activity(i) 
    end do
  end do
!****************************************************************
  do i=1,n
    temp(i)=temp(i)+activity(i)
  end do
  write(*,*)o
end do

  do i=1,n
    avactivity(i)=temp(i)/20
  end do
!###########################[output]#############################
  do i=1,n
    write(10,20) degree(i),avactivity(i)
    write(*,*) degree(i),avactivity(i)
  end do
  
20 format(1x,f15.5,2x,f15.5)  
  close(10)
  
  stop
end program


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,752评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,100评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,244评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,099评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,210评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,307评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,346评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,133评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,546评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,849评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,019评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,702评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,331评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,030评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,260评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,871评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,898评论 2 351

推荐阅读更多精彩内容

  • 迈克尔波特《竞争优势》中提出的概念:价值链条。从价值链条分析提升自身的稀缺性。把总体价值分拆细化为各个环节,特别是...
    LiveFuture阅读 577评论 0 0
  • 你出发飞向南方的麦田 从那之后是衣袖与云彩的距离 秋意深浅 淹没你来时的道路 ...
    一寸水阅读 331评论 0 2
  • 最近,我的一个朋友因患抑郁症自杀去世了。写下这句话的时候,我百度了很久,有没有什么词能够代替这两个字,但是,并没有...
    乖乖猫的毛阅读 528评论 0 51
  • 我的爸爸是这个世界上我最爱的男人,没有之一。 爸爸不算太高,可我到现在都没有超过他,爸爸年轻...
    硕吟阅读 454评论 0 2