Evolution of sustainability through monitoring and punishment
      Model was written in NetLogo 6.1.1 
      • 
      Viewed 757 times
      • 
      Downloaded 37 times
      • 
      Run 0 times
    
    
    
      Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)
Model Information and Materials
Model Google Drive Link: https://drive.google.com/open?id=1hWnj2NiNJ6YGmRDYOAMDVXY61kF-MB1M
Model GUI overview: https://drive.google.com/open?id=1Ji6_MOWL6SRLqeuGGP7zGLzS8yfrnVKn
References and Citation
For this model:
- Hanisch, S. (2017). Evolution, resources, monitoring and punishment. GlobalESD NetLogo Models. http://NetLogo.GlobalESD.org,
For the NetLogo-Software:
- Wilensky, U. (1999). NetLogo. http://ccl.northwestern.edu/netlogo/. Center for Connected Learning and Computer-Based Modeling, Northwestern University, Evanston, IL.
Licence

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. http://creativecommons.org/licenses/by-nc-sa/4.0/
Comments and Questions
  Please start the discussion about this model!
  (You'll first need to log in.)
      
    Click to Run Model
  
turtles-own [
  harvestPref
  harvest-amount
  punisher?
  aware-of-who
  energy
  harvest
  punished?
  rs
     ]
patches-own [ resource ]
globals [
  commons
  commonsResources
  harvestTraits
   ]
to setup
  clear-all
   ask n-of Number-Agents patches [
    sprout 1 [
    set shape "circle"
      set size 0.8
      set punished? false
      set aware-of-who []
      set rs 0
    ifelse random-float 100 < Percent-Sustainables
     [set harvestPref "low"]  ;; determine the harvest preference (high or low)
     [set harvestPref "high"]
    ifelse random-float 100 < Percent-Punishers
     [set punisher? true]  ;; determine the harvest preference (high or low)
     [set punisher? false]
    update-color  ;; change the color of the agent on the basis of the strategy
    set energy Living-costs + 1]
  ]
  ask patches [
    set resource Carrying-capacity
    set pcolor scale-color brown resource  0 (Carrying-capacity + 30) ]
  reset-ticks
end 
;;;;;;; Main routine ;;;;;;
to go
  if count turtles = 0 [stop]
  ask turtles
   [ifelse harvestPref = "low"
      [set harvest-amount Harvest-sustainable]
      [ set harvest-amount Harvest-greedy]
    set aware-of-who []
    harvesting
   ]
    sense-cheaters
    punish
   ask turtles
  [ set energy energy + harvest
    expend-energy
    reproduce
    death]
  ask patches [
    regrow
    recolor]
  tick
end 
to harvesting
 ifelse Punishment = "suspend harvest once"
  [ifelse punished? = false
    [harvest-commons]
    [set harvest 0]
   ]
  [harvest-commons]
  set punished?  false
end 
to harvest-commons  ;; from Waring et al., 2017
   set harvest 0
      ; define the patches withing the local Moore neighborhood on which the current agent may harvest.
      set Commons (patch-set neighbors patch-here) ;; set list of patches to harvest from to include all neighboring patches
      set commonsResources sum ([resource] of Commons)  ;; sums all of the resources in my commons
      let commonsList sort-on [resource] Commons  ;; sort the list by the amount of resource on the patch
      set commonsList reverse commonsList  ;; reverse the sort list so it is largest to smallest
      ifelse commonsResources < harvest-amount  ;; if the total commons are less than what the agent wants to harvest
      [ set harvest (commonsResources); - ( count myCommons * 0.1 ))
        ask Commons [ set resource 0 ]
        move-away
      ]
      [
        while [harvest < harvest-amount][  ;; while you are still in need
        ;; harvest some resource from the neighborhood
          foreach commonsList [ ?1 ->
            ifelse [resource] of ?1 <= (harvest-amount - harvest)
              [set harvest (harvest + [resource] of ?1 )
               ask ?1 [set resource 0]
              ]
              [ask ?1 [
                set resource (resource - ([harvest-amount] of myself - [harvest] of myself))
              ]
                set harvest harvest-amount
              ]
          ]  ;; end foreach
        ]  ;; end while
     ] ;; end second part of ifelse commonsResources
end 
to move-away
  let next-patch max-one-of (neighbors with [not any? turtles-here]) [resource]
  if next-patch != nobody
    [move-to next-patch
     set energy energy - 1
     ]
end 
to sense-cheaters
  ask turtles with [punisher? = true]
   [ set harvest harvest - Costs-perception
     let cheaters  (turtles-on neighbors) with [harvestPref = "high"]
     set aware-of-who n-of  ( Perception-accuracy  / 100 * count cheaters) cheaters
   ]
end 
to punish
  ask turtles with [ harvestPref = "high" and punished? = false]
  [let punishers  (turtles-on neighbors) with [ member? myself [aware-of-who] of self]
    if any? punishers
   [ set punished? true
      if Punishment = "kill"[die]
      if Punishment = "pay fine"
       [set harvest harvest  - Fine
        set punished? false
        ask turtles-on neighbors [set harvest harvest  + (Fine / (count turtles-on neighbors) )]
       ]
      ask punishers [
        set harvest harvest  - ( Costs-punishment / count punishers)
      ]
     ]
  ]
end 
to expend-energy
  set energy energy - Living-costs
end 
to reproduce
  let birthrate 0.001 * energy
  if random-float 1 < birthrate [
    let destination one-of neighbors with [not any? turtles-here]
    if destination != nobody [
        hatch 1 [
        move-to destination
        set punished? false
        set aware-of-who []
        mutate
        set energy ([energy] of myself / 2)]
       ]
    set energy (energy / 2)
          ]
end 
;; modify the children of agents according to the mutation rate
to mutate  ;; turtle procedure
    if random-float 100 < Mutation-rate
    [
    ifelse harvestPref = "high"
    [set harvestPref "low"]
    [set harvestPref "high"]
    ]
    if random-float 100 < Mutation-rate
    [ ifelse punisher? = true
    [set punisher?  false]
    [set punisher?  true ]
    ]
   update-color
end 
to update-color
   ifelse harvestPref = "low"
      [ ifelse punisher? = true
        [set color green ]
        [set color turquoise]
      ]
      [ ifelse punisher? = true
          [set color orange ]
          [set color red]
      ]
end 
to death
    if energy <= 0 [ die ]
    if random-float 100 < Death-rate [ die ]
end 
to regrow
  ifelse resource > 0
  [set resource ceiling (resource + ((Growth-rate * resource) * (1 - (resource / Carrying-capacity )))) ]
  [set resource 0.1 ]
end 
to recolor
  set pcolor scale-color brown resource  0 (Carrying-capacity + 30)
end 
There is only one version of this model, created over 4 years ago by Susan Hanisch.
Attached files
| File | Type | Description | Last updated | |
|---|---|---|---|---|
| Evolution of sustainability through monitoring and punishment.png | preview | Preview for 'Evolution of sustainability through monitoring and punishment' | over 4 years ago, by Susan Hanisch | Download | 
This model does not have any ancestors.
This model does not have any descendants.
 
  Download this model
Download this model