SESPES: socio-ecological systems and payment for ecosystem services model

SESPES: socio-ecological systems and payment for ecosystem services model preview image

1 collaborator

Default-person Eulalia Baulenas (Author)

Tags

evapotranspiration 

Tagged by Eulalia Baulenas 2 months ago

forest 

Tagged by Eulalia Baulenas 2 months ago

landowners 

Tagged by Eulalia Baulenas 2 months ago

Visible to everyone | Changeable by everyone
Model was written in NetLogo 6.1.1 • Viewed 49 times • Downloaded 2 times • Run 0 times
Download the 'SESPES: socio-ecological systems and payment for ecosystem services model' modelDownload this modelEmbed this model

Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)


Comments and Questions

Click to Run Model

;__includes[ "social-model.nls" ]
; Note: all code is in the same page to allow for simulations in BehavioralSpace

;; CREATE WORLD
extensions [gis]

globals [ ;; recall that 'global' variables are accessed by ALL types (patches, turtles, etc.) // they all receive the same value // sliders, choosers, etc. are all globals
  ambit-dataset ;; this stores the project data
  MCSC_R-dataset
  ;; land areas percentages
  conifers evergreen schrubland waterfield no-land land-area
  ;; ECOLOGICAL INTERACTIONS
  bwater-conifer bwater-evergreen ET-conifer ET-evergreen
  ;; global? precipitation
  dry-forests dry-conifers dry-evergreen dry-schrubland forest-mass precipitation
  ; counters
  ha-multi-total ha-multi multi-ha multi-per count-multi ha-envir-total ha-envir envir-ha envir-per count-envir ha-maxim-total
  ha-tradi-total ha-tradi tradi-ha tradi-per count-tradi ha-passi-total ha-passi passi-ha count-passi passi-per ha-optim-total
  ; to speed the program
  conifer-multi evergreen-multi conifer-envir evergreen-envir
  conifer-tradi evergreen-tradi conifer-passi evergreen-passi
  territory
  ; because "if ticks n mod = 0 [" not working
  drought-list short-conifer long-conifer short-evergreen long-evergreen rc-bwater re-bwater
]

;; Give an identity to forest owners (Maximizers, etc.)
breed [maximizers maximizer]
breed [optimizers optimizer]
breed [traditionalists traditionalist]
breed [passives passive]
breed [multifunctionalists multifunctionalist]
breed [environmentalists environmentalist]

patches-own [
  popu         ;; species/polygons in vector data
  landcover    ;; types
  age drought bwater managed
  land-use     ;; used for extensions if having agriculture makes a difference
  belong-to management-plan id-owner
]

to setup
  ca
  set-current-directory "....." ; add your directory using \\ instead of /

  load-map
  paint-world ;; add color depending on land cover
  count-species ;; keep track of the land cover composition
  base-scenario
  add-land-use
  add-owners
  count-ha
  distribute-management-plans
  tickers

  file-close
  reset-ticks
end 

to load-map
  ;; credit to: https://stackoverflow.com/questions/33437711/extension-exception-1944553-while-applying-raster-netlogo-gis
  set MCSC_R-dataset gis:load-dataset "mcsc_raster.asc" ;; loading the vector data
  resize-world 0 gis:width-of MCSC_R-dataset - 1 0 gis:height-of MCSC_R-dataset - 1
  gis:set-world-envelope-ds gis:envelope-of MCSC_R-dataset
  gis:apply-raster MCSC_R-dataset popu
end 

to paint-world ; see Excel "Vector-excel" in folder "GIS"
   ask patches [
    if popu = 1 [ set pcolor 64      ; "pi roig"
      set landcover "conifers" ]
    if popu = 2 [ set pcolor 56      ; "matollar"
      set landcover "schrubland" ]
    if popu = 3 [ set pcolor 62      ; "pinassa"
      set landcover "conifers" ]
    if popu = 6  [ set pcolor 76     ; "pi blanc"
      set landcover "conifers" ]
    if popu = 5 [ set pcolor 52      ; "altres: roure/alzina"
      set landcover "evergreen" ]
    if popu = 4 [ set pcolor 88      ; "camp o aigua"
      set landcover "waterfield" ]
    if pcolor = black [              ; black = no map
      set landcover "no-land" ]
  ]
end 

