Как сохранить конкретный патч в Netlogo? - PullRequest
0 голосов
/ 07 ноября 2018

Моя программа о:

Команда черепах гуляет по всему миру, чтобы найти лучший источник пищи и отправиться туда.

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

вот код:

turtles-own
[ myteamset
  food-quality-found    ;the quality of food that the turtle found
  location              ;the location of food-quality-found
  best-food             ;the best food available
  location-best-food    ;the location of best food
]

patches-own
[ food-quality          ;the food source]

Вот код

foreach teamNumbers [
    tn ->
    ask turtles with [ teamID = tn ] [
       if myteamset != nobody [
       ask myteamset [

          set food-quality-found food-quality
          set location patch-here
          ;face location
        ]
          if food-quality-found != 0           ;after all turtles found food, thus comparison can be done
          [ 
          let x1 max [food-quality-found] of myteamset   ; max for group
          set location-of-best-food [patch-here] of location  ;problem ???
            set best-food x1
          move-to location-of-best-food      ;turtles to go to the best food location
          face location-of-best-food      ;turtles stay there
        ]
        ]
      ]

Вот так выглядит мой мир: пурпурный участок для гнезда, другие - еда.

Each food has different food value.

Мне нужна помощь в сохранении значения location-of-best-food, так как я не могу использовать patch-here для хранения местоположения. Ошибка в том, что я сохраняю место, где черепахи нашли свою еду, вместо места, где лучше всего есть еда.

Спасибо за ваше время.

Я отредактировал свой вопрос, так как понял, что @JenB пытался сказать (спасибо за объяснение)

1 Ответ

0 голосов
/ 07 ноября 2018

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

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

Я думаю, вы не понимаете, что это за глобальные переменные. Глобальная переменная - это переменная, для которой значение идентично для всех объектов модели . Ясно, что члены команды и ближайшие члены команды различны для каждой черепахи. Таким образом, они должны храниться на уровне черепахи, как turtles-own переменных. Это также то, что вы должны использовать для лучшей еды.

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

Ваш процесс должен выглядеть примерно так:

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

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

Как правило, когда вы начинаете с NetLogo, если вы используете идентификаторы (или значения who) для отдельных лиц в вашем коде, вы, вероятно, не должны этого делать. Если вы используете foreach, вы, вероятно, не должны быть. В обоих случаях вы хотите вместо этого наборы агентов.

Вы почти получили этот код. В строке set location patch-here вместо идентификатора используется набор агентов patch-here.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...