使用 Netlogo 进行网络建模

Network modelling using Netlogo

我是 NetLogo 的新手,所以我希望你能帮助我完成这段代码。 我想构建一个包含两个子网 A 和 B 的网络,其中 A 有 N 个节点,B beta*N 个节点,其中 beta=0.5。每个网络都应该用五个完全连接的节点初始化。我需要一次添加一个新节点,假设每个节点都有固定的出度 k。一旦新节点 i 进入网络,它将 link 发送到随机选择的目标节点 j。其余剩余的k-1个节点应按如下方式选择:以p的概率,i应linked到j个随机节点;概率 1-pi 应该连接到 A 中另一个随机选择的节点。 另一方面,B 中的节点应该 linked(定向 link)到 A 中的每个节点,概率为 PP 可以从 0 到 1。

我已经尝试过分别用 N 和 alpha*N 节点构建两个网络。但是,正如我所说的,我是使用 NetLogo 的新手,我发现构建这个网络应该很容易用不同的编程语言构建这个网络,我会更熟悉。

; Global variables

breed [agents agent]
breed [bagents bagent]


to setup

  clear-all

  setup-agent
  setup-bagent

end

; Defining agents

to setup-agent
  set-default-shape turtles "person" ; agent shape
  create-agents n-of-agents ; # of agents
  [set size 2 ; agent size
    set color white
   setxy (random-xcor) (random-ycor)
  ]

  ; Random Network
  ask agents [create-link-with one-of other agents with [not link-neighbor? myself]
    ask links [set color white]

  ]

end

; Defining bagents

to setup-bagent
  set-default-shape turtles "circle" ; bagents shape
  set beta=0.5
  let n-of-bagents beta*n-of-agents
  create-bagents beta*n-of-agents ; # of bagents
  [set size 2 ; bagent size
    set color red
   setxy (random-xcor) (random-ycor)

  ; Network
  ask bagents [create-link-with one-of other bagents with [not link-neighbor? myself]
    ask links [set color yellow]
  ]

end


to go

end

我希望你能帮助我理解如何在 NetLogo 中建立这样一个网络。

非常感谢

这就是你说的。我不认为这实际上是您想要的,因为您的算法要好得多但仍然有些困惑。但希望这能让你走上正确的道路。

更新使一个节点添加每个 tick

globals
[ beta
  prob
  k
]

breed [A-agents A-agent]
breed [B-agents B-agent]

to setup
  clear-all
  set beta 0.5
  set prob 0.2
  set k 3
  setup-A-seed
  setup-B-seed
  reset-ticks
end

to go
  add-A-node
  if random-float 1 < beta [add-B-node]
  tick
end

; Defining A seed network
to setup-A-seed
  create-A-agents 5
  [ set shape "person"
    set size 2
    set color white
    setxy random-xcor random-ycor
  ]
  ask A-agents
  [ create-links-to other A-agents
    [ set color white ]
  ]
end

; Defining B seed network
to setup-B-seed
  create-B-agents 5
  [ set shape "circle"
    set size 2
    set color red
    setxy random-xcor random-ycor
  ]
  ask B-agents
  [ create-links-to other B-agents
    [ set color yellow ]
  ]
end

to add-A-node
  create-A-agents 1
  [ set shape "person"
    set size 2
    set color white
    setxy random-xcor random-ycor

    let target one-of other A-agents ; target is j in description
    create-link-to target
    repeat k - 1
    [ let candidates (other [link-neighbors] of target) with [not link-neighbor? myself]
      ifelse random-float 1 < prob or not any? candidates
      [ create-link-to one-of other A-agents with [not link-neighbor? myself]
        [ set color white ]
      ]
      [ create-link-to one-of candidates
        [ set color white ]
      ]
    ]
  ]
end

to add-B-node
  create-B-agents 1
  [ set shape "circle"
    set size 2
    set color red
    setxy random-xcor random-ycor

    let thisB self
    ask A-agents
    [ if random-float 1 < prob
      [ create-link-from thisB
        [ set color yellow
        ]
      ]
    ]
  ]
end

我在您的代码中注意到的一些 NetLogo 问题:

  • NetLogo 不为 set
  • 使用 =
  • 数学运算符周围必须有 space(否则 NetLogo 会认为它是名称的一部分)

您在算法中需要考虑的一些事项:

  • 如果所有 B 都以固定概率连接到每个 A,为什么会有初始 B 网络?
  • 如果选择的A没有任何边可以跟随怎么办?

作为一般建议,不要尝试将这么复杂的东西写成一篇文章。使用 5 个完全连接的节点创建种子网络。让那个工作。然后做网络 A 并使其工作。然后引入 B。这种迭代构建对所有编程语言都很重要。在使用新语言时尤其重要,这样您一次只需调试一两个错误,您就知道错误在哪里。