to base-scenario
   ask patches [
     set age random (150 - 20 + 1) + 20   ;; choose a random number between 20 and 150
     set drought 0
     set managed "No" ]
   ask patches [
      if landcover = "conifers" [
        set bwater (100 - initial-ET-conifer) ]
      if landcover = "evergreen" [
        set bwater (100 - initial-ET-evergreen) ]
   ]
  set precipitation initial-rain
  set ET-conifer initial-ET-conifer
  set ET-evergreen initial-ET-evergreen
end 

to count-ha
  ; initialize global agentsets of patches by landcover (to speed up the model)
  set conifer-multi patches with [ belong-to = "multifunctionalists" and landcover = "conifers" ]
  set evergreen-multi patches with [ belong-to = "multifunctionalists" and landcover = "evergreen" ]
  set conifer-envir patches with [ belong-to = "environmentalists" and landcover = "conifers" ]
  set evergreen-envir patches with [ belong-to = "environmentalists" and landcover = "evergreen" ]
  set conifer-tradi patches with [ belong-to = "traditionalists" and landcover = "conifers" ]
  set evergreen-tradi patches with [ belong-to = "traditionalists" and landcover = "evergreen" ]
  set conifer-passi patches with [ belong-to = "passives" and landcover = "conifers" ]
  set evergreen-passi patches with [ belong-to = "passives" and landcover = "evergreen" ]

  set ha-maxim-total ( count patches with [ belong-to = "maximalists" ] )
  set ha-optim-total ( count patches with [ belong-to = "optimizers" ] )
  set ha-multi-total ( count patches with [ belong-to = "multifunctionalists" ] )
  set ha-envir-total ( count patches with [ belong-to = "environmentalists" ] )
  set ha-tradi-total ( count patches with [ belong-to = "traditionalists" ] )
  set ha-passi-total ( count patches with [ belong-to = "passives" ] )
end 

to count-species
  ;; create a group based on each land to check all is fine (landcover = 100%, see observer in interface)
  set land-area (count patches with [ pcolor != black ])
  set conifers ((count patches with [ landcover = "conifers" ]/ land-area) * 100) ;; percentage of land area
  set evergreen ((count patches with [ landcover = "evergreen" ]/ land-area) * 100)
  set schrubland ((count patches with [ landcover = "schrubland" ]/ land-area) * 100)
  set waterfield ((count patches with [ landcover = "waterfield" ]/ land-area) * 100)
  set no-land ((count patches with [ landcover = "no-land" ]/ land-area) * 100)
  show conifers + evergreen + schrubland + waterfield ;; Last check all OK ;
end 

to tickers ; lists set for time finishing at 150 years
   set drought-list (list 20 40 60 80 100 120 140)
   set short-conifer (list 1 15 30 45 60 75 90 105 120 135 150)
   set short-evergreen (list 1 50 100 150)
   set long-conifer (list 1 80 140)
   set long-evergreen (list 1 100)
   set rc-bwater (list 45 44 43 42 41 40 40 39 38 37 36 35)
   set re-bwater (list 20 19 18 17 16 15)
end 

to go
  ; reset-ticks --> THIS WAS THE PROBLEM, IF ON NOT RUNNING
  ;; stop model if conifers and evergreen are all brown
  if ( dry-forests = 100 ) [
    stop ]
  ;; commands
  distribute-age
  experience-drought
  change-blue-water
  update-landcover
  initiate-management
  update-ha
  ;update-plots // taken out for model efficiency
  tick
end 

;; distribute different ages and convert land depending on the age

to distribute-age
   ask patches [
   ;; grow 1 every tick
   set age age + 1
   ]
end 

to experience-drought

  ask patches [
  if ( age > 150 ) and ( precipitation > 500 ) and ( ( landcover = "conifers" ) or ( landcover = "evergreen" ) ) [
      let dice random 6
      if dice = 0 [ set pcolor brown ]
      if dice = 1 [ set landcover "schrubland"
                    set drought 1 ]
      if dice > 1 [ set age 10 ]
    ]

  if ( age > 150 ) and ( precipitation < 500 ) and ( precipitation > 450 ) and ( ( landcover = "conifers" ) or ( landcover = "evergreen" ) ) [
      let dice random 5
      if dice = 0 [ set pcolor brown ]
      if dice = 1 [ set drought 1
                    set landcover "schrubland" ] ; ideally: set landcover = "schrubland"
      if dice > 1 [ set age 10 ]
    ]

  if ( age > 150 ) and ( precipitation < 450 ) and ( ( landcover = "conifers" ) or ( landcover = "evergreen" ) ) [
      let dice random 4
      if dice = 0 [ set pcolor brown ]
      if dice = 1 [ set landcover "schrubland"
                    set drought 1 ] ; ideally: set landcover = "schrubland"
      if dice > 1 [ set age 10 ]
    ]
  ]
