Is it possible to have enumerated data types in NetLogo?

Viewed 72

Is it possible to have enumerated data types in NetLogo?

Let's say that I have a model of marital status change.

An agent can have 3 marital status states: single, married, divorced.

I would like to map those states into numbers so that it takes less memory when executed.

  • single = 1
  • married = 2
  • divorced = 3

so that I can just do

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

I have found a trick to do that with "to-report"

eg:

to-report single
   report 1
end

But this means I have to create many to report functions if I were to have many categories in many variables. Is there a better workaround than this?

Thanks :)

1 Answers

How big is your model? My understanding is that an agent attribute is minimum 8 bytes anyway (see https://github.com/NetLogo/NetLogo/wiki/Optimizing-NetLogo-Runs)

I can't think of a natural way to do this. However, if you really wanted to, this workaround would work: store the marital status as 0, 1, 2. Also store a global variable called marriage-status-map and use the item primitive. So it would look like this:

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
Related