Vidushi Patel
Vidushi Patel

Reputation: 11

initialize turtles from the same patch for two different scenario runs

I want to run my NetLogo model to see how the change in landscape scenario 'baseline' and 'future' affects agents' annual travel distance. I have initialized agents on a random patch within their residential postcode boundary.

To be able to compare changes in travel, I should have them initialized from the same patch for both scenarios. I have been trying using random-seed but can't get it to work. I want to run the model for 100 different initial patches but maintain the same patch for each baseline and future scenario in a single run (ideally that is two runs, one with baseline scenario and one future scenario. When I use random-seed in setup, it initializes agents from different patches for each scenario. I tried setting a global variable random-seed-turtles and tried 2 runs in behaviour space with two different seeds.

[ "random-seed-turtles"  1 2 ]   
[  "landscape-scenario"   "baseline" "future"] 

It creates turtles from the same patch for each run for baseline but differs for future scenario.

enter image description here

Is there a way to code so that I can have a different initial patch for turtles for each of the 100 runs but same origin for individual runs. e.g.

run1 
baseline my_home  = patch 113 224
future  my_home  = patch 113 224

Also, does the place where you insert the random-seed command matter? The patch value (landscape availability) changes every tick, reading from a raster prepared for that timestep. Landscape_scenario is a chooser on the interface with the values for 'baseline' and 'future' each reading a different set of rasters. Does this interfere random-seed?

Upvotes: 0

Views: 78

Answers (1)

Matteo
Matteo

Reputation: 2926

NOTE: The answer below assumes that your situation is such that you want the baseline and the future scenarios to be run as part of a single model iteration.

Also, I propose two (very similar) approaches. The one you'll prefer will depend on your specific situation and needs, that we don't know since you didn't share the structure of your model.


You have to create a turtles-own variable where each turtle will directly store its starting patch.

Then, when you close your baseline scenario and prepare your future scenario, you will have to manually delete all the variables that you want to delete except that variable where turtles stored their starting patch (so, for example, you shouldn't use clear-all or clear-turtles in that passage, because such commands would also clear the turtles-own variable that you want to keep).

To show the approach with an example, see the code below:

globals [
 ; Put here your gobal variables.
]

patches-own [
 ; Put here your patches' variables.
]

turtles-own [
 my-start
 my-value  ; I only included this to show that you have to manually clear the turtles' variables EXCEPT from 'my-start'.
]


to setup
  clear-all
  reset-ticks
  
  ; Do here what you need to do to prepare the baseline scenario.

  create-turtles 20 [
   setxy random-xcor random-ycor
   set my-value random 10
   set my-start patch-here
  ]
end


to go
  run-model
  
  clear-baseline-scenario
  prepare-future-scenario
  
  run-model
end


to run-model
  ; Put here all the things you need to have to run your model,
  ; including a stop condition (and ticks, if you want them).
end


to clear-baseline-scenario
  clear-globals
  clear-patches
  reset-ticks
  
  ; Now, you also have to manually clear all your turtles' variables EXCEPT
  ; from 'my-start':
  ask turtles [
   set my-value 0 
  ]
end


to prepare-future-scenario
  ; Do here what you need to do to prepare the future scenario,
  ; and also tell your agents to go to their starting patch:
  
  ask turtles [
   move-to my-start 
  ]
end

There is another approach which basically is just the same solution but applied to patches instead of turtles.

In this case, you will have a patches-own variable that signals if a patch is or isn't a starting patch (for example by taking 1/0 value, or TRUE/FALSE if you prefer).

Then, when going from the baseline scenario to the future scenario, you will clear all the things you need to clear except from that patches-own variable (i.e. without using clear-all or clear-patches in that passage, because such commands would also clear the patches-own variable that you want to keep).

This approach is doable if you are not interested in having exactly the same turtle starting on that same patch, but you are happy to have any turtle starting on any of the starting patches.

So it will be something like:

globals [
 ; Put here your gobal variables.
]

patches-own [
 slope  ; I only included this to show that you have to manually clear the patches' variables EXCEPT from 'starting-patch?'.
 starting-patch?
]

turtles-own [
  ; Put here your turtles' variables.
]


to setup
  clear-all
  reset-ticks
  
  ; Do here what you need to do to prepare the baseline scenario.
  
  create-turtles 20 [
   setxy random-xcor random-ycor
   set starting-patch? TRUE
  ]
  
  ask patches [
   set slope random 5
   if (starting-patch? = 0) [
     set starting-patch? FALSE
    ] 
  ]
end


to go
  run-model
  
  clear-baseline-scenario
  prepare-future-scenario
  
  run-model
end


to run-model
  ; Put here all the things you need to have to run your model,
  ; including a stop condition (and ticks, if you want them).
end


to clear-baseline-scenario
  clear-globals
  clear-turtles
  reset-ticks
  
  ; Now, you also have to manually clear all your patches' variables that you
  ; want to clear EXCEPT from 'my-start':
  ask patches [
   set slope 0 
  ]
end


to prepare-future-scenario
  ; Do here what you need to do to prepare the future scenario,
  ; and also tell your agents to go to an empty starting patch:
  
  create-turtles 20 [
   move-to one-of patches with [(starting-patch?) AND (not any? turtles-here)]
  ]
end

Upvotes: 0

Related Questions