z5182
z5182

Reputation: 69

Is it possible to have enumerated data types in NetLogo?

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.

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 :)

Upvotes: 3

Views: 100

Answers (1)

JenB
JenB

Reputation: 17678

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

Upvotes: 1

Related Questions