Basic Income - Seniors/Disabled
Model was written in NetLogo 6.0.4
•
Viewed 248 times
•
Downloaded 15 times
•
Run 0 times
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 extra-cost num-abled num-seniors-disabled ] 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 ] breed [seniors-disabled senior-disabled] breed [abled an-abled] ;;; ;;; SETUP AND HELPERS ;;; to setup clear-all ;; call other procedures to set up various parts of the world setup-patches setup-turtles set extra-cost 1.33 ;; enter the higher cost of living for seniors and disabled here, it should be 1.something for higher costs 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 abled "person" set-default-shape seniors-disabled "person-cane" set num-seniors-disabled num-people * .26 ;; amount of seniors and disabled from internet for Canada set num-abled num-people - num-seniors-disabled create-seniors-disabled num-seniors-disabled create-abled num-abled 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 seniors-disabled [ upgrade-income ;; move to neighbouring patch if it has more income update-wealth-seniors-disabled ;; add net income to wealth color-turtles ;; set colour according to wealth quintile ] ask abled [ upgrade-income ;; move to neighbouring patch if it has more income update-wealth-abled ;; 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 seniors-disabled [ upgrade-income ;; move to neighbouring patch if it has more income update-wealth-seniors-disabled ;; add net income to wealth color-turtles ;; set colour according to wealth quintile ] ask abled [ upgrade-income ;; move to neighbouring patch if it has more income update-wealth-abled ;; 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-abled ;; set income tax rate: after-tax = proportion of income left after paying taxes after-tax-proportion ;; 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-monthly-cost-of-living ;; deduct cost of living [set wealth wealth + monthly-bi + (monthly-income * after-tax) - min-monthly-cost-of-living ] [set wealth wealth + monthly-bi + (monthly-income * after-tax / 4) ] end to update-wealth-seniors-disabled ;; set income tax rate: after-tax = proportion of income left after paying taxes after-tax-proportion ;; set monthly-income as percentage of abled monthly-income depending on slider set monthly-income patch-income * s-d-income-reduction / 1200 ;; 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 * (1 + seniors-top-up / 100) / 12 ] if income-redistribution = "NIT with clawback" ;; calculate partial BI after clawback [ set monthly-bi max-bi * (1 + (seniors-top-up / 100)) / 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-monthly-cost-of-living * extra-cost ;; deduct cost of living [set wealth wealth + monthly-bi + (monthly-income * after-tax) - min-monthly-cost-of-living * extra-cost ] [set wealth wealth + monthly-bi + (monthly-income * after-tax / 4) ] end to after-tax-proportion ;; 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) ] ] 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 - Seniors/Disabled.png | preview | Preview for 'Basic Income - Seniors/Disabled' | over 5 years ago, by Sarah Robertson | Download |
This model does not have any ancestors.
This model does not have any descendants.