使用 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-p
,i
应该连接到 A 中另一个随机选择的节点。
另一方面,B 中的节点应该 linked(定向 link)到 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 中建立这样一个网络。
非常感谢
这就是你说的。我不认为这实际上是您想要的,因为您的算法要好得多但仍然有些困惑。但希望这能让你走上正确的道路。
更新使一个节点添加每个 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。这种迭代构建对所有编程语言都很重要。在使用新语言时尤其重要,这样您一次只需调试一两个错误,您就知道错误在哪里。
我是 NetLogo 的新手,所以我希望你能帮助我完成这段代码。
我想构建一个包含两个子网 A 和 B 的网络,其中 A 有 N
个节点,B beta*N
个节点,其中 beta=0.5
。每个网络都应该用五个完全连接的节点初始化。我需要一次添加一个新节点,假设每个节点都有固定的出度 k。一旦新节点 i
进入网络,它将 link 发送到随机选择的目标节点 j
。其余剩余的k-1个节点应按如下方式选择:以p
的概率,i
应linked到j
个随机节点;概率 1-p
,i
应该连接到 A 中另一个随机选择的节点。
另一方面,B 中的节点应该 linked(定向 link)到 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 中建立这样一个网络。
非常感谢
这就是你说的。我不认为这实际上是您想要的,因为您的算法要好得多但仍然有些困惑。但希望这能让你走上正确的道路。
更新使一个节点添加每个 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。这种迭代构建对所有编程语言都很重要。在使用新语言时尤其重要,这样您一次只需调试一两个错误,您就知道错误在哪里。