netlogo - 使用 Netlogo 进行网络建模
问题描述
我是使用 NetLogo 的新手,所以我希望你能帮助我处理这段代码。我想建立一个包含两个子网 A 和 B 的网络,其中 A 有N
节点,Bbeta*N
节点,其中beta=0.5
. 每个网络都应该用五个完全连接的节点进行初始化。我需要一次添加一个新节点,假设每个节点都有固定的出度 k。一旦一个新节点i
进入网络,它就会链接到一个随机选择的目标节点j
。其余的 k-1 个节点应选择如下: 以概率p
,i
应链接到 的随机节点j
;与概率1-p
,i
应该连接到 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 中构建这样的网络。
非常感谢
解决方案
这就是你说的。我认为这实际上并不是您想要的,因为您的算法要好得多,但仍然有些困惑。但希望这能让你走上正确的道路。
更新使一个节点添加每个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。这种迭代构建对于所有编程语言都很重要。使用新语言时尤其重要,这样您一次只需要调试一两个错误并且您知道错误在哪里。
推荐阅读
- docker - 如何覆盖 RabbitMQ docker 镜像的默认用户和密码
- angular - Angular - 使用带通配符的路由器不会重新初始化组件
- c# - 将参数传递给 .NET Core 中的自定义策略
- excel - 如何使用 VB 从 XLSX 创建空格分隔的 TXT 文件?
- javascript - Node.js - 请求大量数据导致 ETIMEDOUT
- google-cloud-storage - 设置自定义 Google Storage Bucket 范围的 max-age 标头
- twilio - Twilio 视频 - 连接语音。无法进行双向通信
- reactjs - 如何让 React 组件从后端接收更新?
- php - 解析 JSON 多级数组并查找多级键值
- javascript - visual studio code html css javascript程序在我的浏览器中没有正确显示