Списки Netlogo: обнаружение патча в списке с максимальным расстоянием до одного конкретного патча - для каждой черепахи

Я хочу решить в Netlogo задачу, которая пока выходит за рамки моих навыков программирования. Я хочу создать список для каждой черепахи, который содержит самый дальний участок, на котором черепаха прошла в этот день. До сих пор я пытался составить список, в котором все патчи хранятся для каждой черепахи. Теперь я хочу рассчитать для каждой черепахи патч из этого списка, который находится на максимальном расстоянии от ее дома (укрытия). Я хочу очищать список каждую ночь (это не обязательно). Вот мой код:

let temp-visited-patch-list lput patch-here temp-visited-patch-list
  if period = night
  [ 
    [foreach [temp-visited-patch-list] [x ->  set visited-patch-list lput (max x [distance hide]) visited-patch-list]]
    let temp-visited-patch-list []
]

Так что я не так уж далек, чтобы извлекать значения для каждой черепахи отдельно, и даже та часть, которую я опубликовал, не работает. Я получаю ожидаемую ошибку команды. Буду очень признателен за любые предложения по решению этой проблемы. С уважением Оливия Полезно Бесполезно


person Olivia    schedule 29.04.2021    source источник
comment
есть ли конкретная причина, по которой вам нужен список? Есть гораздо более простые способы осмыслить это. Вместо того, чтобы сохранять список, затем обрабатывать его ночью и удалять, если все, что вам нужно, это максимальное расстояние, просто рассчитайте расстояние до укрытия, когда оно блуждает, и сохраните это значение, если оно больше, чем предыдущее сохраненное значение.   -  person JenB    schedule 30.04.2021
comment
Привет, JenB, мне не нужен список, но мне нужен патч с максимальным расстоянием до укрытия для каждой черепахи отдельно - и я подумал, что эту информацию будет легко (пока я не совсем уверен, как) извлечь из список :) Я хочу рассчитать домашние диапазоны для каждого туртеля в симуляции. У меня тоже была идея работать с наборами агентов вместо списков, но тут у меня проблема, что для расчета я буду смешивать переменные патча и черепахи - Netlog этому не рад...   -  person Olivia    schedule 01.05.2021
comment
Каждая черепаха имеет свое значение переменной. Точно так же, как некоторые черепахи могут быть зелеными, а некоторые синими — для этого и нужен turtles-own. Таким образом, черепаха 1 будет знать, что она пошла, скажем, 5, а черепаха 2 будет знать, что она пошла, скажем, 4 и т. д.   -  person JenB    schedule 01.05.2021
comment
Я не уверен, что понимаю, что вы хотите мне сказать. Мне нужен самый дальний участок (не расстояние, участок), на который шла каждая трутла по отношению к своей шкуре. Этот патч должен храниться в списке всех черепах отдельно для каждой черепахи, чтобы я мог рассчитать минимальный выпуклый корпус/многоугольник для домашних диапазонов. Как я могу сделать это с помощью собственных черепах? Может быть, вы могли бы добавить немного кода, чтобы мне было легче понять, как вы решите эту проблему.   -  person Olivia    schedule 02.05.2021


Ответы (1)


Этот код заставляет черепах двигаться, запоминать их самый дальний участок, окрашивать эти участки в красный цвет и вычислять среднее расстояние. Это должно помочь вам сориентироваться, как использовать патчи и атрибуты черепах для решения вашего вопроса.

globals [home-patch]

turtles-own
[ farpatch
  maxdistance
]

to setup
  clear-all
  set home-patch one-of patches
  ask home-patch
  [ set pcolor blue
    sprout 20
  ]
  reset-ticks
end

to go
  repeat 20 [movement]
  ask (patch-set [farpatch] of turtles) [set pcolor red]
  type "Average max distance:" print mean [maxdistance] of turtles
  tick
end

to movement
  ask turtles
  [ set heading random 360
    forward 1
    if distance home-patch > maxdistance
    [ set maxdistance distance home-patch
      set farpatch patch-here
    ]
  ]
end
person JenB    schedule 02.05.2021
comment
Большое спасибо за вашу помощь - но если я изменю этот ОДИН домашний патч на обстоятельства, с которыми я работаю, я снова просто попаду в кроличью нору, столкнувшись с проблемами с агентами, наборами агентов и списками - например, DSTANCE не работает с наборами агентов - просто с одним агентом (патчем). Мне нужно решение для списков (или наборов агентов), содержащих ПАТЧИ, и как-то узнать патч списка для каждой черепахи, которая находится дальше всего от соответствующего укрытия. большинство примитивов не работают в таких условиях. Может быть, я просто думаю, что это сложно - я открыт для других решений, которые дают мне те же результаты... - person Olivia; 02.05.2021
comment
конечно, вы не можете найти расстояние до набора агентов - подумайте о логике, до чего вы просите черепаху найти расстояние, если в наборе агентов, скажем, 5 агентов? Ближайший агент или средний из 5 агентов или что-то еще? И пример кода, который я вам дал, хранит патч в переменной farpatch - это не число или какой-то другой тип данных, это патч - person JenB; 02.05.2021
comment
Привет JenB, если вы можете решить проблему, которая у меня есть, с помощью кода именно для этой проблемы - я прошу вас помочь. Просто сказать мне, что не работает, к сожалению, ничего не решает. Моя проблема именно в том, что я должен найти решение для расчета хоумранжей - оно не работает так, как я пытался, как вы уже поняли. Но решение, которое вы предложили через свой код, также не решает мою проблему. Я могу хранить переменные в патчах. Но, к сожалению, мне нужно найти решение, которое работает с более чем одним патчем — вот о чем я прошу. - person Olivia; 03.05.2021
comment
Я пытался помочь, но вы не объяснили свою проблему так, чтобы я мог понять, что именно не работает. Код, который я уже предоставил, точно создает набор патчей, который, как я думал, вам нужен - каждая черепаха вносит один патч в набор, самый дальний патч, которого она достигла (это патчи, которые становятся красными). - person JenB; 03.05.2021