Zackenkranz
Zackenkranz

Reputation: 3

Different results of reporters turtles/turtle x

I have created an opinion dynamics model, that works just fine. But now I wanted to see, how the opinion of all of my turtles changes. So I created the reporter "report [opinion] of turtles". When I put this in behaviorspace I get wildly jumping results that do not correspond with what I observe. If I test this with individual turtles like "report [opinion] of turtle 0", I get the smooth curve progression that I expected to see.

Does anyone know why this is happening? I would find it rather unwieldy, if I had to put every turtle individually in my behaviorspace, because I have sliding Agentsnumbers.

Upvotes: 0

Views: 78

Answers (1)

Matteo
Matteo

Reputation: 2926

You can let each turtle have a list variable, at the beginning of which each turtle will record its ID. At every step, each turtle will append its opinion value.

Then you can have a global variable, which you will use as a list of lists, to which at the end of the simulation each turtle will append its own list.

In BheaviorSpace, you will only need to use one reporter (the list of lists) at the end of each experiment's run.

See below for a working example:

globals [
 results 
]

turtles-own [
 opinion
 my-list
]

to setup
  clear-all
  reset-ticks
  
  set results (list)
  
  create-turtles 3 [
   set opinion random 10
   set my-list list self opinion
  ]
end

to go
  if (ticks = 5) [
    ask turtles [
     set results lput my-list results 
    ]
    stop
  ]
  
  ask turtles [
   set opinion opinion + 1
   set my-list lput opinion my-list
  ]
  tick
end

At the end of each run, the results reporter will look like:

[[(turtle 2) 3 4 5 6 7 8] [(turtle 0) 0 1 2 3 4 5] [(turtle 1) 5 6 7 8 9 10]]

Note that, this way, the lists in results will always be in random order. If you're interested in having them ordered according to some criterion, you can do it.

The example below changes the if (ticks = 5) statement to order results according to turtles' ID, but you can just use sort on whatever characteristic you're interested in.

if (ticks = 5) [
    let sorted-turtles sort turtles
    foreach sorted-turtles [this-turtle -> ask this-turtle [set results lput my-list results]]
    
    stop
  ]

Upvotes: 1

Related Questions