Basic Income - Individuals

Basic Income - Individuals preview image

1 collaborator

Default-person Sarah Robertson (Author)

Tags

economics 

Tagged by Sarah Robertson over 5 years ago

Visible to everyone | Changeable by everyone
Model was written in NetLogo 6.0.4 • Viewed 415 times • Downloaded 20 times • Run 0 times
Download the 'Basic Income - Individuals' modelDownload this modelEmbed this model

Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)


Info tab cannot be displayed because of an encoding error

Comments and Questions

Please start the discussion about this model! (You'll first need to log in.)

Click to Run Model

globals
[
  gini-index-reserve
  lorenz-points
  max-wealth
  min-wealth
  max-income
  min-income
  monthly-bi
  max-indiv-cost-of-living
]

patches-own
[
  patch-income      ;; the current amount of income on this patch
  monthly-income
]

turtles-own
[
  wealth    ;; the amount of money a turtle has
  after-tax ;; amount of income left after paying taxes
  min-indiv-cost-of-living ;; individual minimum cost of living based on minimum set on interface
]

;;;
;;; SETUP AND HELPERS
;;;

to setup
  clear-all
  ;; call other procedures to set up various parts of the world
  setup-patches
  setup-turtles
  update-lorenz-and-gini
  reset-ticks
end 

;; set up the initial amounts of income each patch has

to setup-patches
  ;; set up patch income random amount between 0 and upper limit of income
  ;; set colour so richer patches have darker colour (in quintiles)
  ask patches
    [ if income-distribution = "random"
      [
        set patch-income random (mean-annual-income * 2)
      ]
      if income-distribution = "normal"
      [
        set patch-income random-normal  mean-annual-income (mean-annual-income / 2) ;; latter value is an estimate of the standard deviation based on what the curve looks like
      ]
      if income-distribution = "exponential"
      [
        set patch-income random-exponential (mean-annual-income)
      ]
      if patch-income < 0
      [
        set patch-income 0
      ]
      set max-income max [ patch-income ] of patches       ;; find highest income
      if patch-income < max-income * 1 / 5 [ set pcolor 58 ]   ;; colour patches based on income levels
      if patch-income >= max-income * 1 / 5 and patch-income < max-income * 2 / 5 [ set pcolor 57 ]
      if patch-income >= max-income * 2 / 5 and patch-income < max-income * 3 / 5 [ set pcolor 56 ]
      if patch-income >= max-income * 3 / 5 and patch-income < max-income * 4 / 5 [ set pcolor 55 ]
      if patch-income >= max-income * 4 / 5 [ set pcolor 54 ]
  ]
end 

;; set up the initial values for the turtle variables

to setup-turtles
  set-default-shape turtles "person"
  create-turtles num-people
  ask turtles [
    move-to one-of patches with [not any? turtles-here]
    ifelse allow-varied-min-cost-of-living [
    set min-indiv-cost-of-living random-normal min-monthly-cost-of-living (min-monthly-cost-of-living / 6)
      set max-indiv-cost-of-living max [min-indiv-cost-of-living] of turtles ]
    [set min-indiv-cost-of-living min-monthly-cost-of-living]
    if inheritance-distribution = "random"     ;; wealth
    [
      set wealth random (mean-inheritance * 2)
    ]
    if inheritance-distribution = "normal"
    [
      set wealth random-normal mean-inheritance (mean-inheritance / 4) ;; latter value is an estimate of the standard deviation
    ]
    if inheritance-distribution = "exponential"
    [
      set wealth random-exponential (mean-inheritance)
    ]
    if wealth <= 0
    [
      set wealth 1
    ]
    color-turtles
    if inheritance-tax = "flat"                     ;; wealth tax happens once at beginning (if it happens at all)
    [ set wealth wealth * ( 1 - max-tax-rate / 100 ) ]
    if inheritance-tax = "progressive"
    [ if color = 1 [ set wealth wealth * (1 - max-tax-rate / 100) ]
      if color = 2 [ set wealth wealth * (1 - 0.8 * max-tax-rate / 100) ]
      if color = 3 [ set wealth wealth * (1 - 0.6 * max-tax-rate / 100) ]
      if color = 4 [ set wealth wealth * (1 - 0.4 * max-tax-rate / 100) ]
      if color = 5 [ set wealth wealth * (1 - 0.2 * max-tax-rate / 100) ]
    ]
    set monthly-income patch-income / 12
    face one-of neighbors4
  ]
end 

;;;
;;; GO AND HELPERS
;;;

to go
  ask turtles
  [
    upgrade-income   ;; move to neighbouring patch if it has more income
    update-wealth    ;; add net income to wealth
    color-turtles    ;; set colour according to wealth quintile
  ]
  update-lorenz-and-gini
  set min-income min [ patch-income ] of patches
  set min-wealth min [ wealth ] of turtles
  tick
end 

to go-ten-years
  ask turtles
  [
    upgrade-income   ;; move to neighbouring patch if it has more income
    update-wealth    ;; add net income to wealth
    color-turtles    ;; set colour according to wealth quintile
  ]
  update-lorenz-and-gini
  tick
  if ticks = 120
  [
    reset-ticks
    stop
  ]
end 


;; determine the direction which is most profitable for each turtle in
;; the surrounding patches within one patch
;; the only way I could get this to work was to have them just check one direction per tick

to upgrade-income  ;; turtle procedure
  let patch-income-ahead patch-income-at-angle 0
  ;; if patch ahead has a higher income, go to it; and either way, rotate right 90°
  if (patch-income-ahead > patch-income)
  [ if not any? other turtles-on patch-ahead 1
    [ forward 1 ]]
  rt 90
  set monthly-income patch-income / 12
end 

;; check out which neighbouring patch has the highest income (cribbed from ants)

to-report patch-income-at-angle [angle]
  let p patch-right-and-ahead angle 1
  report [patch-income] of p
end 

;; add monthly income to wealth and subtract cost of living; grade cost of living to income if high enough

to update-wealth
  ;; set income tax rate: after-tax = proportion of income left after paying taxes
  if income-tax = "none" [ set after-tax 1 ]
  if income-tax = "flat" [ set after-tax 1 - max-tax-rate / 100 ]
  if income-tax = "progressive with loopholes for rich"
  [ if pcolor = 54 [ set after-tax 1 - 0.6 * (max-tax-rate / 100) ]
    if pcolor = 55 [ set after-tax 1 - 0.8 * (max-tax-rate / 100) ]
    if pcolor = 56 [ set after-tax 1 - 0.6 * (max-tax-rate / 100) ]
    if pcolor = 57 [ set after-tax 1 - 0.4 * (max-tax-rate / 100) ]
    if pcolor = 58 [ set after-tax 1 - 0.2 * (max-tax-rate / 100) ]
  ]
  if income-tax = "progressive no loopholes for rich"
  [ if pcolor = 54 [ set after-tax 1 - 1.0 * (max-tax-rate / 100) ]
    if pcolor = 55 [ set after-tax 1 - 0.8 * (max-tax-rate / 100) ]
    if pcolor = 56 [ set after-tax 1 - 0.6 * (max-tax-rate / 100) ]
    if pcolor = 57 [ set after-tax 1 - 0.4 * (max-tax-rate / 100) ]
    if pcolor = 58 [ set after-tax 1 - 0.2 * (max-tax-rate / 100) ]
  ]
  ;; set redistribution
  if income-redistribution = "none"
  [
    set monthly-bi 0
  ]
  if income-redistribution = "universal demogrant"   ;; give everyone the same top-up
  [
    set monthly-bi max-bi / 12
  ]
  if income-redistribution = "NIT with clawback"   ;; calculate partial BI after clawback
  [
    set monthly-bi max-bi / 12
    ifelse (monthly-income * after-tax * (clawback / 100)) < monthly-bi   ;; is after tax income too high with clawback?, if not proceed
    [
      set monthly-bi monthly-bi - (monthly-income * after-tax * (clawback / 100))
    ]
    ;; for NIT, if after-tax income is too high, don't give a BI
    [
      set monthly-bi 0
    ]
  ]
  ;; calculate new wealth
  ifelse ((monthly-bi + (monthly-income * after-tax)) * 3 / 4) < min-indiv-cost-of-living ;; deduct cost of living
  [set wealth wealth + monthly-bi + (monthly-income * after-tax) - min-indiv-cost-of-living ]
  [set wealth wealth + monthly-bi + (monthly-income * after-tax / 4) ]
end 

to color-turtles
  set max-wealth  max [ wealth ] of turtles
    if wealth < max-wealth / 5
    [ set color 5 ]
    if (wealth >= max-wealth / 5 and wealth < max-wealth * 2 / 5)
    [ set color 4 ]
    if (wealth >= max-wealth * 2 / 5 and wealth < max-wealth * 3 / 5)
    [ set color 3 ]
    if (wealth >= max-wealth * 3 / 5 and wealth < max-wealth * 4 / 5)
    [ set color 2 ]
    if (wealth >= max-wealth * 4 / 5)
    [ set color 1 ]
    if wealth <= 0
    [ set wealth 1
      set color red
    ]
end 

;; this procedure recomputes the value of gini-index-reserve
;; and the points in lorenz-points for the Lorenz and Gini-Index plots

to update-lorenz-and-gini
    let sorted-wealths sort [wealth] of turtles
  let total-wealth sum sorted-wealths
  let wealth-sum-so-far 0
  let index 0
  set gini-index-reserve 0
  set lorenz-points []

  ;; now actually plot the Lorenz curve -- along the way, we also
  ;; calculate the Gini index.
  ;; (see the Info tab for a description of the curve and measure)
  repeat count turtles [
    set wealth-sum-so-far (wealth-sum-so-far + item index sorted-wealths)
    set lorenz-points lput ((wealth-sum-so-far / total-wealth) * 100) lorenz-points
    set index (index + 1)
    set gini-index-reserve
      gini-index-reserve +
      (index / num-people) -
      (wealth-sum-so-far / total-wealth)
  ]
end 


; Copyright 1998 Uri Wilensky and 2018 Sarah Robertson
; See Info tab for full copyright and license.

There is only one version of this model, created over 5 years ago by Sarah Robertson.

Attached files

File Type Description Last updated
Basic Income - Individuals.png preview Preview for 'Basic Income - Individuals' over 5 years ago, by Sarah Robertson Download

This model does not have any ancestors.

This model does not have any descendants.