Netlogo 如何读入文件,运行模拟,然后读入下一个文件并重复模拟

Netlogo 如何读入文件,运行模拟,然后读入下一个文件并重复模拟,netlogo,Netlogo,对于下面的代码,我正在尝试串行读取在r中创建的.txt文件,并将包含Netlogo和r脚本的工作目录输出到Netlogo中。这些文件本质上是ascii网格文件,其编号指定给面片,以便通过根据文本文件网格单元中的编号为面片着色来生成风景。NetLogo代码通过一个简单的设置按钮执行此操作 patches-own [ landcover ] to setup ; procedure to reset netlogo interface once setup button is pressed

对于下面的代码,我正在尝试串行读取在r中创建的.txt文件,并将包含Netlogo和r脚本的工作目录输出到Netlogo中。这些文件本质上是ascii网格文件,其编号指定给面片,以便通过根据文本文件网格单元中的编号为面片着色来生成风景。NetLogo代码通过一个简单的设置按钮执行此操作

patches-own [
  landcover
]

to setup ; procedure to reset netlogo interface once setup button is pressed after one run of various code procedures
  ca ; clears the world
  resize-world 0 600 -600 0
  generate-landscape
  reset-ticks
end

to generate-landscape
  file-open "landscape.txt"
  foreach sort patches [
  the-patch ->
  ask the-patch [ ; read a data element into a patch variable
      set landcover file-read ; color the patch accordingly
      if (landcover = 1) [
        set pcolor green
          ]
      if (landcover = 0.5) [
        set pcolor orange
          ]
      if (landcover = 0) [
        set pcolor grey
          ]
        ]
      ]
   file-close
end

我的问题是,如果我在工作目录中有多个这样的ascii grid.txt文件,每个文件代表一个新的/不同的环境,我想将它们读入NetLogo,以便一次执行一个模拟,那该怎么办?有没有一种好的、有效的方法/代码可以做到这一点?

如果您有一个通用的文件名,例如terrain1.asc、terrain2.asc等,您可以使用foreach进行迭代,这可能是最简单的。否则,您可以使用r扩展,如下所示:

extensions [r csv]

globals [ list-of-file-names ]

to setup
  ca
  r:eval "x <- list.files('absolute_folder_path_here')" 
  set list-of-file-names r:get "x"
  reset-ticks
end

to go 
  foreach list-of-file-names [
    fname ->
    let fpath word "absolute_folder_path_here" fname
    print csv:from-file fpath
  ]
end
编辑:

从布莱恩·海德这里偷东西——如果他给出这个答案,我会把我的拿走

如果您想使用BehaviorSpace(假设有一个简单的命名约定会容易得多),您可以进行如下设置:

extensions [r csv]

globals [ list-of-file-names ]

to setup
  ca
  r:eval "x <- list.files('absolute_folder_path_here')" 
  set list-of-file-names r:get "x"
  reset-ticks
end

to go 
  foreach list-of-file-names [
    fname ->
    let fpath word "absolute_folder_path_here" fname
    print csv:from-file fpath
  ]
end
扩展[r csv]

globals [ 
  list-of-file-names 
  filename
]

to setup
  ca
  set filename ( word "landscape" n ".txt" )
  reset-ticks
end
使用这样的小部件:

extensions [r csv]

globals [ list-of-file-names ]

to setup
  ca
  r:eval "x <- list.files('absolute_folder_path_here')" 
  set list-of-file-names r:get "x"
  reset-ticks
end

to go 
  foreach list-of-file-names [
    fname ->
    let fpath word "absolute_folder_path_here" fname
    print csv:from-file fpath
  ]
end
像这样的实验:

extensions [r csv]

globals [ list-of-file-names ]

to setup
  ca
  r:eval "x <- list.files('absolute_folder_path_here')" 
  set list-of-file-names r:get "x"
  reset-ticks
end

to go 
  foreach list-of-file-names [
    fname ->
    let fpath word "absolute_folder_path_here" fname
    print csv:from-file fpath
  ]
end
要获得如下输出:

extensions [r csv]

globals [ list-of-file-names ]

to setup
  ca
  r:eval "x <- list.files('absolute_folder_path_here')" 
  set list-of-file-names r:get "x"
  reset-ticks
end

to go 
  foreach list-of-file-names [
    fname ->
    let fpath word "absolute_folder_path_here" fname
    print csv:from-file fpath
  ]
end

这表明,对于每次运行,都会生成不同的文件名。

是否要在BehaviorSpace中运行此实验序列?做那种事太好了。你也可以不做。你更喜欢哪一种?@BryanHead是的,我想在行为空间中进行这一系列实验,但我也想知道没有它我怎么办。然而,我最感兴趣的是如何将多个文件从我的目录中连续读取到NetLogo中,这样NetLogo就可以一个接一个地遍历我目录中的所有.txt文件,在继续下一个操作之前对NetLogo中的每个on进行模拟。。。如果您有任何想法,我们将不胜感激……@BryanHead很想知道您的想法……卢克C几乎用一些细微的文体差异来表达我的想法。如果您的用例中有任何内容未涵盖,请告诉我。@BryanHead感谢您的签入。我认为Lukes的回答是有效的——其他地方的细节。如果你发布你的答案是为了注意风格差异,那就太好了。NetLogo天才。你可能不记得前一段时间在现场会议上帮我解决了另一个问题,但永远感激。长时间!谢谢你提供的解决方案,但我觉得有点困惑。考虑到go过程的编写方式,我如何将fpath的结果链接到我的generate scanner过程,该过程使用网格文件的内容生成一个风景,如我的问题所示。我希望从一个文件生成一个景观,用其他程序进行模拟,然后继续下一个文件,用其他程序进行模拟,等等……我也想知道我是否使用R来制作我的景观,例如包NLMR,有没有一种方法可以使用NetLogo中的r扩展名将风景直接传输到NetLogo,而不是将文件从r保存到目录中,然后让NetLogo将其拾取?@nigus21-我当然不知道genius,但我确实记得!我也试着回应你最近的请求。关于这个例子-我知道我在这里说的是非常简单的,但是没有你的文件等,我不想去具体的,因为我可能会弄错。您需要对其进行设置,以便在foreach中,您的模型被重置为其基本状态,然后加载新数据,然后模型运行-我添加了一个框架来实现这一点。@nigus21-至于您的第二个问题-我看不出您有什么理由不能进行这种数据管理,但这将取决于NLMR包的实际输出是什么样子的-如果NetLogo无法理解,则可能更容易导出。谢谢。我想知道我们是否可以设立一个现场会议,还有一些关于netlogo中基于补丁的中性景观模型生成的问题。构建了一些代码,想要添加一些功能,并想知道您的想法可能是什么。如果不是的话,那很好,但我愿意讨论作为激励的薪酬问题。