Сохранение координат агента в списке в NetLogo

#netlogo

#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
  

Однако он продолжает выдавать мне ошибку «УСТАНОВИТЬ ожидаемые 2 входа». Кто-нибудь может мне с этим помочь?

Ответ №1:

Похоже, вы неправильно используете xy_list как переменную, так и переменную turtle.

Я не вижу необходимости в процедуре 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