#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