将代理程序坐标存储在NetLogo的列表中

时间:2016-10-23 13:11:43

标签: netlogo

我正在尝试创建一个简单的模拟代理随机移动但避免某些障碍。我希望他们存储他们去过的地方的坐标,这样他们就不会再去那里了。这是我到目前为止的一部分:

to move-agent

  let move random 3
  if (move = 0) []
  if (move = 1)[ left-turn ]
  if (move = 2)[ right-turn ]

  set xint int xcor  ;;here i'm storing the coordinates as integers
  set yint int ycor

  set xylist (xint) (yint)

  go-forward

end

to xy_list
  set xy_list []
  set xy_list fput 0 xy_list ;;populating new list with 0
end

然而,它一直给我一个“SET预期2输入”错误。任何人都可以帮我这个吗?

1 个答案:

答案 0 :(得分:3)

看起来你错误地使用xy_list作为变量和乌龟变量。

我认为不需要xy_list过程 - 将其保存为turtle变量。确保xy_list在海龟自己的列表中:

turtles-own [xy_list]

创建乌龟时将其初始化为空列表。例如:

crt 1 [set xy_list []]

当乌龟移动时,您可以将其当前位置添加为xcor,ycor列表:

set xy_list fput (list int xcor int ycor) xy_list

然后,您需要在移动之前检查列表中是否已存在该坐标。

但是,当您使用整数坐标时,使用补丁集来跟踪乌龟的历史将会容易得多。你可以试试这个:

turtles-own [history]

to setup
  ca
  crt 3 [set history (patch-set patch-here) pd]
end

to go
  ask turtles [
    let candidates neighbors with [not member? self [history] of myself]
    ifelse any? candidates 
      [move-to one-of candidates stamp
       set history (patch-set history patch-here)]
      [die]   
  ]
end