end 

to change-blue-water

  ifelse climate-change
      [ set precipitation ( precipitation - 1.15 )
        set ET-conifer ( ET-conifer + 0.03 )
        set ET-evergreen ( ET-evergreen + 0.03 ) ] ; amount said to decrease each year due to climate change
      [ ] ; it never changes...

  ask patches with [ landcover = "conifers" and managed = "No" ] [
    set bwater ( 100 - ET-conifer ) ]
  ask patches with [ landcover = "evergreen" and managed = "No" ] [
    set bwater ( 100 - ET-evergreen ) ]
end 

to add-land-use

  ask patches [ set land-use 0 ] ; 0 = only forestry

  ask patches with [pycor < 75] [   ; southern coordinates
    ifelse agriculture-too?
      [ set land-use 1] ; 1 = forestry and agriculture
      [ set land-use 0] ; 0 = forestry
    ]
end 

to update-landcover

  set bwater-conifer mean [bwater] of patches with [ landcover = "conifers" ]
  set bwater-evergreen mean [bwater] of patches with [ landcover = "evergreen" ]

  set forest-mass (count patches with [ landcover = "conifers" ] +
                   count patches with [ landcover = "evergreen" ] +
                   count patches with [ landcover = "schrubland" ])

  set dry-conifers ( count patches with [ pcolor = brown and landcover = "conifers" ]
    / forest-mass ) * 100 ;/ count patches with [ landcover = "conifers" ] ) * 100
  set dry-evergreen ( count patches with [ pcolor = brown and landcover = "evergreen" ]
    / forest-mass ) * 100 ;/ count patches with [ landcover = "evergreen" ] ) * 100
  set dry-schrubland ( count patches with [ drought = 1 and landcover = "schrubland" ]
    / forest-mass ) * 100
  set dry-forests (( dry-conifers + dry-evergreen ) / 2 )
end 

; ##############################################################################################################
; SOCIAL SUBMODEL
; Set number of forest owners in the interface

;; Create breeds based on the numbers and percentages in the interface

to add-owners
  ask patches [
    if pcolor != black and pcolor != 88 [ set belong-to nobody ]
  ]

  create-traditionalists (number-owners * (tradi / 100)) [
    set color 15
    set shape "dot"
    set size 10 ]
  ask traditionalists [
    move-to one-of patches with [ belong-to = nobody ]
    pd
    set territory patches in-radius (random 30) with [ belong-to = nobody ]
    ask territory [
      set belong-to "traditionalists"
      set id-owner myself
    ]
   ]

  create-multifunctionalists (number-owners * (multi / 100)) [
    set color 25
    set shape "dot"
    set size 10 ]
  ask multifunctionalists [
    move-to one-of patches with [ belong-to = nobody ]
    pd
    set territory patches in-radius (random 30) with [ belong-to = nobody ]
    ask territory [
      set belong-to "multifunctionalists"
      set id-owner myself
    ]
   ]

  create-environmentalists (number-owners * (envir / 100)) [
    set color 45
    set shape "dot"
    set size 10 ]
  ask environmentalists [
    move-to one-of patches with [ belong-to = nobody ]
    pd
    set territory patches in-radius (random 30) with [ belong-to = nobody ]
    ask territory [
      set belong-to "environmentalists"
      set id-owner myself
    ]
   ]

  create-passives (number-owners * (passi / 100)) [
    set color 125
    set shape "dot"
    set size 10 ]
  ask passives [
    carefully [ move-to one-of patches with [ belong-to = nobody ] ] [ user-message "Please, create world and add owners again" ]
    pd
    set territory patches in-radius (random 30) with [ belong-to = nobody ]
    ask territory [
      set belong-to "passives"
      set id-owner myself
    ]

   ; if any? patches in-radius 25 with [ belong-to = nobody ]
    ;   [ set territory patches in-radius 20 with [ belong-to = nobody ]
     ;    ask territory [
      ;       set belong-to "passives"
       ;      set id-owner myself ]]
   ]

  if maxim + optim + tradi + passi + multi + envir != 100 [ user-message "Please, make sure forest owners categories sum up to 100%" stop ]
