Возможно ли иметь перечисляемые типы данных в NetLogo? - PullRequest
0 голосов
/ 31 августа 2018

Возможно ли иметь перечисляемые типы данных в NetLogo?

Допустим, у меня есть модель изменения семейного положения.

Агент может иметь 3 состояния семейного положения: холост, женат, разведен.

Я бы хотел отобразить эти состояния в числа, чтобы при их выполнении занимало меньше памяти.

  • один = 1
  • женат = 2
  • разведен = 3

чтобы я мог просто сделать

ask agents with [ marital-status = single ][ get-married ]

Я нашел способ сделать это с помощью «to-report»

Например:

to-report single
   report 1
end

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

Спасибо:)

1 Ответ

0 голосов
/ 31 августа 2018

Насколько велика ваша модель? Насколько я понимаю, атрибут агента в любом случае занимает минимум 8 байт (см. https://github.com/NetLogo/NetLogo/wiki/Optimizing-NetLogo-Runs)

Я не могу придумать естественного способа сделать это. Однако, если вы действительно хотите, этот обходной путь сработает: сохраните семейное положение как 0, 1, 2. Также сохраните глобальную переменную под названием wedding-status-map и используйте примитив item. Так бы это выглядело так:

globals [ marriage-status-map]

turtles-own [ marriage-status ]

to testme
  clear-all
  set marriage-status-map ["single" "married" "divorced"]
  create-turtles 10
  [ set marriage-status random 3
    setxy random-xcor random-ycor
    set color blue
  ]
  ask turtles with [item marriage-status marriage-status-map = "single"] [set color red]
end
...