Хранение переменных патча для будущего использования отдельными агентами - PullRequest
0 голосов
/ 08 июля 2019

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

Я представляю, что могу сохранить

Прямо сейчас у меня есть:

globals [year]

bears-own
[
  memory-value
  memory-1
  memory-2
  memory-3
]

patches-own
[
  food
]

Во время инициализации установлено значение года 1, и когда создаются агенты, я прошу ихустановить память-1 патч-здесь.После 1000 тиков значение года обновляется до 2, а после еще 1000 тиков оно меняется на 3. В процедуре go вызывается следующая процедура:

to set-memory
  if year = 1
  [
    set memory-1 (patch-set memory-1 patches in-radius 5)
    ask memory-1 [set memory-value food]
  ]
    if year = 2
  [
    set memory-2 (patch-set memory-2 patches in-radius 5)
    ask memory-2 [set memory-value food]
    if ticks = 1001 [ask memory-1 [set memory-value (food * (exp (- year)))]]
  ]
end

Я считаю, что этот код использует ту же память-1наборы агентов памяти, памяти-2 и памяти-3 для всех агентов, чтобы они все имели доступ к исправлениям, которые посещали другие агенты.Я бы хотел, чтобы агенты могли «помнить» только те патчи, к которым у них был доступ.Я также не уверен, что мой подход к временной части точен.У меня есть ощущение, что мне может понадобиться использовать матричное расширение, но я подумал, что должен получить некоторое представление, прежде чем углубиться в неизвестность.Любая помощь в решении этого вопроса или улучшение ясности вопроса очень ценится!

1 Ответ

1 голос
/ 08 июля 2019

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

extensions [table]

turtles-own [mapAware]

to setup
  ...
  ask turtles
  [ set mapAware table:make
  ]
  ...
end

go
  ...
  update-awareness
  ...
end

to update-awareness
  ask turtles
  [ let thisPatch (list pxcor pycor)    ; key for table
    let oldVisits table:get-or-default mapAware thisPatch 0
    table:put mapAware thisPatch oldVisits + 1
  ]
end
...