本文介绍了如何将世界上每只海龟走过的路径提取出来,保存到.csv文件中?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我仍在努力提取世界上每一只海龟走过的路径的坐标。例如,我想知道Turtle 0所采用的路径是补丁00补丁0 5补丁0 2和补丁1 4,并将此信息保存在.csv文件中。通过这种方式,我想提取世界上所有海龟所走的路径的坐标。我正在考虑创建一个为我提供此信息的列表,然后保存它。

问题是,我不能为创建的每个海龟创建一个空列表,然后在每次移动之前将当前补丁位置添加到列表中。最后,在.csv中生成此信息的文件

也就是说,在检查海龟时,我看不到该列表,并且在.csv中创建文件时,不会生成该文件。有人能帮我弄一下代码吗?

提前谢谢

turtles-own [ mypathx mypathy mytimer]



to setup
      ca
      reset-ticks
      crt 5
      ask turtles [
        setxy random-xcor random-ycor
    let i [ ]
        pen-down
      ]                 
    end


    to go
      move
      let n count turtles
      if n = 0 and output? = true [output] ;; ouput? is an switch on interface
      if n = 0 [ stop ]
      tick
    end

    to move
      ask turtles [
        rt random 360
        fd 1
        if ticks >= 10
      [         
        die
    ]
    ]
    end



To output
       file-open "test.txt"

   ask turtles [
    set mypathx lput pxcor mypathx
     set mypathy lput pycor mypathy
              let  maxer length mypathx
              let i 0   
              repeat maxer
                    [
                         file-print (word  item i mypathx    " " item i mypathy " " item i mytimer)
                       let  x ( i + 1 )  
                     ]
      ]
  file-close
end

推荐答案

这里有很多事情需要注意,所以我希望我理解了您要做的事情。

  1. 首先,请注意,您的代码仅在所有海龟死亡后才转到output(这实际上是转到outputif n = 0的条件之一)。因此,没有要导出的数据是正常的:在outputYouask turtles中,但是当output被执行时,所有的海龟都已经离开了模拟。

  2. 然而,菲利普在对问题的评论中也正确地注意到了一件事:要求海龟在移动时保存它们旅程的坐标似乎是合乎逻辑的--而不是在模拟结束时要求它们这样做。根据当前的代码,海龟只需在模拟中移动,并且只有在结束时(例如,当output被调用时)才会被要求保存它们的当前位置。最好包括一段代码,要求海龟在每次移动后将它们的位置记录在列表中。为了将这一点与前一点结合起来,我将执行如下操作:

to setup
  clear-all
  reset-ticks
  create-turtles 5 [
    ; I talk about this piece in point 3.
  ]
end

to go
  move
  tick
end

to move
  ask turtles [
    right random 360
    forward 1
    register-coordinates
  ]
end

to register-coordinates
  set mypathx lput pxcor mypathx
  set mypathy lput pycor mypathy
  set mytimer lput ticks mytimer      ; This is what I assumed you want mytimer to do.
end
  1. 另一个问题来了。您不是在启动海龟自己的变量列表。如果您现在运行您的代码片段,什么都不会发生,因为当您要求它们输出时,所有的海龟都已经死了。但是,如果您只是删除die命令,或者如果您要求海龟在它们死前output,您会得到一个错误--说lput期望一个列表,但得到了其他东西。从NetLogo词典中,您可以看到list原语用于创建具有两个值的列表。如果要创建包含任何其他数量的值的列表,则必须使用(list ...)。这包括您想要创建空列表的情况。为此,我将这样做:
create-turtles 5 [
  setxy random-xcor random-ycor
  set mypathx (list)
  set mypathy (list)
  set mytimer (list)
  pen-down
]

现在,mypathxmypathymytimerlput过程的合法输入。

  1. 最后,您可以在模拟的末尾添加output(请注意,与前面的代码示例相比,我是如何更改go的):
to go
  if ticks = 11 [
    ask turtles [output]
    stop
  ]
  move
  tick
end

...

to output
  file-open "test.csv"
  file-print (word who "," mypathx "," mypathy "," mytimer)
  file-close
end

因此,总的来说,重要的调整是:如果您希望将变量作为列表对待,请将变量初始化为列表;要求您的海龟在每一步将它们的坐标保存在它们自己的海龟自己的列表变量中;只有在最后,要求它们在输出文件中写入它们的列表变量;在您要求它们输出信息之前,不要杀死它们。综合以上所有内容,代码将如下所示:

turtles-own [mypathx mypathy mytimer]

to setup
  clear-all
  reset-ticks
  create-turtles 5 [
   setxy random-xcor random-ycor
   set mypathx (list)
   set mypathy (list)
   set mytimer (list)
   pen-down 
  ]
end


to go
  if ticks = 11 [
    ask turtles [output]
    stop
  ]
  move
  tick
end


to move
  ask turtles [
   right random 360
   forward 1
   register-coordinates
  ]
end


to register-coordinates
  set mypathx lput pxcor mypathx
  set mypathy lput pycor mypathy
  set mytimer lput ticks mytimer
end


to output
  file-open "test.csv"
  file-print (word who "," mypathx "," mypathy "," mytimer)
  file-close
end

上述代码的最后说明:

  1. 我不确定您希望输出的确切格式,但此示例代码可以很好地将列表保存在.csv文件中-因此您可以从那里获取它,并根据需要进行调整。
  2. 我删除了pcolor部分,因为对于问题而言,它似乎不必要。
  3. 我不确定您希望isetup中做什么,但对于这个问题来说似乎没有必要,所以我也从我的样例代码中删除了它。请注意如何使用item:我不知道您想要做什么,但您在问题中包含它的方式通常会导致运行时错误。
  4. 我根据问题的标题创建了.csv,而不是根据您提供的代码创建了.txt。

这篇关于如何将世界上每只海龟走过的路径提取出来,保存到.csv文件中?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

11-03 13:25