Urban Suite - Economic Disparity

Urban Suite - Economic Disparity preview image

1 collaborator

Uri_dolphin3 Uri Wilensky (Author)

Tags

(This model has yet to be categorized with any tags)
Model group CCL | Visible to everyone | Changeable by group members (CCL)
Model was written in NetLogo 5.0.4 • Viewed 572 times • Downloaded 48 times • Run 6 times
Download the 'Urban Suite - Economic Disparity' modelDownload this modelEmbed this model

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


WHAT IS IT?

This model explores residential land-usage patterns from an economic perspective, using the socio-economic status of the agents to determine their preferences for choosing a location to live. It models the growth of two populations, one rich and one poor, who settle based on three properties of the landscape: the perceived quality, the cost of living, and the proximity to services (large red dots). These same properties then change based on where the different populations settle.

The model ultimately shows the segregation of populations based on income, the clustering of services in more affluent areas, and how people's attitude can lead either to a cluster condition (emphasis on proximity), or a condition of sprawl (emphasis on cost or quality).

HOW IT WORKS

Job sites (shown as red circles on the map) are created and destroyed. People (shown as small blue and pink squares) move in and move out. These people want to live near to jobs, but also consider the price (cost of living) and quality of prospective locations. But let's get more specific.

When a new place of employment comes into the world, it randomly samples some number of locations (controlled by the NUMBER-OF-TESTS slider), and chooses the one with the highest price (i.e. land-value). This may seem irrational at first, but the assumption this model makes is that jobs move toward where the wealth is. If there is more money in a certain area, then there are more affluent people to spend that money on goods and services.

The validity of this assumption in a real-world setting is worthy of skepticism. For instance, companies also wish to pay less rent or property tax, and so alternatively one could argue that they would be seeking the least expensive piece of land to occupy. This seems particularly true for the industrial sector, which has no need for consumers to be nearby.

In any case, the reader is encouraged to carefully examine all assumptions, challenge them, and perhaps extend the model to incorporate assumptions that are more plausible in his/her view. A model's predictions are only as good as the assumptions that underlie them.

Each "tick" of the model, some number of new poor people (controlled by the POOR-PER-STEP slider) and new rich people (controlled by the RICH-PER-STEP slider) enter into the world. When people enter the world, they randomly sample some number of locations, and choose to inhabit the one that maximizes "utility" for them, which is given by a hedonistic utility function.

There are two fundamentally different types of people in this model -- "poor" people (shown in blue) and "rich" people (shown in pink), and they have differing priorities. Both types of people wish to be located close to a place of employment. However, rich people seek a location that has good quality, heedless of price, whereas poor people seek locations with low price, disregarding quality.

The last important rule of the model is the effect that agents have on the land they inhabit. Rich people moving into an area cause the land price and quality to increase, whereas poor people cause the land price and quality to decrease. Nearby land attributes are affected as well, with the effect diminishing over distance.

HOW TO USE IT

Click the SETUP button first, to set up the model. All land in the world has the same price and quality. One job location is placed in the middle of the world, and several rich and poor people are spread out nearby it, which immediately affect the quality and price of the land they inhabit, as well as nearby land.

Click the GO button to start the simulation. To step through the simulation one "tick" at a time, use the GO-ONCE button.

There are five view modes, which are controlled by the buttons VIEW PRICE, VIEW QUALITY, VIEW DIST., VIEW RICH-UTILITY, and VIEW-POOR-UTILITY

VIEW PRICE displays the land-price value of each location, with white being a high price, black being a low price, and the various shades of yellow are in between.

VIEW QUALITY displays the quality value of each location, with white being a high price, black being a low price, and the various shades of green are in between.

VIEW DIST. displays the distance from each location to a place of employment. Brighter colors demonstrate closeness.

VIEW RICH-UTILITY displays the utility that rich people assign to each location on the map. Lighter values designate better utility, and darker values designate worse utility. Note that the highest utility areas may still be vacant, since each agent only samples a small set of the patches in the world

VIEW-POOR-UTILITY displays the utility that poor people assign to each location on the map. Lighter values designate better utility, and darker values designate worse utility.

