Climate clubs and side-payments

Climate clubs and side-payments preview image

1 collaborator

Default-person Author Author (Author)

Tags

climate change 

Tagged by Author Author almost 10 years ago

clubs 

Tagged by Author Author almost 10 years ago

international cooperation 

Tagged by Author Author almost 10 years ago

side-payments 

Tagged by Author Author almost 10 years ago

Visible to everyone | Changeable by the author
Model was written in NetLogo 5.0.4 • Viewed 600 times • Downloaded 36 times • Run 0 times
Download the 'Climate clubs and side-payments' 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

Please note:

The file named "Output_GCP.txt" must be stored in the same folder as the model. It contains input data. The file can be downloaded under the "Files" tab.

Posted almost 10 years ago

Click to Run Model

globals [patch-data countries donors new-volunteers new-bribees new-exits weightedavgnd-gain gross-bribe enthusiast-left]

patches-own [enthusiast member benefit payoff emissions emissions-r gdp gdp-r nd-gain vulnerability mdc population WTA WTB WTB/WTA WTB-WTA bribe]

to setup
  ca
  reset-ticks
  resize-world 0 14 0 9
  use-data
  set countries patches with [emissions-r > 0]                                                                        ; ignores the patches with negative emissions, and empty patches.
  ask patches with [emissions-r <= 0][set pcolor white]
  set-enthusiasm
  
  ask countries [
    set gdp gdp-r / sum [gdp-r] of countries                                                                          ; these are adjusted values so that they sum to one. gdp-r sums to .98 due to missing data
    set emissions emissions-r / sum [emissions-r] of countries
  ]
  
  who-pays
  set-damage-costs  
  
  ask countries with [enthusiast = 1][
    set member 1 
    set pcolor green
  ]
  ask countries with [enthusiast = 0] [
    set member 0
    ]
end 

to use-data
file-open "Output_GCP.txt"                                                                                              ; THIS DATA FILE MUST BE STORED IN THE SAME FOLDER AS THE MODEL
set patch-data []
while [not file-at-end?]
[
 set patch-data sentence patch-data (list (list file-read file-read file-read file-read file-read file-read file-read))
]
file-close
foreach patch-data [ask patch first ? item 1 ? [set plabel item 2 ? set emissions-r item 3 ? set gdp-r item 4 ? set nd-gain item 5 ? set population item 6 ?]]
end 

to set-damage-costs
  ifelse vulnerability-index = true [
  set weightedavgnd-gain (sum [nd-gain * (gdp / mean [gdp] of countries)] of countries) / count countries               ; this calculates the nd-gain avg weighted by gdp for use below
  
  ask countries[                                                                                                        ; this calculates vulnerability and mdc so that global damages sum to globalMDC. based on above avg nd-gain which is weighed by gdp
    set vulnerability (nd-gain + (vulnerability-weight - 1) * (nd-gain - weightedavgnd-gain)) /  weightedavgnd-gain 
    set mdc globalMDC * vulnerability
  ]
  ][
  ask countries [
    set mdc globalMDC
  ] 
  ]
end 

to who-pays                                                                                                             ; determinse whether only enthusiasts or all members can contribute to side-payments
  ifelse only-enthusiasts-pay = false[
     set donors countries
  ][
     set donors countries with [enthusiast = 1]
  ]
end 

to go                                                                                                                   ; THE OVERARCHING PROCEDURE. BELOW ARE SUB-PROCEDURES.
  tick
  if count countries with [member = 0] > 0 [ 
    join-or-leave                                                                                                       ; this loops until no more volunteers want to join (volunteering is rare in this model)
  ]
  if new-volunteers = 0 and count countries with [member = 1] > 0 and side-payment = true [                             ; each negotiation stage is a tick. side payments will only be offered when no more states want to join voluntarily
    side-payments  
    ]
  if new-volunteers = 0 and new-bribees = 0 [                                                                           ; once no more countries can be bribed into the club, enthusiasts consider leaving
    enthusiasts-leave
  ]
  ask countries [
    calculate-payoff
  ]
end 

to join-or-leave                                                                                                        ; This procedure checks whether anyone has incentive for unilater action (rarely the case)
  set new-volunteers 0                                                                                                  ; this is a counter to determine when to enter next stage
  ask countries with [member = 0][
    calculate-benefit
    ]
  
  ask max-one-of countries with [member = 0][benefit - 1][
    if benefit > 1[                                                                                                     ; measured in % of gdp
      set member 1 set pcolor blue
      set new-volunteers new-volunteers + 1
      ]
  ]
end 

