首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用NetLogo行为空间收集定向链接的“I”?

问如何使用NetLogo行为空间收集定向链接的“I”?
EN

Stack Overflow用户
提问于 2019-10-15 23:55:29
回答 2查看 161关注 0票数 2

我们在NetLogo模型中存储了大量数据作为链接的属性。当我使用行为空间来设计实验和指导数据收集时,我指定了要提取的“链接属性”。但是,在CSV文件中,我看不到链接的id,这是理解数据所必需的。如何在我的结果中收集链接的I?据我所知,没有原语来启用这个命令。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-16 18:08:01

每当您想要使用BehaviorSpace从各个代理(包括链接)中提取信息时,一个很好的方法是使用csv扩展,如以下答案中所述:

https://stackoverflow.com/a/52406247/487946

一般的想法是,我们可以将csv嵌入到csv中,然后在R(或Python或Julia等)中使用read_csv-like函数从我们的BehaviorSpace结果中提取“内部csv”。

在链路的情况下,包括链路两端的who编号以唯一标识它将非常有用。(这是我主张对任何事情都使用who编号的极少数情况之一。)

让我们以这个愚蠢的示例模型为例:

代码语言:javascript
复制
extensions [ csv ]
links-own [ attribute ]

to setup
  clear-all
  create-turtles 3 [
    create-links-with other turtles [
      set attribute random-float 1
    ]
  ]
  reset-ticks
end

to go
  ask links [ set attribute attribute * 0.5 ]
  tick
end

它只是创建了三个在它们之间有链接的海龟,将链接的attribute设置为一个随机数字,并在模型滴答时重复地将该数字减半。

为了生成我们将嵌入到BehaviorSpace结果中的csv,我们编写以下报告程序:

代码语言:javascript
复制
to-report link-attributes-csv
  report csv:to-string
    fput ["who1" "who2" "attribute" ] 
    [ (list [ who ] of end1 [ who ] of end2 attribute) ] of links
end

如果您在运行setup后在命令中心试用它,它将输出如下所示:

代码语言:javascript
复制
observer> setup
observer> print link-attributes-csv
who1,who2,attribute
0,1,0.9409784968740699
1,2,0.9079884204004846
0,2,0.9070292656950991

正如您所看到的,我们有一个整洁的小csv表,其中每一行表示一个特定的链接,由它所连接的乌龟的who编号标识。

由于这个记者报告了一个字符串(并且这个字符串可以包含换行符),我们可以直接在BehaviorSpace实验中使用它:

​

​

运行这个实验(使用"table output")会得到以下输出文件:

代码语言:javascript
复制
"BehaviorSpace results (NetLogo 6.1.1)"
"link-attributes-example.nlogo"
"experiment"
"10/16/2019 11:00:12:495 +0100"
"min-pxcor","max-pxcor","min-pycor","max-pycor"
"-16","16","-16","16"
"[run number]","[step]","link-attributes"
"1","0","who1,who2,attribute
1,2,0.15670083797389645
0,2,0.40055350697928993
0,1,0.34892645306446335"
"2","0","who1,who2,attribute
0,1,0.2831244347856665
1,2,0.27721328746715357
0,2,0.5221352362751627"
"2","1","who1,who2,attribute
0,1,0.14156221739283326
0,2,0.26106761813758134
1,2,0.13860664373357678"
"1","1","who1,who2,attribute
0,2,0.20027675348964497
1,2,0.07835041898694822
0,1,0.17446322653223167"
"1","2","who1,who2,attribute
1,2,0.03917520949347411
0,2,0.10013837674482248
0,1,0.08723161326611584"
"2","2","who1,who2,attribute
1,2,0.06930332186678839
0,1,0.07078110869641663
0,2,0.13053380906879067"

它看起来有点奇怪,所有的换行,但您的数据分析工具应该能够处理。下面是如何使用R和Tidyverse来处理这个问题:

代码语言:javascript
复制
library(tidyverse)
df <-
  read_csv("experiment-table.csv", skip = 6) %>%
  mutate(`link-attributes` = map(`link-attributes`, read_csv)) %>%
  unnest()

purrr::map和tidyr::unnest函数是其中的关键函数。我不会在这里解释它们,但值得去查找它们并熟悉它们。

我们的最终结果如下所示:

代码语言:javascript
复制
# A tibble: 18 x 5
   `[run number]` `[step]`  who1  who2 attribute
            <dbl>    <dbl> <dbl> <dbl>     <dbl>
 1              1        0     1     2    0.157 
 2              1        0     0     2    0.401 
 3              1        0     0     1    0.349 
 4              2        0     0     1    0.283 
 5              2        0     1     2    0.277 
 6              2        0     0     2    0.522 
 7              2        1     0     1    0.142 
 8              2        1     0     2    0.261 
 9              2        1     1     2    0.139 
10              1        1     0     2    0.200 
11              1        1     1     2    0.0784
12              1        1     0     1    0.174 
13              1        2     1     2    0.0392
14              1        2     0     2    0.100 
15              1        2     0     1    0.0872
16              2        2     1     2    0.0693
17              2        2     0     1    0.0708
18              2        2     0     2    0.131 

我希望这能帮到你。

票数 2
EN

Stack Overflow用户

发布于 2019-10-16 00:13:34

与补丁一样,链接由两个数字标识,这两个数字是两端的谁的编号。您可以保存链接的字符串表示(例如,(链接0 1)),也可以将数字提取为列表(或单独提取)。例如,

代码语言:javascript
复制
to test
  ca
  crt 2
  ask turtle 0 [create-link-with turtle 1]
  print link 0 1
  ask link 0 1 [let id sort [who] of both-ends print id] ; a list
  ask link 0 1 [let id sort [who] of both-ends
    print (word item 0 id "-" item 1 id)
  ] ; a string
end
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58398560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档