首页 > 解决方案 > 使用 Netlogo 进行网络建模

问题描述

我是使用 NetLogo 的新手,所以我希望你能帮助我处理这段代码。我想建立一个包含两个子网 A 和 B 的网络,其中 A 有N节点,Bbeta*N节点,其中beta=0.5. 每个网络都应该用五个完全连接的节点进行初始化。我需要一次添加一个新节点,假设每个节点都有固定的出度 k。一旦一个新节点i进入网络,它就会链接到一个随机选择的目标节点j。其余的 k-1 个节点应选择如下: 以概率pi应链接到 的随机节点j;与概率1-pi应该连接到 A 中的另一个随机选择的节点。另一方面,B 中的节点应该以概率链接(有向链接)到 A 中的每个节点P. P可以在 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 中构建这样的网络。

非常感谢

标签: netlogosocial-networking

解决方案


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

更新使一个节点添加每个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
  • 您必须在数学运算符周围留出空格(否则 NetLogo 会认为它是名称的一部分)

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

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

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


推荐阅读