to side-payments                                                                                                        ;This is the side-payment procecure
    set new-bribees 0
  if count countries with [member = 0 ] = 0 [stop]
  ask countries with [member = 0][                                                                                      ; it is repeated for every non-member in random order
    calculate-benefit
    set WTA (1 - benefit) * gdp                                                                                         ; WTA is compensation needed to join, measured in aboslute terms (% of ggp)
    calculate-WTB                                                                                                       ; this calls a sub-procedure that calculates each potential donor's benefit if a given non-member joins.
    ifelse equity = false[                                                                                              ; the procedure differs depending on whether the "equity" option is chosen
      set WTB/WTA sum [WTB * gdp] of donors with [member = 1] / WTA                                                     ; ratio between club WTB and entrant WTA. can be moved to ask max-one-of to speed up the model
      set WTB-WTA sum [WTB * gdp] of donors with [member = 1] - WTA                                                     ; difference between WTA and club WTB, measured in % of ggp
      ][
      set WTB/WTA sum [WTB * gdp] of donors with [member = 1 and (gdp / population) > [gdp / population] of myself] / WTA
      set WTB-WTA sum [WTB * gdp] of donors with [member = 1 and (gdp / population) > [gdp / population] of myself] - WTA
      ] 
  ] 
  
  ask donors [set WTB 0]                                                                                                ; reset needed for technical reasons
  
  ask max-one-of countries with [member = 0] [WTB-WTA][                                                                  ; the entrant giving the largest net benefits enters first
    if WTB/WTA > 1 [                                                                                                     ; it will only enter if both it and the club can benefit from it. this could be expressed in terms of WTB-WTA too.
      calculate-WTB
      ifelse equity = false [                                                                                            ; the procedure differs depending on whether the "equity" option is chosen
        ask donors with [member = 1][
          set bribe bribe - WTB * gdp / [WTB/WTA] of myself                                                              ; donors share the cost according to their benefit from expansion (See Barrett 2001)
        ]                                                                                                                ; "bribe" is negative for those who pay. It measures accumulated bribes, in absolute terms (% of GGP)
         ][
        let members-richer-than-entrant donors with [member = 1 and (gdp / population) > [gdp / population] of myself]   ; if "equity" is on, only the members richer than the entrant share the cost
        ask members-richer-than-entrant[
          set bribe bribe - WTB * gdp / [WTB/WTA] of myself                                                             
        ]                                                                                                                ; end most likely entrant asks members
        ]
      set member 1
      set pcolor orange
      set bribe bribe + WTA                                                                                              ; "bribe" is negative for those who pay. It measures accumulated bribes, in absolute terms (% of GGP)
      print WTA * 755.9                                                                                                  ; to convert from % of GGP to US$, multiply by 755.9, as GGP 2013 in current US$  was 75.59 trillion (worldbank.org)
      set gross-bribe gross-bribe + WTA * 755.9                                                                          ; this is a checker
      set new-bribees new-bribees + 1
    ]
  ]                                                                                                                      ; end if pareto improvements are possible
  ask countries with [bribe < 0]                                                                                         ; actors who make net side-payments have their names displayed in black
     [set plabel-color 0]       
end 

to enthusiasts-leave
     ask countries with [enthusiast = 1][
      calculate-payoff
      if payoff < (- mdc) [                                                                                              ; payoff in the non cooperative outcome
           set member 0
           set pcolor grey
           set enthusiast 0
           set enthusiast-left 1                                                                                         ; enthusiasts leave the club
           ]
         ]
      ask countries with [pcolor = orange][
      calculate-benefit
      if benefit < 1 [ 
          set pcolor red                                                                                                 ; those who require continous bribes are red
      ]
    ]
    if enthusiast-left = 1 [                                                                                             ; if enthusiasts leave, those who no longer benefit, leave too. New negotiations will start if there are remaining enthusiasts.
       ask countries with [member = 1 and enthusiast = 0] [ 
          calculate-benefit
          if benefit < 1 [
            set member 0
            set pcolor black                                                                                             
        ]
        ]
       set enthusiast-left 0
       ask countries [set bribe 0]                                                                                       ; bribe is reset to allow new negotiations to start.
    ]
end 

to calculate-benefit                                                                                                     ; benefit is measured in % of gdp
    set benefit mdc * emissions
end 

to calculate-WTB                                                                                                         ; WTB is measured in % of gdp, so must often be multiplied by gdp when used 
  ask donors with [member = 1][                                                                                          ; the potential entrant asks members
      set WTB mdc * [emissions] of myself
      ]
end 

to calculate-payoff                                                                                                      ; measured in % of gdp. Payoff is normalized to be (- Damage cost) in the BAU, and (-Club fee) if all countries are club members.
  ifelse member = 1[
      set payoff  (- 1) - mdc * (sum [emissions] of countries with [member = 0]) + bribe / gdp][                         ; payoff for members
      set payoff  (- mdc) * sum [emissions] of countries with [member = 0]                                               ; payoff for non-members
        ]
end 

to set-enthusiasm
  ask patches with [plabel = "China"][set enthusiast china-enthusiast]
  ask patches with [plabel = "United States"][set enthusiast usa-enthusiast]
  ask patches with [plabel = "European Union"][set enthusiast eu-enthusiast]
  ask patches with [plabel = "Russian Federation"][set enthusiast russia-enthusiast]
  ask patches with [plabel = "India"][set enthusiast india-enthusiast]
  ask patches with [plabel = "Brazil"][set enthusiast brazil-enthusiast]
  ask patches with [plabel = "Japan"][set enthusiast japan-enthusiast]
  ask patches with [plabel = "Indonesia"][set enthusiast indonesia-enthusiast]
  ask patches with [plabel = "Australia"][set enthusiast australia-enthusiast]
  ask patches with [plabel = "Iran, Islamic Rep."][set enthusiast iran-enthusiast]
  ask patches with [plabel = "Canada"][set enthusiast canada-enthusiast]
  ask patches with [plabel = "Mexico"][set enthusiast mexico-enthusiast]
  ask patches with [plabel = "Korea, Rep."][set enthusiast korea-enthusiast]
  ask patches with [plabel = "South Africa"][set enthusiast sa-enthusiast]
end 

There is only one version of this model, created almost 10 years ago by Author Author.

Attached files

File Type Description Last updated
Climate clubs and side-payments.png preview Preview for 'Climate clubs and side-payments' almost 10 years ago, by Author Author Download
Output_GCP.txt data Input data that must be saved in the same folder as the model. almost 10 years ago, by Author Author Download

This model does not have any ancestors.

This model does not have any descendants.