SESPES: socio-ecological systems and payment for ecosystem services model
Model was written in NetLogo 6.1.1
•
Viewed 309 times
•
Downloaded 21 times
•
Run 0 times
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" ] ; All together for 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 quercus shrubland waterfield no-land land-area ;; ECOLOGICAL INTERACTIONS bwater-conifer bwater-quercus ET-conifer ET-quercus ;; global? precipitation dry-forests dry-conifers dry-quercus dry-shrubland 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 drought-total n_mfu n_env n_tra n_pas ; to speed the program conifer-multi quercus-multi conifer-envir quercus-envir conifer-tradi quercus-tradi conifer-passi quercus-passi ;territory ; because "if ticks n mod = 0 [" not working drought-list short-conifer long-conifer short-quercus long-quercus 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 belong-to id-owner ; land-use management-plan ;; used for extensions ] turtles-own [territory forestsize] ;;####################################### to setup ca set-current-directory "..." 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 "shrubland" ] 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 "quercus" ] if popu = 4 [ set pcolor 88 ; "camp o aigua"ask territory [ ; random 2 = 1, but just in case it wants to be increased // ask n-of (int (0.30 * count turtles)) turtles [die] 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 = "quercus" [ set bwater (100 - initial-ET-quercus) ] ] set precipitation initial-rain set ET-conifer initial-ET-conifer set ET-quercus initial-ET-quercus 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 quercus-multi patches with [ belong-to = "multifunctionalists" and landcover = "quercus" ] set conifer-envir patches with [ belong-to = "environmentalists" and landcover = "conifers" ] set quercus-envir patches with [ belong-to = "environmentalists" and landcover = "quercus" ] set conifer-tradi patches with [ belong-to = "traditionalists" and landcover = "conifers" ] set quercus-tradi patches with [ belong-to = "traditionalists" and landcover = "quercus" ] set conifer-passi patches with [ belong-to = "passives" and landcover = "conifers" ] set quercus-passi patches with [ belong-to = "passives" and landcover = "quercus" ] 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" ] ) set drought-total ( count patches with [ drought = 1 ] ) set n_mfu ( count multifunctionalists ) set n_mfu ( count environmentalists ) set n_tra ( count traditionalists ) set n_pas ( count 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 quercus ((count patches with [ landcover = "quercus" ]/ land-area) * 100) set shrubland ((count patches with [ landcover = "shrubland" ]/ 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 + quercus + shrubland + 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-quercus (list 1 35 70 105 140) set long-conifer (list 1 50 100 150) set long-quercus (list 1 75 150) 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 quercus are all brown if ( dry-forests = 100 ) [ stop ] ;; commands grow-old 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 grow-old ask patches [ ;; grow 1 every tick set age age + 1 ] end to experience-drought ask patches [ if ( age > 100 ) and ( precipitation > 500 ) and ( ( landcover = "conifers" ) or ( landcover = "quercus" ) ) [ let dice random 6 if dice = 0 [ set pcolor brown ] if dice = 1 [ set landcover "shrubland" set drought 1 ] if dice > 1 [ set age 20 ] ; before set age 10 ] if ( age > 100 ) and ( precipitation < 500 ) and ( precipitation > 450 ) and ( ( landcover = "conifers" ) or ( landcover = "quercus" ) ) [ let dice random 5 if dice = 0 [ set pcolor brown ] if dice = 1 [ set drought 1 set landcover "shrubland" ] ; ideally: set landcover = "shrubland" if dice > 1 [ set age 20 ] ] if ( age > 100 ) and ( precipitation < 450 ) and ( ( landcover = "conifers" ) or ( landcover = "quercus" ) ) [ let dice random 4 if dice = 0 [ set pcolor brown ] if dice = 1 [ set landcover "shrubland" set drought 1 ] ; ideally: set landcover = "shrubland" if dice > 1 [ set age 20 ] ] ] end to change-blue-water ifelse climate-change [ set precipitation ( precipitation - 1.15 ) set ET-conifer ( ET-conifer + 0.03 ) set ET-quercus ( ET-quercus + 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 = "quercus" and managed = "No" ] [ set bwater ( 100 - ET-quercus ) ] 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-quercus mean [bwater] of patches with [ landcover = "quercus" ] set forest-mass (count patches with [ landcover = "conifers" ] + count patches with [ landcover = "quercus" ] + count patches with [ landcover = "shrubland" ]) set dry-conifers ( count patches with [ pcolor = brown and landcover = "conifers" ] / forest-mass ) * 100 ;/ count patches with [ landcover = "conifers" ] ) * 100 set dry-quercus ( count patches with [ pcolor = brown and landcover = "quercus" ] / forest-mass ) * 100 ;/ count patches with [ landcover = "quercus" ] ) * 100 set dry-shrubland ( count patches with [ drought = 1 and landcover = "shrubland" ] / forest-mass ) * 100 set dry-forests (( dry-conifers + dry-quercus ) / 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 5 ] ask traditionalists [ move-to one-of patches with [ belong-to = nobody ] pd set territory patches in-radius (random 7) with [ belong-to = nobody ] ask territory [ set belong-to "traditionalists" set id-owner myself ] set forestsize count territory ] create-multifunctionalists (number-owners * (multi / 100)) [ set color 25 set shape "dot" set size 5 ] ask multifunctionalists [ move-to one-of patches with [ belong-to = nobody ] pd set territory patches in-radius (random 7) with [ belong-to = nobody ] ask territory [ set belong-to "multifunctionalists" set id-owner myself ] set forestsize count territory ] create-environmentalists (number-owners * (envir / 100)) [ set color 45 set shape "dot" set size 5 ] ask environmentalists [ move-to one-of patches with [ belong-to = nobody ] pd set territory patches in-radius (random 7) with [ belong-to = nobody ] ask territory [ set belong-to "environmentalists" set id-owner myself ] set forestsize count territory ] create-passives (number-owners * (passi / 100)) [ set color 125 set shape "dot" set size 5 ] 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 7) with [ belong-to = nobody ] ask territory [ set belong-to "passives" set id-owner myself ] set forestsize count territory ; 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 ] ; ask n-of ((num-of-plans / 100) * number-owners) patches with [id-owner = (random 1000)] [ set management-plan 1 ] ;end ; ############################################################################################################## ; POLICY SUBMODEL ; Each identity responds differently to the policy design to initiate-management if ( dry-forests = 100 ) [ stop ] ask multifunctionalists [ ; 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 ] ;[ ask territory [ manage-long-multi ] ] One-time-payment? [ attrition manage-short ] ; else command [ manage-short ] ) ] ask environmentalists [ ; Multifunctionlists ; If below cost or more ES are on = 50 years, otherwise 15 years (ifelse Below-cost-coverage? [ ]; [ ask territory [ manage-long-multi ] ] No-intermediary? [ ] ;Additional-ES-goal? [ manage-long ] ; not needed One-time-payment? [ attrition manage-long ] ; else command [ manage-long ] ) ] ask traditionalists [ ; Follows neighbours if any? patches in-radius 5 with [managed = "Yes" and belong-to != "traditionalists"] [ manage-short ] ; Traditionalists manage if neighbors do ] end ; For speed reasons ; COMPLETE MANAGEMENT: every 15/35 years there is forest thinning and at 50/100 there is forest cutting to manage-short ; conifers are "managed" every 15-20 years / quercus every 35 (Informe DEMORGEST) ; old conifers are cut and new are planted (every 50 years), 30% following "Baronia Balanc Hidric" if member? ticks short-conifer and landcover = "conifers" [ ; and managed = "No" ;ask territory with [who = myself] [ ; random 2 = 1, but just in case it wants to be increased // ask n-of (int (0.30 * count turtles)) turtles [die] ask n-of (int (0.3 * forestsize)) patches with [id-owner = myself] [ set age (age - age - (50 - ticks)) 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-quercus and landcover = "quercus" [ ;ask territory [ ; random 2 = 1, but just in case it wants to be increased // ask n-of (int (0.30 * count turtles)) turtles [die] ask n-of (int (0.3 * forestsize)) patches with [id-owner = myself] [ set age (age - age - (100 - ticks)) set bwater random (21 - 15 + 1) + 15 ; between 0-5% set drought 0 set managed "Yes" set landcover "quercus" set pcolor 67 ] ] end ; CLOSE-TO-NATURE MANAGEMENT (long-terms) to manage-long if member? ticks long-conifer and landcover = "conifers" [ ask n-of (int (0.15 * forestsize)) patches with [id-owner = myself] [ set age (age - age - (50 - ticks)) 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 long-quercus and landcover = "quercus" [ ask n-of (int (0.15 * forestsize)) patches with [id-owner = myself] [ set age (age - age - (100 - ticks)) set bwater random (21 - 15 + 1) + 15 ; between 0-5% set drought 0 set managed "Yes" set landcover "quercus" set pcolor 67 ] ] end to attrition if member? ticks short-quercus [ let dice random 19 if dice = 0 [ die ] ] 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 are 3 versions of this model.
Attached files
File | Type | Description | Last updated | |
---|---|---|---|---|
mcsc_raster.asc | extension | GIS map (required to run the model) | over 4 years 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' | over 4 years ago, by Eulalia Baulenas | Download |
This model does not have any ancestors.
This model does not have any descendants.