Netlogo:使用来自 csv 的信息在海龟之间创建特定链接
Netlogo: creating specific links between turtles with information from csv
我正在使用来自真实事件的匿名数据模拟紧急情况下的社会行为。下面是我用来创建 'people' 海龟的代码部分。
to read-people-from-file [filename]
let rows bf csv:from-file filename
foreach rows
[[row] ->
create-people 1
[
set size .46
setxy (item 0 row) (item 1 row)
set age (item 2 row)
set gender (item 3 row)
set visited? (item 4 row)
set group-number (item 6 row)
set group-type (item 7 row)
if group-number < 300 and ((person group-number) = (other group-number))) [create-links-with other person]
]
]
end
除了基于组号的 link 之外,一切正常。我已经尝试了它的几种不同变体,但没有运气,除了我尝试 if group-number <300 [create-links-with other people
的地方,它可以创建 links 但在功能上毫无用处。我想要做的是设置它,以便每个聚在一起的人(具有相同组号的人)与其他组成员都有 link。它特别小于 300,因为 300 及以上的数字是针对单独或其他指定的人。
理论上我可以在创建海龟后手动创建 links,但这似乎既浪费时间(我有一个超过 400 的数据集)又像是使代码显着的东西不太适用于其他场景。
如何让 Netlogo 根据 CSV 中的内容在同一组的成员之间创建 links?
实际上,理想的答案是:我如何让 Netlogo 根据 CSV 中的内容在同一组号的成员之间创建不同种类的 links(基于组类型)?
编辑:
最后,我不得不将创建 links 与初始代理设置分开。
这是有效的方法:
to soclink ;;groups that came together have links based type of relationship
ask people [if group-number < 300
[
if group-type = 1 [ask other people with [group-number = [group-number] of myself] [create-coworker-with myself]]
if group-type = 2 [ask other people with [group-number = [group-number] of myself] [create-friend-with myself]]
if group-type = 3 [ask other people with [group-number = [group-number] of myself] [create-partner-with myself]]
if group-type = 4 [ask other people with [group-number = [group-number] of myself] [create-family-with myself]]
if group-type = 5 [ask other people with [group-number = [group-number] of myself] [create-multiple-with myself]]
show count links]]
end
对于第一部分,也许这会奏效 - 一旦创建了您的人员,并将他们的号码分配给 group-number
:
to group-link
ask people [
let my-group other people with [ group-number = [ group-number] of myself ]
create-links-with my-group
]
end
对于梦想的答案 - 这可能取决于您需要多少种 link。据我所知,link 品种必须是预定义的 - 您不能根据不同群体的需要以编程方式生成 links(尽管我不是专家 - 可能有办法)。如果您已经定义了 link 品种,例如:
undirected-link-breed [ link-as link-a ]
undirected-link-breed [ link-bs link-b ]
现在假设你的 group-type
是 "a" 或 "b",你可以做类似
的事情
to specific-link-breeds
ask people [
let my-group other people with [ group-number = [ group-number] of myself ]
if group-type = "a" [
create-link-as-with my-group
]
if group-type = "b" [
create-link-bs-with my-group
]
]
ask link-as [
set color red
]
ask link-bs [
set color blue
]
end
编辑: 将 turtles
更改为 people
,这是应该的-谢谢 Mattsap。
我正在使用来自真实事件的匿名数据模拟紧急情况下的社会行为。下面是我用来创建 'people' 海龟的代码部分。
to read-people-from-file [filename]
let rows bf csv:from-file filename
foreach rows
[[row] ->
create-people 1
[
set size .46
setxy (item 0 row) (item 1 row)
set age (item 2 row)
set gender (item 3 row)
set visited? (item 4 row)
set group-number (item 6 row)
set group-type (item 7 row)
if group-number < 300 and ((person group-number) = (other group-number))) [create-links-with other person]
]
]
end
除了基于组号的 link 之外,一切正常。我已经尝试了它的几种不同变体,但没有运气,除了我尝试 if group-number <300 [create-links-with other people
的地方,它可以创建 links 但在功能上毫无用处。我想要做的是设置它,以便每个聚在一起的人(具有相同组号的人)与其他组成员都有 link。它特别小于 300,因为 300 及以上的数字是针对单独或其他指定的人。
理论上我可以在创建海龟后手动创建 links,但这似乎既浪费时间(我有一个超过 400 的数据集)又像是使代码显着的东西不太适用于其他场景。
如何让 Netlogo 根据 CSV 中的内容在同一组的成员之间创建 links?
实际上,理想的答案是:我如何让 Netlogo 根据 CSV 中的内容在同一组号的成员之间创建不同种类的 links(基于组类型)?
编辑: 最后,我不得不将创建 links 与初始代理设置分开。 这是有效的方法:
to soclink ;;groups that came together have links based type of relationship
ask people [if group-number < 300
[
if group-type = 1 [ask other people with [group-number = [group-number] of myself] [create-coworker-with myself]]
if group-type = 2 [ask other people with [group-number = [group-number] of myself] [create-friend-with myself]]
if group-type = 3 [ask other people with [group-number = [group-number] of myself] [create-partner-with myself]]
if group-type = 4 [ask other people with [group-number = [group-number] of myself] [create-family-with myself]]
if group-type = 5 [ask other people with [group-number = [group-number] of myself] [create-multiple-with myself]]
show count links]]
end
对于第一部分,也许这会奏效 - 一旦创建了您的人员,并将他们的号码分配给 group-number
:
to group-link
ask people [
let my-group other people with [ group-number = [ group-number] of myself ]
create-links-with my-group
]
end
对于梦想的答案 - 这可能取决于您需要多少种 link。据我所知,link 品种必须是预定义的 - 您不能根据不同群体的需要以编程方式生成 links(尽管我不是专家 - 可能有办法)。如果您已经定义了 link 品种,例如:
undirected-link-breed [ link-as link-a ]
undirected-link-breed [ link-bs link-b ]
现在假设你的 group-type
是 "a" 或 "b",你可以做类似
to specific-link-breeds
ask people [
let my-group other people with [ group-number = [ group-number] of myself ]
if group-type = "a" [
create-link-as-with my-group
]
if group-type = "b" [
create-link-bs-with my-group
]
]
ask link-as [
set color red
]
ask link-bs [
set color blue
]
end
编辑: 将 turtles
更改为 people
,这是应该的-谢谢 Mattsap。