我仍在尝试提取世界上每只海龟所走路径的坐标。例如,我想知道海龟 0 所采取的路径是 patch 00 patch 0 5 patch 0 2 和 patch 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
Run Code Online (Sandbox Code Playgroud)
这里有很多事情需要注意,所以我希望我明白你想要做什么。
首先,请注意,您的代码output仅在所有海龟死后才进入(这实际上是进入的条件之一output:)if n = 0。因此,没有数据导出是正常的:在outputyou中ask turtles,但是当output执行时所有海龟都已经离开了模拟。
然而,菲利普在对该问题的评论中也正确地注意到了一些事情:要求海龟在移动时保存其旅程的坐标似乎是合乎逻辑的,而不是要求它们在模拟结束时这样做。根据当前代码,海龟只是在模拟中移动,并且仅在最后(例如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
Run Code Online (Sandbox Code Playgroud)
die询问它们,你会得到一个错误 - 说需要一个列表,但得到了其他东西。从 NetLogo 词典中您可以看到该原语用于创建具有两个值的列表。如果您想创建包含任何其他数量的值的列表,则必须使用. 这包括您想要创建空列表的情况。为此,我会这样做:outputlputlist(list ...)create-turtles 5 [
setxy random-xcor random-ycor
set mypathx (list)
set mypathy (list)
set mytimer (list)
pen-down
]
Run Code Online (Sandbox Code Playgroud)
现在,mypathx、mypathy和mytimer是该lput过程的合法输入。
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
Run Code Online (Sandbox Code Playgroud)
因此,总的来说,重要的调整是:如果您想将变量视为列表,则将其初始化为列表;要求你的海龟在它们自己的列表变量中保存每一步的坐标;仅在最后,要求他们将列表变量写入输出文件中;在要求海龟输出信息之前不要杀死它们。整合以上所有内容,代码将如下所示:
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
Run Code Online (Sandbox Code Playgroud)
上面代码的最后注释:
pcolor部分,因为对于问题的目的来说似乎没有必要。i,setup但对于问题的目的来说似乎没有必要,所以我也从我的示例代码中删除了它。请小心您的使用方式item:我不知道您想做什么,但是您将其包含在问题中的方式经常会出现运行时错误。