如何要求海龟在 NETLOGO 中导入 csv.file 的值
How to ask turtles to import values for a csv.file in NETLOGO
我用这个程序创建了海龟
file-open "C:/Users/.../netlogo.csv"
while [ not file-at-end? ] [
let data csv:from-row file-read-line
create-turtles 1 [
set size 0.1
setxy random-pxcor random-pycor
set codcatasto item 0 data
set set yExp item 1 data
]
]
现在我想要求海龟在每个刻度更改 yExp,从另一个 csv.file 导入数据。我不能复制用 "ask turtles" 替换 "create turtles" 的相同过程,因为海龟的顺序是随机的,并且海龟“0”和我文件的第一行之间没有对应关系。
所以,我试过这个
enter code here
file-open file-open "C:/Users/.../netlogo2.csv"
while [ not file-at-end? ] [
let data csv:from-row file-read-line
foreach sort-on [who] turtles [ ask ?[
set yExp item 2 data
]
]
但是不行。现在对海龟进行了排序,但是对于它们中的每一个,我都得到了文件最后一行的值。
有人可以帮助我吗?
我有一个名为 'data' 的文件夹,用于存储我的输入文件。例如,我有一个名为 "initialvals.csv" 的初始值文件,它看起来像:
A,1
B,2
C,3
D,4
E,5
我有 'vals1.csv'、'vals2.csv' 和 'vals3.csv' 来存储我的 yExp
值,这些值只包含值 1:5 乘以 10、100、和 1000 分别。
所以,要按顺序导入它:
extensions [ csv ]
turtles-own [ codcatasto yExp ]
to setup
ca
crt 5 [
setxy random-pxcor random-pycor
]
let input csv:from-file "data/initialvals.csv"
( foreach ( sort turtles ) input [
[ t dpair ] ->
ask t [
set codcatasto first dpair
set yExp last dpair
]
] )
reset-ticks
end
现在,您可以做或多或少相同的事情,但使用 'vals' csv 文件。在此示例中,我将它们设置为与当前 ticks
值相关联,因此访问的文件的每个刻度都是不同的:
to go
let newfile ( word "data/vals" ( ticks + 1 ) ".csv" )
let newinput csv:from-file newfile
( foreach ( sort turtles ) newinput [
[ t datum ] ->
ask t [
set yExp datum
show ( word codcatasto " " yExp )
]
] )
tick
end
刻度 0 后:
(turtle 0): "A [10]"
(turtle 1): "B [20]"
(turtle 2): "C [30]"
(turtle 3): "D [40]"
(turtle 4): "E [50]"
勾选 1 后:
(turtle 0): "A [100]"
(turtle 1): "B [200]"
(turtle 2): "C [300]"
(turtle 3): "D [400]"
(turtle 4): "E [500]"
勾选 2 后:
(turtle 0): "A [1000]"
(turtle 1): "B [2000]"
(turtle 2): "C [3000]"
(turtle 3): "D [4000]"
(turtle 4): "E [5000]"
显然,如果您的报价比输入文件多,这将停止工作。
我用这个程序创建了海龟
file-open "C:/Users/.../netlogo.csv"
while [ not file-at-end? ] [
let data csv:from-row file-read-line
create-turtles 1 [
set size 0.1
setxy random-pxcor random-pycor
set codcatasto item 0 data
set set yExp item 1 data
]
]
现在我想要求海龟在每个刻度更改 yExp,从另一个 csv.file 导入数据。我不能复制用 "ask turtles" 替换 "create turtles" 的相同过程,因为海龟的顺序是随机的,并且海龟“0”和我文件的第一行之间没有对应关系。 所以,我试过这个
enter code here
file-open file-open "C:/Users/.../netlogo2.csv"
while [ not file-at-end? ] [
let data csv:from-row file-read-line
foreach sort-on [who] turtles [ ask ?[
set yExp item 2 data
]
]
但是不行。现在对海龟进行了排序,但是对于它们中的每一个,我都得到了文件最后一行的值。
有人可以帮助我吗?
我有一个名为 'data' 的文件夹,用于存储我的输入文件。例如,我有一个名为 "initialvals.csv" 的初始值文件,它看起来像:
A,1
B,2
C,3
D,4
E,5
我有 'vals1.csv'、'vals2.csv' 和 'vals3.csv' 来存储我的 yExp
值,这些值只包含值 1:5 乘以 10、100、和 1000 分别。
所以,要按顺序导入它:
extensions [ csv ]
turtles-own [ codcatasto yExp ]
to setup
ca
crt 5 [
setxy random-pxcor random-pycor
]
let input csv:from-file "data/initialvals.csv"
( foreach ( sort turtles ) input [
[ t dpair ] ->
ask t [
set codcatasto first dpair
set yExp last dpair
]
] )
reset-ticks
end
现在,您可以做或多或少相同的事情,但使用 'vals' csv 文件。在此示例中,我将它们设置为与当前 ticks
值相关联,因此访问的文件的每个刻度都是不同的:
to go
let newfile ( word "data/vals" ( ticks + 1 ) ".csv" )
let newinput csv:from-file newfile
( foreach ( sort turtles ) newinput [
[ t datum ] ->
ask t [
set yExp datum
show ( word codcatasto " " yExp )
]
] )
tick
end
刻度 0 后:
(turtle 0): "A [10]"
(turtle 1): "B [20]"
(turtle 2): "C [30]"
(turtle 3): "D [40]"
(turtle 4): "E [50]"
勾选 1 后:
(turtle 0): "A [100]"
(turtle 1): "B [200]"
(turtle 2): "C [300]"
(turtle 3): "D [400]"
(turtle 4): "E [500]"
勾选 2 后:
(turtle 0): "A [1000]"
(turtle 1): "B [2000]"
(turtle 2): "C [3000]"
(turtle 3): "D [4000]"
(turtle 4): "E [5000]"
显然,如果您的报价比输入文件多,这将停止工作。