Netlogo:使用来自csv的信息在海龟之间创建特定链接

时间:2017-11-27 19:32:26

标签: csv netlogo agent-based-modeling

我正在使用来自实际事件的匿名数据,在紧急情况下模拟社交行为。以下是我用来创建“人物”的代码部分。海龟。

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

除基于组号的链接外,一切都有效。我尝试了一些不同的变体,没有运气,除了我尝试if group-number <300 [create-links-with other people创建链接但功能无用的地方。我想要做的是设置它,以便每个聚集在一起的人(具有相同的组号)与其他组成员有链接。它特别少于300,因为300或以上的数字适用于单独或其他指定的人。

理论上,我可以在创建海龟之后手工创建链接,但这似乎都浪费时间(我有超过400的数据集),并且喜欢使代码明显不太适用于其他场景的东西。

如何根据CSV中的内容使Netlogo在同一组的成员之间创建链接?

实际上,梦想的答案是:如何让Netlogo根据CSV中的内容在同一组号的成员之间创建不同的链接品种(基于组类型)?

编辑: 最后,我不得不从初始代理设置中分离创建链接。 这是有效的:

 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

1 个答案:

答案 0 :(得分:2)

对于第一部分,也许这可行 - 一旦您的人员被创建,他们的号码被分配到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

对于梦想的答案 - 它可能取决于您需要多少链接品种。据我所知,链接品种必须是预定义的 - 你不能以编程方式生成不同组所需的链接(虽然我不是专家 - 可能有办法)。如果您已定义链接品种,例如:

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。