Есть ли способ создать enum в netlogo? - PullRequest
0 голосов
/ 01 июня 2018

У меня есть некоторый код netlogo, который я хотел бы сделать более информативным.Поэтому вместо:

MOVE-TO ONE-OF PATCHES WITH [ PCOLOR = BLUE ]

Было бы сказано:

MOVE-TO ONE-OF PATCHES WITH [ WATER ]

В Java я бы создал enum для этого.Как я могу сделать это в Netlogo?

Ответы [ 3 ]

0 голосов
/ 01 июня 2018

Ответ Алана в порядке, но я бы также рассмотрел возможность создания переменной патча вместо того, чтобы полагаться на цвет патча.Например:

patches-own [ water? ]

Если вы установите для этого значения true для каждого патча воды, вы можете сказать следующее:

move-to one-of patches with [ water? ]

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

Разделение семантики представления и программыкак правило, хорошая практика.

Другой, другой способ достижения этой цели - создать набор агентов с вашими патчами для воды во время настройки.Например, предположим, что вы объявляете water-patches в качестве глобальной переменной, вы должны сделать:

set water-patches patches with [ pcolor = blue ]

И тогда вы можете сделать:

move-to one-of water-patches

Набор агентов water-patches не затронутесли вы измените цвет патча.Это также может быть немного быстрее, поскольку вы создаете его только один раз, а не фильтруете все патчи снова и снова.

0 голосов
/ 01 июня 2018

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

patches-own
[ water?
]

to setup
  ask patches
  [ set water? FALSE
    if random-float 1 < 0.2
    [ set water? TRUE
      set pcolor blue
    ]
  ]
end

В этой конструкции у вас есть истинное /Ложная переменная для каждого патча, указывающая, что это вода (если true).Тогда вы можете напрямую иметь такие утверждения, как ask patches with [water?] [].Вы также можете установить глобальную переменную, которая будет содержать набор патчей для водных патчей, а затем делать такие заявления, как ask water-patches []

Если у вас есть несколько типов стилей земли (например, вода, песок, почва, камень)..) тогда ваш цвет будет более вероятным, так как вам не нужны отдельные переменные для всех этих.Но даже тогда вы могли бы иметь один атрибут для стиля земли и иметь конструкции, которые ask patches with [ type = "water"]

0 голосов
/ 01 июня 2018
to-report water ;patch proc
  report pcolor = blue
end
...