globals [ gini-index-reserve lorenz-points tax_revenue benefit] turtles-own [wealth hours income consumption% consumption wage netIncome tax pretentious humble leisure utility maxIncome maxConsumption h] to setup clear-all setup-turtles set-turtles-position update-lorenz-and-gini reset-ticks end to setup-turtles set-default-shape turtles "person" crt num-people [ifelse (random-float 1 < 0.05) [set wage 0] [set wage 5 + random 10] set wealth random-float 10.0 set leisure 5 + random-float 10 set consumption% 0.9 set size 3] ask n-of num-pretentious turtles [set pretentious "yes" set humble "no"] ask turtles with [pretentious != "yes"] [set pretentious "no"] ask n-of num-humble turtles with [pretentious = "no"] [set humble "yes"] ask turtles with [humble != "yes"] [set humble "no"] recolor-turtles end to recolor-turtles let max-wealth max [wealth] of turtles ask turtles [ ifelse (wealth <= max-wealth / 3) [ set color red ] [ ifelse (wealth <= (max-wealth * 2 / 3)) [ set color green ] [ set color blue ] ] ] end to set-turtles-position let side sqrt num-people let step max-pxcor / side let an 0 let x 0 let y 0 while [an < num-people] [if x > (side - 1) * step [set y y + step set x 0] ask turtle an [setxy x y] set x x + step set an an + 1 ] end to go ask turtles [ update pay-taxes ] collect-and-distribute-taxes define-netincome-for-non-taxpayers-and-non-subsidy-beneficiary update-pretentious-and-humbles ask turtles [ save-consume get-a-raise_get-a-cut_get-hired_get-fired choose-hours ] recolor-turtles update-lorenz-and-gini tick end to update ;turtle procedure set maxIncome wage * 12 set income hours * wage set maxConsumption consumption% * maxIncome end to pay-taxes ;turtle procedure ifelse (income > income_bracket) [set tax Tax_Rate * (income - income_bracket) set netIncome income - tax] [set tax 0] end to collect-and-distribute-taxes set tax_revenue sum [tax] of turtles if (count turtles with [income < benefit_bracket] > 0) [set benefit tax_revenue / (count turtles with [income < benefit_bracket])] ask turtles with [income < benefit_bracket] [set netIncome income + benefit ] end to define-netincome-for-non-taxpayers-and-non-subsidy-beneficiary ask turtles with [income >= benefit_bracket and income <= income_bracket] [set netIncome income] end to update-pretentious-and-humbles ask turtles with [pretentious = "yes"] [ if (consumption < max [consumption] of turtles in-radius 4 and consumption% < 0.98) [set consumption% consumption% + 0.04] if ((wage * hours * 0.9) >= max [consumption] of turtles in-radius 4 and consumption% > 0.9) [set consumption% 0.9] ] ask turtles with [humble = "yes"] [ if (consumption > mean [consumption] of turtles in-radius 4 and consumption% > 0.7) [set consumption% consumption% - 0.04] if ((wage * hours * 0.9) <= mean [consumption] of turtles in-radius 4 and consumption% < 0.9) [set consumption% 0.9] ] end to save-consume set consumption consumption% * netIncome set wealth wealth + netIncome - consumption end to get-a-raise_get-a-cut_get-hired_get-fired ;turtle procedure let p random-float 1 if (p > 0.9 and wage < 15 and wage >= 5) [set wage wage + 1] if (p > 0.9 and wage = 0) [set wage 5] if (p < 0.1 and wage > 5) [ set wage wage - 1 ] if (p < 0.1 and wage = 5) [ set wage 0] end to choose-hours ;turtle procedure set h 0 let best-hours h let best-utility such-utility let utility0 such-utility repeat 3 [ set h h + 4 if (such-utility > best-utility) [ set best-hours h set hours best-hours;;; set best-utility such-utility] ] if (utility0 = best-utility) [set best-hours 0 set hours best-hours set best-utility such-utility] set utility best-utility end to-report such-utility let i h * wage if (i < benefit_bracket) [set i i + benefit] if (i > income_bracket) [set i i - (Tax_rate * (i - income_bracket))] let c i * consumption% let u c * (maxConsumption - h * leisure) report u end 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 [] repeat num-people [ 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 @#$#@#$#@ GRAPHICS-WINDOW 179 10 424 203 -1 -1 3.18 1 10 1 1 1 0 1 1 1 0 50 0 50 1 1 1 ticks 30.0 BUTTON 5 181 81 214 setup setup NIL 1 T OBSERVER NIL NIL NIL NIL 1 BUTTON 102 181 172 214 go go T 1 T OBSERVER NIL NIL NIL NIL 1 SLIDER 2 10 174 43 num-people num-people 200 300 200 1 1 NIL HORIZONTAL PLOT 353 138 584 271 Class Histogram Classes Turtles 0.0 3.0 0.0 250.0 false false "set-plot-y-range 0 num-people" "" PENS "default" 1.0 1 -2674135 true "" "plot-pen-reset\nset-plot-pen-color red\nplot count turtles with [color = red]\nset-plot-pen-color green\nplot count turtles with [color = green]\nset-plot-pen-color blue\nplot count turtles with [color = blue]" PLOT 9 215 169 341 Lorenz Curve Pop % Wealth % 0.0 100.0 0.0 100.0 false true "" "" PENS "lorenz" 1.0 0 -2674135 true "" "plot-pen-reset\nset-plot-pen-interval 100 / num-people\nplot 0\nforeach lorenz-points plot" "equal" 100.0 0 -16777216 true "plot 0\nplot 100" "" PLOT 9 341 169 461 Gini-Index v. Time Time Gini 0.0 50.0 0.0 1.0 true false "" "" PENS "default" 1.0 0 -13345367 true "" "plot (gini-index-reserve / num-people) / 0.5" SLIDER 2 42 174 75 Tax_Rate Tax_Rate 0 1.0 0.4 0.01 1 NIL HORIZONTAL PLOT 180 275 340 395 Tax revenue Time Taxes 0.0 10.0 0.0 10.0 true false "" "" PENS "default" 1.0 0 -16777216 true "" "plot tax_revenue" SLIDER 2 114 174 147 income_bracket income_bracket min_income_bracket 180 60 1 1 NIL HORIZONTAL SLIDER 2 147 174 180 benefit_bracket benefit_bracket 1 min_income_bracket 60 1 1 NIL HORIZONTAL MONITOR 528 398 578 443 12 h count turtles with [hours = 12] 17 1 11 MONITOR 480 398 530 443 8 h count turtles with [hours = 8] 17 1 11 PLOT 353 271 584 399 Working Time Number of work shifts N of agents 0.0 4.0 0.0 230.0 false false "set-plot-y-range 0 num-people" "" PENS "default" 1.0 1 -16777216 true "" "plot-pen-reset\nset-plot-pen-color red\nplot count turtles with [hours = 0]\nset-plot-pen-color black\nplot count turtles with [hours = 4]\nplot count turtles with [hours = 8]\nplot count turtles with [hours = 12]" PLOT 353 10 584 139 Class Plot Time Agents 0.0 50.0 0.0 250.0 true true "set-plot-y-range 0 num-people" "" PENS "low" 1.0 0 -2674135 true "" "plot count turtles with [color = red]" "mid" 1.0 0 -10899396 true "" "plot count turtles with [color = green]" "up" 1.0 0 -13345367 true "" "plot count turtles with [color = blue]" MONITOR 430 398 480 443 4 h count turtles with [hours = 4] 17 1 11 MONITOR 380 398 430 443 0 h count turtles with [hours = 0] 17 1 11 TEXTBOX 214 452 364 470 we divide those not working in: 11 0.0 1 MONITOR 369 443 438 488 Unemployed count turtles with [wage = 0] 17 1 11 MONITOR 443 443 552 488 Not seeking a job count turtles with [hours = 0 and wage > 0] 17 1 11 MONITOR 286 397 339 442 benefit precision benefit 2 17 1 11 SLIDER 179 204 351 237 num-pretentious num-pretentious 0 num-people - num-humble 150 1 1 NIL HORIZONTAL SLIDER 179 237 351 270 num-humble num-humble 0 num-people - num-pretentious 0 1 1 NIL HORIZONTAL SLIDER 2 78 174 111 min_income_bracket min_income_bracket 0 180 60 1 1 NIL HORIZONTAL MONITOR 180 398 242 443 Gini index precision ((gini-index-reserve / num-people) / 0.5) 2 17 1 11 @#$#@#$#@ ##Interactive user guide This guide explains to the user how to manage the interface tab of the model without immediate reference to the code tab. ##1. The input The green sliders are input variable defined by the user, on the left, from the top we have: • Num-people: the number of agent in the model. Every agent in the model either has an income or is unemployed. • Tax_rate: the tax rate. We temporary skip min_income_bracket. • Income_bracket : workers’ income above this value is taxed at the tax rate. • Benefit_bracket : every agent whose income is lower than this value is eligible for a benefit. • Min_income_bracket : in order not to have the user having some agent contemporary pay taxes and receive a benefit, we set this value as the minimum value of income_bracket and as the maximum value of benefit_bracket. Below the black screen we have other two sliders defining the number of agents having a certain characteristic regarding their consumption habit; for both this type of agents, their consumption is affected by the consumption of the agents around them. • Num_pretentious: the number of agents whose consumption increase when they found themselves around agents who consumes more than them • Num_humble: the number of agents whose consumption decrease when the average consumption of those around them is lower. Notice that the number of pretentious and humble agents is within the number of agent in the model defined in the first slider, for example, if you set 250 agents in the model, 100 number of pretentious ones and 100 of humble ones, the total number of agents will still be 250, and the consumption of 50 of these agents will not be influenced by the agents around them. Be sure to have the red knobs in the sliders visible, if it is not so, click again on the darker line in the slider; do so in order to avoid an error. ##The output Every histogram, graph, and number you see with a gray background is output of the model. • The Lorenz curve gives a great representation of how wealth is distributed among the agents, and it works in the following way: take a number in the X axis, say 50%, then take the corresponding value on the Y axis, say you check it and it is 25%, this means that the poorest half of the population owns a fourth of total wealth; you can check the values by passing the cursor on the graph. • The Gini index is a normalized measure of wealth inequality among agents, graphically it represents the area between the red and black lines in the Lorenz curve, therefore it is good for an immediate understanding of the ‘average’ inequality, but the Lorenz curve, with its shape, can tell us more; For an immediate understanding of the importance of the shape of the Lorenz curve, run the model at a fast pace moving the default slider on the top to the right, form normal speed, to faster, with the following settings: Num-people = 200; Tax_rate = 0.40; income_bracket = 60; benefit_bracket = 60; num-pretentious = 150; num-humble = 0 Press setup then go. Wait a while after you have run the model… do you see a particular shape in the Lorenz curve? Is it symmetric? Press go to stop the model. Let the settings as above, go on reading, we will run the model again soon. Even if this is not the first time you use NetLogo, in order to make this guide efficient and enjoyable I wrote the commands you will execute in a specified order, so if you want to notice every detail as you read the paper, be ware that the order I wrote the commands matters. • The tax revenue graph represents the amount of taxes collected. Decrease the number of agent with a taxable income by raising the bracket of taxable income (income_bracket), then press go. What happened? Set the value back to 60. Press go again to stop the model. What happen if we increase the tax rate? Think about the answer, then try it, first press go, then slowly increase it up to 1. Surprised? Would you work more or less if tax rate were at a 100%? Set the value back to 0.4 then go to stop the model. • Benefit is the amount distributed to each agent whose income is lower than the “benefit bracket”, now at 60, start imagine this as a daily income, if your income is less than 60 euro per day, then you are eligible for a benefit, which, with the parameters we set, should be around 5 euro. Lower the bracket to be eligible for the benefit (benefit_bracket) and start the model. The benefit due to those eligible is now higher because all taxes collected are shared among a lower number of agents. Notice we are redistributing with the benefit every euro collected with the taxes. Set the value back to 60 and press go to stop the model. • Class plot represents through time the number of agents belonging to the lower class in red, the mid class in green and the upper class in blue. Classes are based on wealth, not on income. • Then we have a representation of classes with a histogram. • The working time histogram represents the number of individual, for the number of shifts they work where every shift is a four hour one. Take a look at this histogram while you try the following: Lower again the bracket to be eligible for the benefit down to 1. What will happen? Press go. would you work if you were to receive such a high benefit if not working? try different settings; introduce humble agents, do the presence of these agents increase or decrease incentive effects? open the code tab, look at the choose-hours procedure, what are the main variables affecting this choice? @#$#@#$#@ default true 0 Polygon -7500403 true true 150 5 40 250 150 205 260 250 airplane true 0 Polygon -7500403 true true 150 0 135 15 120 60 120 105 15 165 15 195 120 180 135 240 105 270 120 285 150 270 180 285 210 270 165 240 180 180 285 195 285 165 180 105 180 60 165 15 arrow true 0 Polygon -7500403 true true 150 0 0 150 105 150 105 293 195 293 195 150 300 150 box false 0 Polygon -7500403 true true 150 285 285 225 285 75 150 135 Polygon -7500403 true true 150 135 15 75 150 15 285 75 Polygon -7500403 true true 15 75 15 225 150 285 150 135 Line -16777216 false 150 285 150 135 Line -16777216 false 150 135 15 75 Line -16777216 false 150 135 285 75 bug true 0 Circle -7500403 true true 96 182 108 Circle -7500403 true true 110 127 80 Circle -7500403 true true 110 75 80 Line -7500403 true 150 100 80 30 Line -7500403 true 150 100 220 30 butterfly true 0 Polygon -7500403 true true 150 165 209 199 225 225 225 255 195 270 165 255 150 240 Polygon -7500403 true true 150 165 89 198 75 225 75 255 105 270 135 255 150 240 Polygon -7500403 true true 139 148 100 105 55 90 25 90 10 105 10 135 25 180 40 195 85 194 139 163 Polygon -7500403 true true 162 150 200 105 245 90 275 90 290 105 290 135 275 180 260 195 215 195 162 165 Polygon -16777216 true false 150 255 135 225 120 150 135 120 150 105 165 120 180 150 165 225 Circle -16777216 true false 135 90 30 Line -16777216 false 150 105 195 60 Line -16777216 false 150 105 105 60 car false 0 Polygon -7500403 true true 300 180 279 164 261 144 240 135 226 132 213 106 203 84 185 63 159 50 135 50 75 60 0 150 0 165 0 225 300 225 300 180 Circle -16777216 true false 180 180 90 Circle -16777216 true false 30 180 90 Polygon -16777216 true false 162 80 132 78 134 135 209 135 194 105 189 96 180 89 Circle -7500403 true true 47 195 58 Circle -7500403 true true 195 195 58 circle false 0 Circle -7500403 true true 0 0 300 circle 2 false 0 Circle -7500403 true true 0 0 300 Circle -16777216 true false 30 30 240 cow false 0 Polygon -7500403 true true 200 193 197 249 179 249 177 196 166 187 140 189 93 191 78 179 72 211 49 209 48 181 37 149 25 120 25 89 45 72 103 84 179 75 198 76 252 64 272 81 293 103 285 121 255 121 242 118 224 167 Polygon -7500403 true true 73 210 86 251 62 249 48 208 Polygon -7500403 true true 25 114 16 195 9 204 23 213 25 200 39 123 cylinder false 0 Circle -7500403 true true 0 0 300 dot false 0 Circle -7500403 true true 90 90 120 face happy false 0 Circle -7500403 true true 8 8 285 Circle -16777216 true false 60 75 60 Circle -16777216 true false 180 75 60 Polygon -16777216 true false 150 255 90 239 62 213 47 191 67 179 90 203 109 218 150 225 192 218 210 203 227 181 251 194 236 217 212 240 face neutral false 0 Circle -7500403 true true 8 7 285 Circle -16777216 true false 60 75 60 Circle -16777216 true false 180 75 60 Rectangle -16777216 true false 60 195 240 225 face sad false 0 Circle -7500403 true true 8 8 285 Circle -16777216 true false 60 75 60 Circle -16777216 true false 180 75 60 Polygon -16777216 true false 150 168 90 184 62 210 47 232 67 244 90 220 109 205 150 198 192 205 210 220 227 242 251 229 236 206 212 183 fish false 0 Polygon -1 true false 44 131 21 87 15 86 0 120 15 150 0 180 13 214 20 212 45 166 Polygon -1 true false 135 195 119 235 95 218 76 210 46 204 60 165 Polygon -1 true false 75 45 83 77 71 103 86 114 166 78 135 60 Polygon -7500403 true true 30 136 151 77 226 81 280 119 292 146 292 160 287 170 270 195 195 210 151 212 30 166 Circle -16777216 true false 215 106 30 flag false 0 Rectangle -7500403 true true 60 15 75 300 Polygon -7500403 true true 90 150 270 90 90 30 Line -7500403 true 75 135 90 135 Line -7500403 true 75 45 90 45 flower false 0 Polygon -10899396 true false 135 120 165 165 180 210 180 240 150 300 165 300 195 240 195 195 165 135 Circle -7500403 true true 85 132 38 Circle -7500403 true true 130 147 38 Circle -7500403 true true 192 85 38 Circle -7500403 true true 85 40 38 Circle -7500403 true true 177 40 38 Circle -7500403 true true 177 132 38 Circle -7500403 true true 70 85 38 Circle -7500403 true true 130 25 38 Circle -7500403 true true 96 51 108 Circle -16777216 true false 113 68 74 Polygon -10899396 true false 189 233 219 188 249 173 279 188 234 218 Polygon -10899396 true false 180 255 150 210 105 210 75 240 135 240 house false 0 Rectangle -7500403 true true 45 120 255 285 Rectangle -16777216 true false 120 210 180 285 Polygon -7500403 true true 15 120 150 15 285 120 Line -16777216 false 30 120 270 120 leaf false 0 Polygon -7500403 true true 150 210 135 195 120 210 60 210 30 195 60 180 60 165 15 135 30 120 15 105 40 104 45 90 60 90 90 105 105 120 120 120 105 60 120 60 135 30 150 15 165 30 180 60 195 60 180 120 195 120 210 105 240 90 255 90 263 104 285 105 270 120 285 135 240 165 240 180 270 195 240 210 180 210 165 195 Polygon -7500403 true true 135 195 135 240 120 255 105 255 105 285 135 285 165 240 165 195 line true 0 Line -7500403 true 150 0 150 300 line half true 0 Line -7500403 true 150 0 150 150 pentagon false 0 Polygon -7500403 true true 150 15 15 120 60 285 240 285 285 120 person false 0 Circle -7500403 true true 110 5 80 Polygon -7500403 true true 105 90 120 195 90 285 105 300 135 300 150 225 165 300 195 300 210 285 180 195 195 90 Rectangle -7500403 true true 127 79 172 94 Polygon -7500403 true true 195 90 240 150 225 180 165 105 Polygon -7500403 true true 105 90 60 150 75 180 135 105 plant false 0 Rectangle -7500403 true true 135 90 165 300 Polygon -7500403 true true 135 255 90 210 45 195 75 255 135 285 Polygon -7500403 true true 165 255 210 210 255 195 225 255 165 285 Polygon -7500403 true true 135 180 90 135 45 120 75 180 135 210 Polygon -7500403 true true 165 180 165 210 225 180 255 120 210 135 Polygon -7500403 true true 135 105 90 60 45 45 75 105 135 135 Polygon -7500403 true true 165 105 165 135 225 105 255 45 210 60 Polygon -7500403 true true 135 90 120 45 150 15 180 45 165 90 square false 0 Rectangle -7500403 true true 30 30 270 270 square 2 false 0 Rectangle -7500403 true true 30 30 270 270 Rectangle -16777216 true false 60 60 240 240 star false 0 Polygon -7500403 true true 151 1 185 108 298 108 207 175 242 282 151 216 59 282 94 175 3 108 116 108 target false 0 Circle -7500403 true true 0 0 300 Circle -16777216 true false 30 30 240 Circle -7500403 true true 60 60 180 Circle -16777216 true false 90 90 120 Circle -7500403 true true 120 120 60 tree false 0 Circle -7500403 true true 118 3 94 Rectangle -6459832 true false 120 195 180 300 Circle -7500403 true true 65 21 108 Circle -7500403 true true 116 41 127 Circle -7500403 true true 45 90 120 Circle -7500403 true true 104 74 152 triangle false 0 Polygon -7500403 true true 150 30 15 255 285 255 triangle 2 false 0 Polygon -7500403 true true 150 30 15 255 285 255 Polygon -16777216 true false 151 99 225 223 75 224 truck false 0 Rectangle -7500403 true true 4 45 195 187 Polygon -7500403 true true 296 193 296 150 259 134 244 104 208 104 207 194 Rectangle -1 true false 195 60 195 105 Polygon -16777216 true false 238 112 252 141 219 141 218 112 Circle -16777216 true false 234 174 42 Rectangle -7500403 true true 181 185 214 194 Circle -16777216 true false 144 174 42 Circle -16777216 true false 24 174 42 Circle -7500403 false true 24 174 42 Circle -7500403 false true 144 174 42 Circle -7500403 false true 234 174 42 turtle true 0 Polygon -10899396 true false 215 204 240 233 246 254 228 266 215 252 193 210 Polygon -10899396 true false 195 90 225 75 245 75 260 89 269 108 261 124 240 105 225 105 210 105 Polygon -10899396 true false 105 90 75 75 55 75 40 89 31 108 39 124 60 105 75 105 90 105 Polygon -10899396 true false 132 85 134 64 107 51 108 17 150 2 192 18 192 52 169 65 172 87 Polygon -10899396 true false 85 204 60 233 54 254 72 266 85 252 107 210 Polygon -7500403 true true 119 75 179 75 209 101 224 135 220 225 175 261 128 261 81 224 74 135 88 99 wheel false 0 Circle -7500403 true true 3 3 294 Circle -16777216 true false 30 30 240 Line -7500403 true 150 285 150 15 Line -7500403 true 15 150 285 150 Circle -7500403 true true 120 120 60 Line -7500403 true 216 40 79 269 Line -7500403 true 40 84 269 221 Line -7500403 true 40 216 269 79 Line -7500403 true 84 40 221 269 x false 0 Polygon -7500403 true true 270 75 225 30 30 225 75 270 Polygon -7500403 true true 30 75 75 30 270 225 225 270 @#$#@#$#@ NetLogo 5.0.5 @#$#@#$#@ @#$#@#$#@ @#$#@#$#@ @#$#@#$#@ @#$#@#$#@ default 0.0 -0.2 0 0.0 1.0 0.0 1 1.0 0.0 0.2 0 0.0 1.0 link direction true 0 Line -7500403 true 150 150 30 225 Line -7500403 true 150 150 270 225 @#$#@#$#@ 0 @#$#@#$#@