The NUMBER-OF-TESTS slider affects how many locations each agent looks at when choosing a location that optimizes the agent's utility.

The RESIDENTS-PER-JOB slider determines how often a new place of employment is created in the world. For every RESIDENTS-PER-JOB people, a new place of employment appears.

There is, however, a maximum number of places of employment, which is controlled by the MAX-JOBS slider.

Some number of poor people enter the world each time step, as determined by the POOR-PER-STEP slider. Likewise, some number of rich people (determined by the RICH-PER-STEP slider) enter the world.

Some number of poor people and rich people disappear from the world each turn, as well, which is determined by the DEATH-RATE slider. Although it is called "death rate", it should not be taken literally -- it merely represents the disappearance of agents from the world that is being considered by the model, which could be caused by a number of factors (such as emigration). If DEATH-RATE is set to 5, this means that both 5 rich people and 5 poor people disappear each time step. The agents removed are always those that have been in the world for the longest period of time.

The priorities of the poor people can be adjusted with the POOR-PRICE-PRIORITY slider. If this slider is set to -1, this means that poor people do not care about price at all, and are only interested in being close to employment. If this slider is set to 1, then poor people only care about price, and do not concern themselves with job locations. Setting the slider at 0 balances these two factors.

Similarly, the priorities of rich people can be adjusted with the RICH-QUALITY-PRIORITY slider. On this slider, -1 means that rich people care only about having a short commute to their jobs, and not about the quality of the land, whereas 1 means that they care only about quality, and are not concerned with distance to employment. Again, 0 represents an equal balance of these priorities.

The TRAVEL DISTANCE plot shows the average distance that poor and rich people must travel to reach the nearest point of employment. Apart from the interesting visual patterns that form in the view, this plot is the most important output of the model.

The # OF JOBS monitor tells how many places of employment are currently in the world.

The POPULATION monitor tells how many total people there are in the world, and the POOR POP and RICH POP monitors give the poor and rich population sizes respectively.

THINGS TO NOTICE

Do the VIEW PRICE mode and the VIEW QUALITY mode look very similar? Apart from the fact that one is green, and the other is yellow, they might be showing identical values? To test this, you can right click (or control-click on a Mac computer) on one of the patches in the view and choose "inspect patch XX YY". You can do this for several patches, and you will find that the price and quality are always the same. In this model, whenever quality goes up or down, price changes in direct proportion.

What if NUMBER-OF-TESTS is small? Is the population more or less densely centered around the jobs? What if NUMBER-OF-TESTS is large?

Change the viewing mode to distance-from-jobs, by clicking the VIEW DIST button. Watch the model run, and the lines that form where gradients from two different jobs come together and overlap. These shapes are related to Voronoi polygons. You can learn more about them by looking at the "Voronoi" model in the NetLogo model library.

Even if the DEATH-RATE is set such that more people are leaving the world than entering it, the model does not allow the population to die out entirely -- instead, the population will stay small. If you grow the population for a while, and then raise the DEATH-RATE to balance out rich and poor people entering the world, then you can hold the population constant. In this case, you might view the scenario as the same people relocating within the model, rather than new people entering and old people leaving.

THINGS TO TRY

After letting the model run for a while, try switching back and forth between the VIEW POOR-UTILITY and VIEW RICH-UTILITY display modes. How many places that are dark for rich are bright for poor? Is there usually an inverse relationship? Are there places which both rich and poor find desirable, and if so, where are they? What if you move both priority sliders to the left?

Try drastically changing the POOR-PRICE-PRIORITY and RICH-QUALITY-PRIORITY sliders. Do rich people always have the shorter distances to employment, or do poor people sometimes have the shorter distances?

EXTENDING THE MODEL

As noted above in the THINGS TO NOTICE section, in this model price and quality of land are locked together, always holding the same values. Extend this model so that this isn't always the case. For example, you might make it so that when new people move into an area of the model, they only affect the quality of nearby locations in a small radius, whereas they affect the price of a broader circle of cells.

NETLOGO FEATURES

This model makes use of NetLogo's breeds to differentiate rich agents, poor agents, and job agents.