end 

to distribute-management-plans

  ask n-of ((num-of-plans / 100) * ha-tradi-total) patches with [belong-to = "traditionalists"] [ set management-plan 1 ]
  ask n-of ((num-of-plans / 100) * ha-multi-total) patches with [belong-to = "multifunctionalists"] [ set management-plan 1 ]
  ask n-of ((num-of-plans / 100) * ha-envir-total) patches with [belong-to = "environmentalists"] [ set management-plan 1 ]
  ask n-of ((num-of-plans / 100) * ha-passi-total) patches with [belong-to = "passives"] [ set management-plan 1 ]
end 

; ##############################################################################################################
; POLICY SUBMODEL
; Each identity respondets differently to the policy design

to initiate-management

  if ( dry-forests = 100 ) [
    stop ]

  ask patches with-max [age] [
  ; Multifunctionlists
  ; If below cost or more ES are on = 50 years, otherwise 15 years
    (ifelse Below-cost-coverage? [ ]; [ ask territory [ manage-long-multi ] ]
            Additional-ES-goal? [ manage-long-multi ] ;[ ask territory [ manage-long-multi ] ]
            One-time-payment? [ manage-long-multi ]
            ; else command
            [ manage-multi ] )

  ; Environmentalists
  ; If below cost or more ES or no intermediary are on = 50 years, otherwise 15 years
    ifelse No-intermediary?
      [ ]
      [ (ifelse  Below-cost-coverage? [ ]
                 Additional-ES-goal? [ manage-long-envir ]
                 One-time-payment? [ manage-long-envir ]
                ; else command
                [ manage-envir ] )
     ]

  ; Traditionalists
  ; Follows neighbours unless 1 x payment = stops after 3 times
    if any? neighbors in-radius 5 with [ managed = "Yes" and belong-to != "traditionalists" ] [
       manage-tradi ] ; Traditionalists manage if neighbors do

 ; Passives
 ; No management unless MP = 1 and below-cost is off
    ifelse Below-cost-coverage?                     ; If the switch is on, comparison is true and the turtle will run the commands inside the first set of bracket
      [ ]
      [ manage-passi ]
  ]
end 

; For speed reasons

; MULTI-FUNCTIONALISTS

