Могу ли я попросить в Netlogo исправления сделать что-то в контексте черепахи? - PullRequest
0 голосов
/ 12 октября 2018

Мне нужно иметь собственное обновление патчей, поскольку каждая черепаха перемещается внутри команды, используя контекст Ask черепах.Итак, по сути, я хочу попросить патчи сделать что-то в контексте черепахи.Я знаю, что вы можете иметь доступ к переменным патча для черепах во время этого конкретного патча, но мне нужно, чтобы патчи вычисляли «предельное значение» (переменную патча, которую я составил) для всех патчей, включая те, которые неесть черепахиМоя цель состоит в том, чтобы обновлять предельное значение каждый раз, когда черепахи перемещаются в команде «спросить черепах».Так что тот факт, что черепахи могут получить доступ к патчу, который находится в переменной патча, не кажется полезным в этой ситуации.Возможно ли это сделать?Если так, как бы вы предложили мне пойти по этому поводу?

Например, то, что у меня сейчас, не работает, но может помочь понять, что я пытаюсь сделать:

 ask turtles
  [ ask patches
    [ calculate-marginal-vaule ]]

to calculate-marginal-vaule
   ifelse
    count turtles-here > 0
    [ set possible-consumption ( quality ) / ( strength-of-competition * count turtles-here ) ]
    [ set possible-consumption quality ]
  set marginal-value mean [ possible-consumption ] of patches
end

Ответы [ 2 ]

0 голосов
/ 13 октября 2018

Вы можете обойти ограничение, объясненное Джен, если превратить специальный набор агентов patches в "обычный" набор агентов исправлений, используя репортер patch-set:

ask turtles [
  ask patch-set patches [
    calculate-marginal-value
  ]
]

Теперь, мудро это делать или нет, это другой вопрос.

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

0 голосов
/ 13 октября 2018

NetLogo специально запрещает код, подобный ask turtles [ ask patches [ <do something> ] ], поскольку код этого формата почти всегда является ошибкой (и является основным источником неэффективности).Однако вы можете попросить подмножество патчей, удовлетворяющих некоторым условиям, сделать что-то, как показано в следующем коде.

to testme
  clear-all
  create-turtles 10
  ask patches [ set pcolor 15 ]
  ask turtles
  [ ask patches with [ pxcor >= 0 ] [ set pcolor pcolor + 5 ]
  ]
end

Если у вас есть 10 черепах, то ask turtles [ ask patches [ ] ] заставит патчи выполнять действия10 раз.Это на самом деле то, что вы хотите?Нет проблем с доступом к информации из всех исправлений, просто выполняя некоторые действия.

...