globals [ land-patches ;; a subset of all patches, that we consider to be land-plots num-of-deals-made ;; counts the number of land deals done so far in the current period num-of-lands-traded ;; counts the number of land plots that changed owners during the current jubilee num-of-deals-canceled ;; counts the number of land deals canceled so far in the current Jubilee period-past-jubilee ;; number of period, relative to the previous jubilee landless-count landless-percent landless-count-series num-of-current-run ;; allows to run the simulation several times in series (for testing) ] turtles-own [ ;; each turtle represents a citizen: lands ;; list of lands (=patches) owned by this citizen is-levite ;; boolean: true if this turtle is a levite (who is not entitled to a land-plot). This is currently not used (always false). wealth ;; the total amount of money this citizen has income-from-work ;; The amount of money this citizen earns each period from work. ] patches-own [ owner ;; citizen (=turtle) that ownes this land. original-owner ;; citizen (=turtle) that owned this land at the beginning of the current Jubilee cycle. income-from-rent ;; This amount of money that the owner of this land earns each period from renting. It depends on the location. ] ;;;;;;;;;;;;;;;;;;;;;;;; ;;; Setup Procedures ;;; ;;;;;;;;;;;;;;;;;;;;;;;; ;; setup a group of several runs to setup set-default-shape turtles "person" clear-all set num-of-current-run 0 set landless-count-series [] setup-run end ;; setup a single run to setup-run clear-ticks clear-turtles clear-patches clear-drawing clear-all-plots clear-output create-turtles num-of-citizens [ set is-levite false set lands [] ;; set color (10 * random 10 + 4) ;; citizens have dark colors. set wealth 0 set income-from-work random-income-from-work ] ask patches [ set owner nobody set original-owner nobody set income-from-rent (1 - 0.5 * ((pxcor / max-pxcor) ^ 2 + (pycor / max-pycor) ^ 2)) ] set land-patches n-of num-of-lands patches let current-income-from-rent-mean mean [income-from-rent] of land-patches let income-from-rent-normalization-factor income-from-rent-mean / current-income-from-rent-mean ask land-patches [set income-from-rent income-from-rent-normalization-factor * income-from-rent] set period-past-jubilee 0 check-landless-and-deals citizens-color-by-wealth run initial-land-division ask turtles [ move-to-owned-land ] layout reset-ticks end ;;;;;;;;;;;;;;;;;;;;;; ;;; Main Procedure ;;; ;;;;;;;;;;;;;;;;;;;;;; to go if period-past-jubilee = 0 [ ;; initialize the land records at the start of the next period: ask land-patches [ set original-owner owner ask original-owner [ setxy [pxcor] of myself [pycor] of myself ] ] ask links [die] set num-of-deals-made 0 set num-of-deals-canceled 0 ] set period-past-jubilee period-past-jubilee + 1 citizens-earn-income citizens-trade-lands citizens-color-by-wealth if period-past-jubilee >= periods-per-jubilee [ set num-of-lands-traded count land-patches with [original-owner != owner] ;; in the Jubilee year, some lands return to original owners: run jubilee-procedure set period-past-jubilee 0 ] check-landless-and-deals layout tick if ticks >= last-period [ set landless-count-series lput landless-count landless-count-series ;; print join "\t" (list jubilee-procedure num-of-lands income-from-work-mean income-from-work-equality income-from-work-mobility income-from-agriculture income-from-rent income-from-welfare ticks landless-count) plot-theoretic-num-of-landless ;;print join "\t" map [? * num-of-citizens / 100] landless-percent-time-series set num-of-current-run (num-of-current-run + 1) if num-of-current-run >= num-of-runs [ let std ifelse-value (length landless-count-series > 1) [sqrt variance landless-count-series] [0] print join "\t" (list jubilee-procedure num-of-lands probability-of-deal-per-period income-from-work-mean income-from-work-equality income-from-work-mobility income-from-agriculture income-from-rent-mean income-from-welfare ticks (mean landless-count-series) std) repeat 5 [beep wait 0.1] ;; alert the researcher that the experiment is finally over... stop ] setup-run ] end ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Income procedures ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; each period, each citizen earns income from 4 sources: ;;;; A. income that does not depend on land: "income-from-work" times "talent" ;;;; B. income that depends on land, but not on its location: "income-from-agriculture" ;;;; C. income that depends on the land location - higher rent for lands closer to the middle: "income-from-rent" ;;;; D. income from the welfare system - in case he has no land - "income-from-welfare" to citizens-earn-income ask turtles [ if random-float 1.0 < income-from-work-mobility [ set income-from-work random-income-from-work ] set wealth wealth + income-from-work foreach lands [ set wealth wealth + [income-from-land] of ? ] ;;if empty? lands [ set wealth wealth + income-from-welfare ;;] ] end ;; global reporter: draws a random income, based on the "mean" and "inequality" sliders to-report random-income-from-work ;;income-from-work-mean = exp(mu + sigma^2/2) ;;income-from-work-median = exp(mu) ;; => sigma = sqrt (2 * ln income-from-work-mean/income-from-work-median) = ;;income-from-work-mode = exp(mu - sigma^2) ;;gini = 2 normcdf (sigma / (sqrt 2)) - 1 = erf(sigma) ;; = erf (sqrt (ln income-from-work-mean/income-from-work-median) ) ;; => sigma = (sqrt 2) * inverse-normcdf[(gini + 1) / 2] ;; let gini 1 - income-from-work-equality ;; let sigma inv-erf gini if income-from-work-mean <= 0 [report 0] let sigma sqrt (2 * ln (1 / income-from-work-equality)) let mu (ln income-from-work-mean) - (sigma ^ 2) / 2 ;;print (word " mu=" mu " sigma=" sigma) report exp random-normal mu sigma end ;; approximation from http://en.wikipedia.org/wiki/Error_function ;; works for positive x only to-report erf [x] let a 0.147 let sqrx x ^ 2 report sqrt (1 - exp (- sqrx * ( 4 / pi + a * sqrx) / (1 + a * sqrx) )) end to-report inv-erf [x] let a 0.147 let ln1x2 ln (1 - x ^ 2) let pialn1x22 (2 / pi / a + ln1x2 / 2) report sqrt ( sqrt (pialn1x22 ^ 2 - ln1x2 / a) - pialn1x22 ) end ;; patch reporter: report the total income from land: to-report income-from-land report income-from-agriculture + income-from-rent end ;; change the color of turtles (citizens), such that: ;;;; turtles with positive wealth are green (brighter = richer) ;;;; turtles with negative wealth are red (brighter = poorer) to citizens-color-by-wealth let max-positive-wealth max [wealth] of turtles let min-negative-wealth min [wealth] of turtles if max-positive-wealth >= 0 [ ask turtles with [wealth >= 0] [ set color (green - 3) + 6 * wealth / (max-positive-wealth + 1) ] ] if min-negative-wealth < 0 [ ask turtles with [wealth < 0] [ set color (red - 3) + 6 * wealth / (min-negative-wealth - 1) ] ] end ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Initial land division procedures ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; give each land to a random citizen to random-land-division ask land-patches [ assign-land self one-of turtles ] end ;; give a single land to each non-levite citizen in turn to equal-land-division let sorted-turtles sort turtles with [not is-levite] let index 0 ask land-patches [ ;;"ask" calls land-patches in random order assign-land self item (index mod length sorted-turtles) sorted-turtles set index index + 1 ] end to land-division-to-n-citizens [n] let sorted-turtles sort n-of n turtles let index 0 ask land-patches [ ;;"ask" calls land-patches in random order ;;print (word "assign-land " self item index sorted-turtles) assign-land self item index sorted-turtles set index (index + 1) mod n ] end ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Land trade procedures ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; to citizens-trade-lands foreach sort land-patches [ if random-float 1.0 < probability-of-deal-per-period [ ;; let buyer one-of turtles let buyer one-of-biased turtles ([task wealth] of one-of turtles) if buyer != nobody [ sell-land ? buyer ] ] ] end to sell-land [the-land new-owner] assign-land the-land new-owner set num-of-deals-made num-of-deals-made + 1 end to return-land [the-land new-owner] assign-land the-land new-owner set num-of-deals-canceled num-of-deals-canceled + 1 end ;; Assign the given land (=patch) to the given owner (=turtle): to assign-land [the-land new-owner] let current-owner [owner] of the-land if current-owner = new-owner [stop] if current-owner != nobody [ ask current-owner [ set lands remove the-land lands move-to-owned-land ] ] ask the-land [ set owner new-owner if original-owner != nobody [ ask original-owner [ if out-link-to current-owner != nobody [ ask out-link-to current-owner [die] ] if self != new-owner [ ;; cannot create a link from turtle to itself create-link-to new-owner ] ] ] set pcolor [color - green + brown] of new-owner ;; lands have lighter colors. ] ask new-owner [ if not member? the-land lands [ set lands lput the-land lands move-to-owned-land ] ] end ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Jubilee procedures ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; This procedure is used to check what happens if there is no Jubilee. to no-jubilee end ;; This procedure returns lands only to citizens that have no land during the Jubilee, ;; and does so iteratively until no more returns are possible. to jubilee-to-landless let change? true while [change?] [ ;; if anything was changed in previous iteration, do it again: set change? false let landless-citizens turtles with [empty? lands and not is-levite] ask landless-citizens [ let my-original-lands land-patches with [original-owner = myself] let returned-land one-of my-original-lands ;; to each landless citizen, return one of the lands he originally owned: if returned-land != nobody [ return-land returned-land self set change? true ] ] ] end ;; This procedure returns lands only from citizens that have more than one land during the Jubilee, ;; and does so iteratively until no more returns are possible. to jubilee-from-landowners let change? true while [change?] [ ;; if anything was changed in previous iteration, do it again: set change? false let citizens-with-many-lands turtles with [length lands > 1] ask citizens-with-many-lands [ let this-citizen self let lands-to-return filter [ [original-owner] of ? != nobody and [original-owner] of ? != this-citizen] lands if length lands-to-return = length lands [ set lands-to-return n-of (length lands - 1) lands-to-return ] ;;show lands-to-return if length lands-to-return > 0 [ foreach lands-to-return [ return-land ? [original-owner] of ? ] set change? true ] ] ] end ;; This procedure returns lands only if the original owner has no land, AND the current owner has more than one land. ;; It does so iteratively until no more returns are possible. to jubilee-to-landless-from-landowners ;;show "jubilee-to-landless-from-landowners" let change? true while [change?] [ ;; if anything was changed in previous iteration, do it again: set change? false let landless-citizens turtles with [empty? lands and not is-levite] ask landless-citizens [ let my-original-lands land-patches with [original-owner = myself] let returned-land nobody ;;show my-original-lands ask my-original-lands [ let my-original-land self let its-current-holder [owner] of my-original-land let lands-of-current-holder [length lands] of its-current-holder if lands-of-current-holder > 1 [ set returned-land my-original-land ] ] if returned-land != nobody [ return-land returned-land self set change? true ] ] ] end ;; This procedure returns lands only from citizens that have more than one land during the Jubilee, ;; to citizens that have no land during the Jubilee; ;; and does so iteratively until no more returns are possible. to jubilee-from-landowners-old let landless-citizens turtles with [empty? lands] let change? false ask landless-citizens [ let my-original-lands land-patches with [original-owner = myself] let returned-land nobody ;;print (sentence "citizen" self "had" count my-original-lands "lands") ask my-original-lands [ let current-owner-of-my-land [owner] of self let current-lands-of-current-owner [length lands] of current-owner-of-my-land ;;print (sentence "current owner of" self "is" current-owner-of-my-land "and has" current-lands-of-current-owner "lands") if [length lands] of current-owner-of-my-land > 1 [ set returned-land self ] ] if returned-land != nobody [ return-land returned-land self set change? true ] ] ;; if anything was changed in this iteration, do it again: if change? [jubilee-from-landowners] end ;; This procedure returns all lands to their original owners, whether they currently own land or not. to jubilee-for-all ask turtles [ let returned-lands land-patches with [original-owner = myself and owner != myself] ;; show returned-lands ask returned-lands [ return-land self myself ] ] end ;;;;;;;;;;;;;; ;;; Layout ;;; ;;;;;;;;;;;;;; ;; turtle procedure: move to one of the lands owned by me to move-to-owned-land let target-land nobody ifelse length lands = 0 [ set target-land one-of patches with [owner = nobody] ] [ set target-land one-of lands ] setxy [pxcor] of target-land [pycor] of target-land end to layout if not layout? [ stop ] ;; the number 10 here is arbitrary; more repetitions slows down the ;; model, but too few gives poor layouts repeat 10 [ do-layout display ;; so we get smooth animation ] end to do-layout layout-spring (turtles) links 0.4 6 1 ;; layout-circle turtles max-pxcor - 1 end ;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; Utility procedures ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Join the list's elements to-report join [the-glue the-list] report reduce [(word ?1 the-glue ?2)] the-list end ;; A biased version of one-of. ;; Selects one of the given set, such that the probability is proportional to "the-bias-reporter". to-report one-of-biased [the-agentset the-bias-reporter] let pick random-float sum [runresult the-bias-reporter] of the-agentset let winner nobody ask the-agentset [ ;; if there's no winner yet... if winner = nobody [ let self-value (runresult the-bias-reporter self) ifelse self-value >= pick [ set winner self ] [ set pick pick - self-value] ] ] report winner end ;; Check the proportion of citizens without land to check-landless-and-deals set landless-count count turtles with [not is-levite and empty? lands] set landless-percent landless-count / count turtles * 100 ;;set deals-canceled-percent ifelse-value (num-of-lands-traded > 0) [num-of-deals-canceled / num-of-lands-traded * 100] [0] ;;set deals-canceled-percent ifelse-value (num-of-deals-made > 0) [num-of-deals-canceled / num-of-deals-made * 100] [0] ;;set deals-canceled-series lput deals-canceled-percent deals-canceled-series end ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; theoretic-num-of-landless ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; calculate the next number of landless, using the theoretic approximation formula to-report next-num-of-landless [current-num-of-landless] report ifelse-value (current-num-of-landless = 0) [current-num-of-landless] [current-num-of-landless / (1 + (1 / (e - 1) + ((sqrt (num-of-citizens / current-num-of-landless) - 1) / sqrt(2))) ^ -1)] end to plot-theoretic-num-of-landless run initial-land-division check-landless-and-deals set-current-plot "landless" set-current-plot-pen "theoretic" plot-pen-up plotxy 0 landless-percent plot-pen-down let M num-of-citizens * landless-percent / 100 repeat last-period [ set M next-num-of-landless M plot M * 100 / num-of-citizens ] end ; Copyright 2012 Erel Segal Halevi. ; See Info tab for full copyright and license. @#$#@#$#@ GRAPHICS-WINDOW 613 59 1025 492 25 25 7.9 1 10 1 1 1 0 0 0 1 -25 25 -25 25 1 1 1 ticks 30.0 BUTTON 616 10 679 43 setup setup NIL 1 T OBSERVER NIL NIL NIL NIL 1 BUTTON 768 11 831 44 go go T 1 T OBSERVER NIL NIL NIL NIL 0 SLIDER 6 10 192 43 num-of-citizens num-of-citizens 10 1000 100 1 1 NIL HORIZONTAL BUTTON 683 11 764 44 go once go NIL 1 T OBSERVER NIL NIL NIL NIL 0 SWITCH 87 498 219 531 layout? layout? 1 1 -1000 PLOT 8 434 238 621 land distribution num of lands owned num of citizens 0.0 10.0 0.0 10.0 true false "" "" PENS "default" 1.0 1 -16777216 true "" "histogram [length lands] of turtles" PLOT 7 228 238 426 landless time % without land 0.0 50.0 0.0 10.0 true false "" "" PENS "default" 1.0 0 -16777216 true "set-plot-x-range 0 last-period\nset-plot-y-range 0 100" "plot landless-percent" "theoretic" 1.0 2 -2674135 true "" "" PLOT 254 227 481 426 deals canceled time % deals canceled 0.0 10.0 0.0 10.0 true false "" "set-plot-y-range 0 100" PENS "default" 1.0 0 -16777216 true "" "plot ifelse-value (num-of-lands-traded > 0) [num-of-deals-canceled / num-of-lands-traded * 100] [0]" CHOOSER 396 104 606 149 jubilee-procedure jubilee-procedure "no-jubilee" "jubilee-to-landless" "jubilee-from-landowners" "jubilee-to-landless-from-landowners" "jubilee-for-all" 1 SLIDER 396 62 553 95 periods-per-jubilee periods-per-jubilee 1 100 1 1 1 NIL HORIZONTAL SLIDER 396 151 606 184 probability-of-deal-per-period probability-of-deal-per-period 0 1 1 0.01 1 NIL HORIZONTAL MONITOR 556 59 606 104 period# period-past-jubilee 17 1 11 SLIDER 219 46 389 79 income-from-agriculture income-from-agriculture 0 100 5 1 1 NIL HORIZONTAL PLOT 253 436 480 622 wealth distribution wealth num of citizens 0.0 10.0 0.0 10.0 true false "" "" PENS "default" 1.0 1 -16777216 true "" "set-histogram-num-bars 10\nset-plot-x-range min [wealth] of turtles max [wealth] of turtles + 1\nhistogram [wealth] of turtles" SLIDER 4 43 215 76 income-from-work-mean income-from-work-mean 0 100 10 1 1 NIL HORIZONTAL SLIDER 220 80 390 113 income-from-rent-mean income-from-rent-mean 0 100 5 1 1 NIL HORIZONTAL SLIDER 219 113 388 146 income-from-welfare income-from-welfare 0 100 0 1 1 NIL HORIZONTAL CHOOSER 396 10 606 55 initial-land-division initial-land-division "random-land-division" "equal-land-division" "land-division-to-n-citizens 1" 2 SLIDER 396 187 606 220 last-period last-period 0 5000 50 1 1 NIL HORIZONTAL SLIDER 3 79 215 112 income-from-work-equality income-from-work-equality 0.01 1 0.7 0.01 1 NIL HORIZONTAL SLIDER 219 10 390 43 num-of-lands num-of-lands 10 2000 100 10 1 NIL HORIZONTAL SLIDER 6 115 215 148 income-from-work-mobility income-from-work-mobility 0.00 1 0.1 0.01 1 NIL HORIZONTAL SLIDER 836 11 1008 44 num-of-runs num-of-runs 1 100 1 1 1 NIL HORIZONTAL @#$#@#$#@ ## WHAT IS IT? This is an elaboration of the [land-random model](http://ccl.northwestern.edu/netlogo/models/community/land-random), that takes differences in income into account. Citizens gain income from several sources - some depend on land while others do not. Citizens buy land with probability that is directly proportional to their wealth - the rich are more probable to buy land than the poor. Can the Jubilee still help the poor get some land? --- Freedom, in Biblical economy, means that every citizen owns a land-plot. Originally, this was achieved by two means: * Initially, all land was divided into equal plots, and each citizen got a plot; * Once in 50 years, in the year of Jubilee, all lands returned to the original owners. This model checks whether it is possible to achieve the goal of Freedom (meaning, every citizen owns a land) even when the initial division is not equal. ## HOW IT WORKS There are **num-of-citizens** citizens, and **num-of-lands** land-plots. Initially, land is divided in a way defined by the **initial-land-division** menu. There are several options: * random land division - each land goes to a citizen selected at random. This means that some citizens will have no land, while others will have many plots. * equal land division - each citizen gets a single land plot in turn, until there are no more lands left. * give all lands to a single citizen (n citizens, where n=1). At each period, each citizen gains some income. The income comes from several sources: * A. Work - each citizen gets some salary per period, regardless of land ownership. The salary of a citizen is chosen in the beginning from a log-normal probability distribution (cf. F. Clementi and M. Gallegati, "Pareto's law of income distribution: Evidence for germany, the united kingdom, and the united states," EconWPA, 2005). The parameters of the lognormal distribution are calculated from **income-from-work-mean**, and from **income-from-work-equality**, which is defined as median/mean. Additionally, each period there is a chance that a citizen's income will change - this chance is **income-from-work-mobility**. In case a citizen's income changes, the system will select a new income at random, from the same log-normal distribution. * B. Agriculture - each land gives its owner a constant income per period. * C. Rent - each land gives its owner an income that depends on its position - central lands get more rent than peripheral lands. Specifically, the rent from each land is A M (1 - 0.5 ((x / xmax)2 - (y / ymax )2)), where M is **income-from-rent-mean**, and A is a normalization constant. * D. Welfare - optionally, the government may decide to give a flat income to every citizen (cf. "Citizen's dividend" in Wikipedia). At each period, each land has some probability of being sold: the **probability-of-deal-per-period** slider. If a land is sold, it is transferred to a citizen picked at random, where the probability of each citizen to be the buyer is proportional to his/her wealth. After 50 periods (or a different number, set by the **periods-per-jubilee** slider), a Jubilee procedure is performed, as defined by the **jubilee-procedure** menu. There are 3 options: * no-jubilee - nothing is done; * jubilee-to-landless - each citizen with no land picks one of the lands that he had in the previous Jubilee (if any), and gets it back. * jubilee-from-landowners - each citizen with more than one land picks one of the lands that he wants to keep, and returns all other lands to their owners in the previous Jubilee. * jubilee-to-landless-from-landowners - each land, whose current owner has more than oen land, and whose previous owner has no land, is returned from the current owner to the previous owner. * jubilee-for-all - each citizen gets all lands that he had in the previous Jubilee. After the Jubilee, the trade goes on as before. The simulation stops after **last-period** periods. A lternatively, you can use the **num-of-runs** slider to run the simulation several times, and calculate the mean and std of the number of landless citizens at the last-period. These values will be printed in the output window, as a tab-seperated line. ## HOW TO USE IT Choose the number of citizens and lands, the probability of deal per period, the number of periods per Jubilee, the Jubilee procedure, and the value of each income component. Then click **setup**. Pressing the **go once** button will run a single period. The wealth of the citizens changes. The color of the citizens changes according to their wealth - wealthier citizens will have brighter colors. The wealth distribution is shown in the "wealth distribution" plot. Some lands will be sold to new owners. A directed link points from the original owner to the new owner. The brightness of each land will match the brightness of its new owner. The land distribution is shown in the "land distribution" histogram and the "landless" plot. As the model runs, there are more and more links. But at the Jubilee year, some or all lands return to their original owner, so some or all links are removed. The percentage of deals canceled is shown in the "deals canceled" plot. ## THINGS TO NOTICE When the Jubilee procedure is "jubilee-for-landless", the number of landless citizens decreases in each Jubilee, relative to the previous Jubilee. Over time, all citizens will have land. The land distribution approaches the state of a single land per citizen. To see this more clearly, set the probability-of-deal to 1.0, and the periods-per-jubilee to 1. This does not happen for "no-jubilee" or for "jubilee-for-all". ## THINGS TO TRY Change the **income-from-work** to 0, and restart. Is it still true that all citizens eventually have land? Increase the income-from-work gradually. How does this affect the speed in which the system converges? After convergence, decrease the income-from-work to 0 again. Does this affect the land distribution? Play with the other income components - **income-from-agriculture**, **income-from-rent** and **income-from-welfare**. Do they have any effect? ## EXTENDING THE MODEL Perhaps the model should also include subjective prerefences: some citizens prefer to live in the east, while others prefer to live in the west. etc. Currently, the land price is ignored - land is just transfered from the seller to the buyer for free. In Biblical times, the land price was calculated as the annual income from the land, times the number of years remaining until the coming Jubilee. ## NETLOGO FEATURES Citizens are turtles. Land-plots are patches. However, since there are usually more patches then turtles, only some of the patches are considered for the model. They are called "land-patches" in the code. Links are used to link the original owner of a land with its current owner. A cycle, in that graph, means that the relevant owners switched their lands. A utility function, "one-of-biased", is used to select a buyer: it gets as input an agentset and a reporter, and selects one agent at random, with probability proportional to the value that the reporter reports for it. In our model, the reporter simply returns the wealth of the citizen, so that probability of buying land is proportional to wealth. ## HOW TO CITE If you mention this model in a publication, we ask that you include these citations for the model itself and for the NetLogo software: - Segal-the-Levite, Erel (2012). NetLogo Land-Income model. http://ccl.northwestern.edu/netlogo/models/community/land-income. - Wilensky, U. (1999). NetLogo. http://ccl.northwestern.edu/netlogo/. Center for Connected Learning and Computer-Based Modeling, Northwestern University, Evanston, IL. ## COPYRIGHT AND LICENSE Copyright 2012 Erel Segal the Levite. ![CC BY-SA 3.0](http://i.creativecommons.org/l/by-sa/3.0/88x31.png) This work is licensed under the Creative Commons Attribution-ShareAlike 3.0 License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/3.0/ or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. @#$#@#$#@ 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.1 @#$#@#$#@ @#$#@#$#@ @#$#@#$#@ @#$#@#$#@ @#$#@#$#@ 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 90 180 Line -7500403 true 150 150 210 180 @#$#@#$#@ 0 @#$#@#$#@