to manage-multi
  ; conifers can be "managed" every 15-20 years / evergreens every 100 (Informe DEMORGEST)
  ; old conifers are cut and new are planted (every 50 years), 30% following "Baronia Balanc Hidric"
  ;if ticks mod 15 = 0 [ --> not working
  if member? ticks short-conifer [
    ask n-of ( random 2 ) conifer-multi [ ; random 2 = 1, but just in case it wants to be increased
    set age 10
    set bwater random (46 - 35 + 1) + 35 ; between 0-10% gain
    set drought 0
    set managed "Yes"
    set landcover "conifers"
    set pcolor 67 ]
  ]
  ; old evergreens are cut and new are planted (every 100 years)
  if member? ticks short-evergreen [
    ask n-of ( random 2 ) evergreen-multi [
    set age 10
    set bwater random (21 - 15 + 1) + 15 ; between 0-5%
    set drought 0
    set managed "Yes"
    set landcover "evergreen"
    set pcolor 67 ]
    ]
end 

to manage-long-multi
  if member? ticks long-conifer [
    ask n-of ( random 2 ) conifer-multi [
    set age 10 + 1
    set bwater random (46 - 35 + 1) + 35 ; between 0-10%
    set drought 0
    set managed "Yes"
    set landcover "conifers"
    set pcolor 67 ]
    ]
  if member? ticks long-evergreen [
    ask n-of ( random 2 ) evergreen-multi [
    set age 10 + 1
    set bwater random (21 - 15 + 1) + 15 ; between 0-5%
    set drought 0
    set managed "Yes"
    set landcover "evergreen"
    set pcolor 67 ]
    ]
end 

; ENVIRONMENTALISTS

to manage-envir
  if member? ticks short-conifer [
    ask n-of ( random 2 ) conifer-envir [
    set age 10
    set bwater random (46 - 35 + 1) + 35 ; between 0-10% gain
    set drought 0
    set managed "Yes"
    set landcover "conifers"
    set pcolor 67 ]
    ]
  if member? ticks short-evergreen [
    ask n-of ( random 2 ) evergreen-envir [
    set age 10
    set bwater random (21 - 15 + 1) + 15 ; between 0-5%
    set drought 0
    set managed "Yes"
    set landcover "evergreen"
    set pcolor 67 ]
    ]
end 

to manage-long-envir
  if member? ticks long-conifer [
    ask n-of ( random 2 ) conifer-envir [
    set age 10 + 1
    set bwater random (46 - 35 + 1) + 35 ; between 0-10%
    set drought 0
    set managed "Yes"
    set landcover "conifers"
    set pcolor 67 ]
    ]
  if member? ticks long-evergreen [
    ask n-of ( random 2 ) evergreen-envir [
    set age 10 + 1
    set bwater random (21 - 15 + 1) + 15 ; between 0-5%
    set drought 0
    set managed "Yes"
    set landcover "evergreen"
    set pcolor 67 ]
    ]
end 

; TRADITIONALISTS

to manage-tradi
   if member? ticks short-conifer [
    ask n-of ( random 2 ) conifer-tradi [
    set age 10
    set bwater random (46 - 35 + 1) + 35 ; between 0-10% gain
    set drought 0
    set managed "Yes"
    set landcover "conifers"
    set pcolor 67 ]
    ]
  ; old evergreens are cut and new are planted (every 100 years)
  if member? ticks short-evergreen [
    ask n-of ( random 2 ) evergreen-tradi [
    set age 10
    set bwater random (21 - 15 + 1) + 15 ; between 0-5%
    set drought 0
    set managed "Yes"
    set landcover "evergreen"
    set pcolor 67 ]
    ]
end 

to manage-long-tradi
  if member? ticks long-conifer [
    ask n-of ( random 2 ) conifer-tradi [
    set age 10 + 1
    set bwater random (46 - 35 + 1) + 35 ; between 0-10%
    set drought 0
    set managed "Yes"
    set landcover "conifers"
    set pcolor 67 ]
    ]
  if member? ticks long-evergreen [
    ask n-of ( random 2 ) evergreen-tradi [
    set age 10 + 1
    set bwater random (21 - 15 + 1) + 15 ; between 0-5%
    set drought 0
    set managed "Yes"
    set landcover "evergreen"
    set pcolor 67 ]
    ]
end 

; PASSIVES

to manage-passi
  if member? ticks long-conifer [
    ask n-of ( random 2 ) conifer-passi [
    if management-plan = 1 [
    set age 10
    set bwater random (46 - 35 + 1) + 35 ; between 0-10%
    set drought 0
    set managed "Yes"
    set landcover "conifers"
    set pcolor 67 ] ]
    ]
  if member? ticks long-evergreen [
    ask n-of ( random 2 ) evergreen-passi [
    if management-plan = 1 [
    set age 10
    set bwater random (21 - 15 + 1) + 15 ; between 0-5%
    set drought 0
    set managed "Yes"
    set landcover "evergreen"
    set pcolor 67 ] ]
    ]
end 

; OUTPUT

to update-ha

   set ha-multi ( count patches with [ managed = "Yes" and belong-to = "multifunctionalists" ] )
   set multi-per ( ha-multi / ha-multi-total ) * 100
   set multi-ha ( ha-multi * 0.01 )

   set ha-envir ( count patches with [ managed = "Yes" and belong-to = "environmentalists" ] )
   set envir-per ( ha-envir / ha-envir-total ) * 100
   set envir-ha ( ha-envir * 0.01 )

   set ha-tradi ( count patches with [ managed = "Yes" and belong-to = "traditionalists" ] )
   set tradi-per ( ha-tradi / ha-tradi-total ) * 100
   set tradi-ha ( ha-tradi * 0.01 )

   set ha-passi ( count patches with [ managed = "Yes" and belong-to = "passives" ] )
   set passi-per ( ha-passi / ha-passi-total ) * 100
   set passi-ha ( ha-passi * 0.01 )
end 



;; see: https://stackoverflow.com/questions/38619289/storing-recalling-the-value-of-a-variable-in-netlogo

There is only one version of this model, created 2 months ago by Eulalia Baulenas.

Attached files

File Type Description Last updated
mcsc_raster.asc extension GIS map (required to run the model) about 1 month ago, by Eulalia Baulenas Download
SESPES: socio-ecological systems and payment for ecosystem services model.png preview Preview for 'SESPES: socio-ecological systems and payment for ecosystem services model' 2 months ago, by Eulalia Baulenas Download

This model does not have any ancestors.

This model does not have any descendants.