首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在文件中保存和恢复代理品种?

如何在文件中保存和恢复代理品种?
EN

Stack Overflow用户
提问于 2014-08-23 04:29:10
回答 1查看 61关注 0票数 1

我想在一个文件中保存和恢复一组乌龟。我有这样的东西:

代码语言:javascript
复制
breed [squares square]
breed [circles circle]

squares-own [side-length]
circles-own [radius]

to save-agents
  file-open "test"

  file-write count turtles 
  ask turtles [
    file-write xcor
    file-write ycor
    file-write breed
  ]
  ask squares [
    file-write side-length
  ]
  ask circles [
    file-write radius
  ]

  file-close
end

to restore-agents
  file-open "test"

  let n file-read

  crt n

  ask turtles [
    set xcor file-read
    set ycor file-read
    set breed file-read  ;; Right here I get an error "Expected a constant. (line number 1,
  ]                      ;; character x) error while turtle y running FILE-READ"

  ask squares [
    set side-length file-read
  ] 
  ask circles [
    set radius file-read
  ]

查看该文件,我看到血型存储为不带引号的字符串。我尝试以什么方式读取breed变量并不重要;我只是手动地遍历一堆file-read语句就会得到一个错误。

我想我可以有意地将该品种编码为一个字符串,然后使用一大堆嵌套的ifelse块(yuk)对其进行解释。但是看起来NetLogo编写breed变量的方式与编写其他常量(如truefalse )的方式相同。这是一个NetLogo错误吗?有没有(优雅的)变通方法?

在进一步的思考中,我可以单独计算和存储每种代理,这样当我去恢复时,我可以create squares number-of-squares,等等,但我真的希望不必以这种方式处理每一种可能的品种。有什么建议吗?

谢谢,

格伦

EN

回答 1

Stack Overflow用户

发布于 2014-08-23 09:19:39

runresult原语可以在这方面为您提供帮助:它允许运行存储在字符串中的代码。

如果您使用以下命令保存您的品种

代码语言:javascript
复制
file-write (word breed)

为了确保NetLogo用引号括起来,您可以在以后恢复它,如下所示:

代码语言:javascript
复制
let breed-as-string file-read
set breed runresult breed-as-string

还有其他可能的方法来拯救和恢复海龟:

  • export-worldimport-world在这里可能有些夸张,因为它们可以保存和恢复NetLogo世界的整个状态,但它们在其他circomstances.
  • The nw:save-graphml中可能很有用,来自NW extensionnw:load-graphml也可以用于此目的。它们的主要目的是处理网络(即海龟和链接),但如果你只有海龟需要保存和恢复,它们不会抱怨。

编辑:

下面是使用runresult的完整示例

代码语言:javascript
复制
breed [squares square]
breed [circles circle]

to save-and-restore-breeds

  clear-all
  create-squares 2
  create-circles 2

  if file-exists? "test" [ file-delete "test" ]

  ; save agents:
  file-open "test"
  file-write count turtles
  ask turtles [ file-write (word breed) ]
  file-close

  clear-all

  ; restore agents:
  file-open "test"
  let n file-read
  crt n [
    let breed-as-string file-read
    set breed runresult breed-as-string
  ]
  file-close

  show [ breed ] of turtles

end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25455108

复制
相关文章

相似问题

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