Есть ли способ создать перечисление в netlogo?

У меня есть код netlogo, который я хотел бы сделать более наглядным. Итак, вместо:

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

Он сказал бы:

MOVE-TO ONE-OF PATCHES WITH [ WATER ]

В java я бы создал перечисление для этого. Как я могу сделать это в Netlogo?


person Gabriel Fair    schedule 01.06.2018    source источник
comment
Привет, Габриэль, отличный вопрос, но вы можете взглянуть на stackoverflow.com/editing-help, чтобы узнать, как форматировать код как код, а не как цитата. Вы также можете подумать о том, чтобы избегать написания кода ВСЕМИ ЗАГЛАВНЫМИ БУКВАМИ... :-)   -  person Nicolas Payette    schedule 01.06.2018


Ответы (3)


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

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 не влияет изменение цвета патча. Это также может быть немного быстрее, поскольку вы создаете его только один раз, а не фильтруете все патчи снова и снова.

person Nicolas Payette    schedule 01.06.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/false для каждого участка, указывающая, что это вода (если это правда). Затем вы можете напрямую использовать операторы, такие как ask patches with [water?] []. Вы также можете настроить глобальную переменную, которая содержит набор патчей для водных патчей, а затем сделать такие операторы, как ask water-patches []

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

person JenB    schedule 01.06.2018
comment
Вау... думаю, великие умы думают одинаково. Мы практически дали один и тот же ответ с интервалом в несколько секунд! - person Nicolas Payette; 01.06.2018
comment
или дураки редко отличаются, но ваша версия лучше для моего эго :) я только что видел вашу, мы приводим разные причины и примеры, так что лучше оставить обе - person JenB; 01.06.2018

person    schedule
comment
идеально. Спасибо. Я приму ваш ответ, когда SO позволит мне через 10 минут - person Gabriel Fair; 01.06.2018
comment
Просто чтобы внести ясность, я согласен с замечаниями Николаса и Джен по поводу разделения логики дисплея и программы. Я пытался четко придерживаться заданного вопроса и дать ответ, применимый к любому атрибуту. - person Alan; 02.06.2018