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 over 9 years ago

clubs 

Tagged by Author Author over 9 years ago

international cooperation 

Tagged by Author Author over 9 years ago

side-payments 

Tagged by Author Author over 9 years ago

Visible to everyone | Changeable by the author
Model was written in NetLogo 5.0.4 • Viewed 513 times • Downloaded 32 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 over 9 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 over 9 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' over 9 years ago, by Author Author Download
Output_GCP.txt data Input data that must be saved in the same folder as the model. over 9 years ago, by Author Author Download

This model does not have any ancestors.

This model does not have any descendants.