SESPES: socio-ecological systems and payment for ecosystem services model
Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)
Socio-ecological systems and payment for environmental systems model
The socio-ecological systems and payment for environmental systems model (SESPESModel) is an ecosystem simulation with autonomous agents (individuals) in a dynamic environment. The aim of the model is to obseve the response of these individuals, forest owners, to an incentive policy. We use the results of ecological models to establish the ecological system, and our main interest resides in observing how forest owners respond under different policy designs. We base the decision-making process of these individuals on behavioral models of forest owners and the design of the policy in a literature review.
How to use it
Create world
To start the simulation, you have to create an environment first. In the documents section you can download the GIS map on your computer and change the origin of the file in the main code (ecosystem submodel). Then, click on 'Create world' on the right. The basic scenario (e.g. initial rain), is based on the characteristics of the area. You can change settings in the section in case you want to perform the model on other conditions.
Individuals
The second step is to add the forest owners in the landscape. You can input the number of owners, and the percentages of different owner types. The percentages have to sum up 100, otherwise an error message occurs. The different forest owners categories own a random number of hectarees, which are patches. With the original set-up, a patch is approximatedly 1,8 ha. They own a random number of ha, ranging from 0 to 25.
Policy settings
The policy submodel suggests different designs for the incentive policy. When you use the program with the original settings, the optimal design has been established (all switch bottons are "off"). You can change the settings before pressing the 'Go' bottom to observe how this influences the outcomes on the ecological and the social systems.
Starting a model run
When environment and individuals are generated, you can start the simulation by clicking on 'Go'. The observer will give you a number. This number shall be 100 and it is the sum of all land types (forest types, water). This is a check-up. When the model is running, it is recommended not to change the settings. The changes in the environment take some decades to be observed. These changes are: trees turn brown, indicating forest decay, and the plots evolve to show the situation.
Stopping a model run
The model will run forever until the user decides to stops it or the number of 'brown' trees is 100%. Output of the model can be the plots and the number of ha managed by the different stakeholder categories. You can save these data and perform further plottings in R or other statitical software.
Author
Eulalia Baulenas (2020) eulalia.baulenas@ifp.uni-freiburg.de
Faculty of Forest and Environmental Policy University of Freiburg Germany
Comments and Questions
;__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) | about 5 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' | about 5 years ago, by Eulalia Baulenas | Download |
This model does not have any ancestors.
This model does not have any descendants.