Extensive use is also made of the SCALE-COLOR primitive, which allows for the three different view modes of the model.

RELATED MODELS

This model is related to all of the other models in the "Urban Suite". In particular, this model shows elements of the concept of positive feedback, which is demonstrated in the "Urban Suite - Positive Feedback" model.

It might also be interesting to compare it to the models "Wealth Distribution" and "Voronoi".

CREDITS AND REFERENCES

This model was loosely based on a model originally written by William Rand and Derek Robinson as part of the Sluce Project at the University of Michigan (http://www.cscs.umich.edu/sluce). For more about the original model (SOME) that was the basis for this model, please see:

Brown D.G., Robinson D.T., Nassauer J.I., An L., Page S.E., Low B., Rand W., Zellner M., and R. Riolo (In Press) "Exurbia from the Bottom-Up: Agent-Based Modeling and Empirical Requirements." Geoforum.

This model was developed during the Sprawl/Swarm Class at Illinois Institute of Technology in Fall 2006 under the supervision of Sarah Dunn and Martin Felsen, by the following group of students: Danil Nagy and Bridget Dodd. See http://www.sprawlcity.us/ for more details.

Further modifications and refinements were made by members of the Center for Connected Learning and Computer-Based Modeling before releasing it as an Urban Suite model.

The Urban Suite models were developed as part of the Procedural Modeling of Cities project, under the sponsorship of NSF ITR award 0326542, Electronic Arts & Maxis.

Please see the project web site ( http://ccl.northwestern.edu/cities/ ) for more information.

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:

COPYRIGHT AND LICENSE

Copyright 2007 Uri Wilensky.

CC BY-NC-SA 3.0

This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/3.0/ or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.

Commercial licenses are also available. To inquire about commercial licenses, please contact Uri Wilensky at uri@northwestern.edu.

Comments and Questions

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

Click to Run Model

breed [ rich a-rich ]
breed [ poor a-poor ]
breed [ jobs job ] ;; jobs are places of employment held by many people

rich-own [utilityr]
poor-own [utilityp]
jobs-own [utility]
patches-own [quality price sddist]
globals [counter view-mode min-poor-util max-poor-util min-rich-util max-rich-util ]

;;
;; Setup Procedures
;;

to setup
  ca
  set view-mode "quality"
  setup-jobs
  setup-patches
  setup-rich
  setup-poor
  ask patches [ update-patch-color ]
  reset-ticks
end 

to setup-jobs
  create-jobs 1
  ask jobs
  [
    set color red
    set shape "circle"
    set size 2
  ]
end 

to setup-patches
  ask patches [
    set quality 40
    set price 40
  ]
  ask patches
  [
    set sddist min [distance myself] of jobs
  ]
end 

to setup-rich
  create-rich 5
  ask rich
  [
    set color 126
    set shape "box"
    let radius 10
    setxy ( ( radius / 2 ) - random-float ( radius * 1.0 ) ) ( ( radius / 2 ) - random-float ( radius * 1.0 ) )
    raise-price
    raise-value
  ]
end 

to setup-poor
  create-poor 5
  ask poor
  [
    set color 105
    set shape "box"
    let radius 10
    setxy ( ( radius / 2 ) - random-float ( radius * 1.0 ) ) ( ( radius / 2 ) - random-float ( radius * 1.0 ) )
    decrease-price
    decrease-value
  ]
end 

to decrease-value
  ask patch-here [ set quality ( quality * 0.95 ) ]
  ask patches in-radius 1 [ set quality ( quality * 0.96 ) ]
  ask patches in-radius 2 [ set quality ( quality * 0.97 ) ]
  ask patches in-radius 3 [ set quality ( quality * 0.98 ) ]
  ask patches in-radius 4 [ set quality ( quality * 0.99 )
    if (quality < 1) [ set quality 1]
  ]
end 

to raise-price
  ask patch-here [ set price ( price * 1.05 ) ]
  ask patches in-radius 1 [ set price ( price * 1.04 ) ]
  ask patches in-radius 2 [ set price ( price * 1.03 ) ]
  ask patches in-radius 3 [ set price ( price * 1.02 ) ]
  ask patches in-radius 4 [ set price ( price * 1.01 )
   if price > 100 [ set price 100 ] ]
end 

to raise-value
  ask patch-here [ set quality ( quality * 1.05 ) ]
  ask patches in-radius 1 [ set quality ( quality * 1.04 ) ]
  ask patches in-radius 2 [ set quality ( quality * 1.03 ) ]
  ask patches in-radius 3 [ set quality ( quality * 1.02 ) ]
  ask patches in-radius 4 [ set quality ( quality * 1.01 )
    if quality > 100 [ set quality 100 ]
  ]
end 

to decrease-price
  ask patch-here [ set price ( price * 0.95 ) ]
  ask patches in-radius 1 [ set price ( price * 0.96 ) ]
  ask patches in-radius 2 [ set price ( price * 0.97 ) ]
  ask patches in-radius 3 [ set price ( price * 0.98 ) ]
  ask patches in-radius 4 [ set price ( price * 0.99 )
    if (price < 1) [ set price 1]
  ]
end 

;;
;; Runtime Procedures
;;

to go
  locate-poor
  locate-rich
  if counter > residents-per-job
  [
    locate-service
    set counter 0
  ]
  if count (rich) >= 20 [kill-rich]
  if count (poor) >= 20 [kill-poor]
  if count (jobs) >= max-jobs [kill-service]
  update-view
  do-plots
  tick
end 

to locate-poor
  set counter ( counter + poor-per-step )
  create-poor poor-per-step
  [
    set color 105
    set shape "box"
    evaluate-poor
    decrease-value
    decrease-price
  ]
end 

to locate-rich
  set counter ( counter + rich-per-step )
  create-rich rich-per-step
  [
    set color 126
    set shape "box"
    evaluate-rich
    raise-price
    raise-value
  ]
end 

to evaluate-poor
  let candidate-patches n-of number-of-tests patches
  set candidate-patches candidate-patches with [ not any? turtles-here ]
  if (not any? candidate-patches)
    [ stop ]

  ;; we use a hedonistic utility function for our agents, shown below
  ;; basically, poor people are looking for inexpensive real estate, close to jobs
  let best-candidate max-one-of candidate-patches
    [ patch-utility-for-poor ]
  move-to best-candidate
  set utilityp [ patch-utility-for-poor ] of best-candidate
end 

to-report patch-utility-for-poor
    report ( ( 1 / (sddist / 100 + 0.1) ) ^ ( 1 - poor-price-priority ) ) * ( ( 1 / price ) ^ ( 1 + poor-price-priority ) )
end 

to evaluate-rich
  let candidate-patches n-of number-of-tests patches
  set candidate-patches candidate-patches with [ not any? turtles-here ]
  if (not any? candidate-patches)
    [ stop ]

  ;; we use a hedonistic utility function for our agents, shown below
  ;; basically, rich people are looking for good quality real estate, close to jobs
  let best-candidate max-one-of candidate-patches
        [ patch-utility-for-rich ]
  move-to best-candidate
  set utilityr [ patch-utility-for-rich ] of best-candidate
end 

to-report patch-utility-for-rich
  report ( ( 1 / (sddist + 0.1) ) ^ ( 1 - rich-quality-priority ) ) * ( quality ^ ( 1 + rich-quality-priority) )
end 

to kill-poor
  repeat ( death-rate )
  [
    ;always kill the person that's been around the longest
    ask min-one-of poor [who]
      [ die ]
  ]
end 

to kill-rich
  repeat ( death-rate)
  [
    ;always kill the person that's been around the longest
    ask min-one-of rich [who]
      [ die ]
  ]
end 

to kill-service
  ; always kill the oldest job
  ask min-one-of jobs [who]
    [ die ]
  ask patches
    [ set sddist min [distance myself + .01] of jobs ]
end 

to locate-service
  let empty-patches patches with [ not any? turtles-here ]

  if any? empty-patches
  [
    ask one-of empty-patches
    [
      sprout-jobs 1
      [
        set color red
        set shape "circle"
        set size 2
        evaluate-job
      ]
    ]
    ask patches
      [ set sddist min [distance myself + .01] of jobs ]
  ]
end 

to evaluate-job
  let candidate-patches n-of number-of-tests patches
  set candidate-patches candidate-patches with [ not any? turtles-here ]
  if (not any? candidate-patches)
    [ stop ]

  ;; In this model, we assume that jobs move toward where the money is.
  ;; The validity of this assumption in a real-world setting is worthy of skepticism.
  ;;
  ;; However, it may not be entirely unreasonable. For instance, places with higher real
  ;; estate values are more likely to have affluent people nearby that will spend money
  ;; at retail commercial shops.
  ;;
  ;; On the other hand, companies would like to pay less rent, and so they may prefer to buy
  ;; land at low real-estate values
  ;; (particularly true for industrial sectors, which have no need for consumers neraby)
  let best-candidate max-one-of candidate-patches [ price ]
  move-to best-candidate
  set utility [ price ] of best-candidate
end 

;;
;; Visualization Procedures
;;

to update-view
  if (view-mode = "poor-utility" or view-mode = "rich-utility")
  [
    let poor-util-list [ patch-utility-for-poor ] of patches
    set min-poor-util min poor-util-list
    set max-poor-util max poor-util-list

    let rich-util-list [ patch-utility-for-rich ] of patches
    set min-rich-util min rich-util-list
    set max-rich-util max rich-util-list
  ]

  ask patches [ update-patch-color ]
end 

to update-patch-color
  ;; the particular constants we use to scale the colors in the display
  ;; are mainly chosen for visual appeal
  ifelse view-mode = "quality"
  [
    set pcolor scale-color green quality 1 100
  ][
  ifelse view-mode = "price"
  [
    set pcolor scale-color yellow price 0 100
  ][
  ifelse view-mode = "dist"
  [
    set pcolor scale-color blue sddist  ( 0.45 * ( max-pxcor * 1.414 ) ) ( 0.05 * ( max-pxcor * 1.414 ) )
  ][
  ifelse view-mode = "poor-utility"
  [
    ; use a logarithm for coloring, so we see better gradation
    set pcolor scale-color sky ln patch-utility-for-poor ln min-poor-util ln max-poor-util
  ][
  if view-mode = "rich-utility"
  [
    ; use a logarithm for coloring, so we see better gradation
    set pcolor scale-color pink ln patch-utility-for-rich ln min-rich-util ln max-rich-util
  ]]]]]
end 

;;
;; Plotting Procedure
;;

to do-plots
  let rtotal 0
  let ptotal 0
  let step 0
  let rtime 0
  let ptime 0

  set-current-plot "Travel Distance"
  set rtotal 0
  set rtime 0
  set ptotal 0
  set ptime 0
  set-current-plot-pen "rich"
  plot median [ min [distance myself] of jobs ] of rich

  set-current-plot-pen "poor"
  plot median [ min [distance myself] of jobs ] of poor
end 


; Copyright 2007 Uri Wilensky.
; See Info tab for full copyright and license.

There are 10 versions of this model.

Uploaded by When Description Download
Uri Wilensky almost 11 years ago Updated to NetLogo 5.0.4 Download this version
Uri Wilensky over 11 years ago Updated version tag Download this version
Uri Wilensky over 11 years ago Updated to version from NetLogo 5.0.3 distribution Download this version
Uri Wilensky over 12 years ago Updated to NetLogo 5.0 Download this version
Uri Wilensky almost 14 years ago Updated from NetLogo 4.1 Download this version
Uri Wilensky almost 14 years ago Updated from NetLogo 4.1 Download this version
Uri Wilensky almost 14 years ago Updated from NetLogo 4.1 Download this version
Uri Wilensky almost 14 years ago Updated from NetLogo 4.1 Download this version
Uri Wilensky almost 14 years ago Model from NetLogo distribution Download this version
Uri Wilensky almost 14 years ago Urban Suite - Economic Disparity Download this version

Attached files

File Type Description Last updated
Urban Suite - Economic Disparity.png preview Preview for 'Urban Suite - Economic Disparity' about 11 years ago, by Uri Wilensky Download

This model does not have any ancestors.

This model does not have any descendants.