У меня есть агенты, перемещающиеся по ландшафту с различными ресурсами. Скажем, мой агент начинает в центре, а затем движется вокруг ландшафта по изогнутой линии. Я хотел бы каким-то образом сделать набор патчей или другую группу ВСЕХ патчей, которые охватывают область внутри патчей, через которую перемещался агент, имитируя расчет домашнего диапазона. Я не смог концептуально подумать о том, как это сделать, поэтому у меня нет кода для демонстрации, но любая помощь очень ценится.

0
Ale 21 Окт 2019 в 20:40
Можете ли вы определить значение «области внутри патчей, через которую перемещался агент»? Говорим ли мы «только о патчах, через которые проходит агент» или о чем-то более широком, например, о «наименьшей квадратной области, охватывающей все патчи, через которые проходит агент»?
 – 
Nicolas Payette
22 Окт 2019 в 18:11
Да, второй. Эквивалентно вычислению домашнего диапазона животного по точкам его местоположения (если вы знакомы с анализом MCP).
 – 
Ale
22 Окт 2019 в 19:35

1 ответ

Самый эффективный способ, вероятно, просто отслеживать минимальные/максимальные координаты участков, посещаемых черепахами. Вот упрощенный пример:

turtles-own [ min-x max-x min-y max-y ]

to setup
  clear-all
  create-turtles 1
  reset-ticks
end

to go
  ask patches [ set pcolor black ]
  ask turtles [
    rt random 30 lt random 30 fd 1 ; move randomly
    update-min-max
    ask home-range [ set pcolor [ color ] of myself - 2 ]
  ]
  tick
end

to update-min-max ; turtle command
  set min-x min (list min-x pxcor)
  set min-y min (list min-y pycor)
  set max-x max (list max-x pxcor)
  set max-y max (list max-y pycor)
end

to-report home-range ; turtle reporter
  report patches with [
    pxcor >= [ min-x ] of myself and
    pxcor <= [ max-x ] of myself and
    pycor >= [ min-y ] of myself and 
    pycor <= [ max-y ] of myself
  ]
end

Это предполагает, что мир не обертывается.

0
Nicolas Payette 23 Окт 2019 в 13:42
Я думал об этой проблеме. Это даст вам прямоугольник, но не поможет с кривыми (то есть там, где угол обрезан траекторией). Я думаю, что OP на самом деле следует за выпуклым набором (математический термин), ограниченным посещенными точками. Но единственный способ понять, как это сделать, — это создать набор исправлений из всех посещенных исправлений, а затем взять все пары и идентифицировать исправления между ними с помощью черепахи типа сканера. Ужасно неэффективно.
 – 
JenB
23 Окт 2019 в 19:20
В противном случае единственный подход, который я могу придумать, - это сохранить min-pxcor и max-pxcor для каждого значения pycor, а также min-pycor и max-pycor для каждого значения pxcor. Может стол? Затем создайте набор исправлений между парами min/max.
 – 
JenB
23 Окт 2019 в 19:27
ОП согласился с определением «квадратная площадь», но если они предпочитают выпуклую оболочку, есть полная страница алгоритмов в Википедии на выбор: en.wikipedia.org/wiki/Convex_hull_algorithms. Кажется, некоторые из них не так уж сложно реализовать в NetLogo... :-)
 – 
Nicolas Payette
24 Окт 2019 в 12:24
Справедливо. Я интерпретировал молчаливое согласие как «скорее похоже», чем «точно так же».
 – 
JenB
24 Окт 2019 в 18:14