如何让乌龟在NETLOGO

时间:2018-08-06 16:56:09

标签: csv 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导入数据。我无法重复用“创建乌龟”替换“询问乌龟”的相同过程,因为乌龟的顺序是随机的,并且乌龟“ 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 ] ]

但是它不起作用。现在对乌龟进行了排序,但是对于它们,我都得到了文件最后一行的值。

有人可以帮我吗?

1 个答案:

答案 0 :(得分:1)

我有一个名为“数据”的文件夹,用于存储我的输入文件。例如,我有一个名为“ initialvals.csv”的初始值文件,如下所示:

A,1
B,2
C,3
D,4
E,5

我有'vals1.csv','vals2.csv'和'vals3.csv'来存储我的yExp值,这些值只包含分别乘以10、100和1000的1:5值。

因此,要以有序方式导入它:

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]"

很明显,如果滴答声多于输入文件,这将停止工作。