Project Aggregation

Project Aggregation preview image

1 collaborator

Seth-cropped Seth Brown (Author)

Tags

(This model has yet to be categorized with any tags)
Parent of 1 model: "Dynamic Project Aggregation"
Visible to everyone | Changeable by everyone
Model was written in NetLogo 5.0.4 • Viewed 265 times • Downloaded 12 times • Run 0 times
Download the 'Project Aggregation' 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?

The model was developed to be a stylized model investigating project aggregation for private investment in green infrastructure (GI) in an ultra-urban setting. More specifically, this model was developed with the intent to capture the basic behavior of how project aggregation works at a macro level in order to inform critical system behavior, such as thresholds of diminishing returns, optimal aggregation scenarios, connectivity, and general patterns of investment emergent behaviour related to project aggregation.

The development of the model focused on the use of variables, elements, parameters, and procedures that best capture the dynamics of the parcel/property aggregation and investment in green infrastructure. Considering the conceptual nature of this model, synthetic data and assumptions were used in the model development.

## HOW IT WORKS

In the aggregation model, the world is comprised of 775 patches, which represent parcels/properties in an ultra-urban setting, along with a user-defined number of turtles representing potential investors in green infrastructure. The “Favorability Level” (FL) values range from -2 to 2, and in this context is intended to reflect the ability to install and construct green infrastructure in a practical sense (-2 is unfavorable, 2 is highly favorable). Specifically, this variable represents common site conditions that impact the ability to invest in green infrastructure, such as low-permeable soils, high amounts of existing infrastructure (underground utilities), and a high seasonal groundwater table. There is an option to use a normal distribution for favorability levels assigned to patches (with a mean of zero (neutral favorability)) or a random distribution as well based upon user preference.

Six user-defined parameters are included in the model that impacts investment dynamics:

1. “Favorability Threshold” (FT) is a parameter that is intended to represent the level of risk accepted by a potential risk, with a range and values consistent with FL values – in short, an investor with a low risk-tolerance would set this threshold to 2, meaning a site would have to be highly favourable in order for them to invest on that patch.

2. “Favorability Need” (FN) is simply the summation of FL values between a patch with an “active investor” and each patch within a Moore neigbhorhood. An “active investor” is an agent (turtle) who is randomly placed on a patch that has a FL value that is equal to, or less than, the FT value for that simulation. In this circumstance, the patch becomes an “invested” patch, and the investor becomes an “active investor”. The FN parameter is intended to represent the favorability of investment for each patch in a Moore neighborhood surrounding an active investor, and is a surrogate for growth in local investment.

3. The Number of Turtles (Investors) (TU) simply reflects the amount of interest in the investment community to invest in this area – the higher the investment interest, the higher the number of investors. Since the total number of patches in the modelling world is 775, the range for this parameter should be 0 to 775, but a minimum and maximum of 25 and 700 were used to represent more realistic conditions.

4. The “Level of Competition” (LoC) reflects the tolerance of investors to competition in local area (Moore neighborood) around a patch hosting an active investor, with values ranging from 1 to 9. A value of 1 would indicate no tolerance to competition (limiting only 1 investor to exist within an entire Moore neighbourhood), and a value of 9 reflects complete tolerance to competition locally.

5. The “Growth Capacity” (GC) parameter is intended to reflect conditions or policies favourable to growth in investment globally (i.e., beyond the local, or Moore neighbourhood level), and is defined as the number of other invested patches surrounding a patch without an active investor located beyond the local reach (Moore neighbourhood) of an active investor required to grow. GC values range between 0 and 8, with 0 reflecting very favourable growth conditions (meaning that a patch can become invested regardless of the number of other invested patches within its Moore neighbourhood) and conversely, a value of 8 would require that all local patches are invested before the central patch can become invested as well.

6. The “Limit of Investment Radius” (IR) reflects the aggressiveness of active investors to seek investment opportunities beyond the local scale, with values ranging between 1 and 5. The radius term here is defined as the radius of a patch, so a radius of 1 means the distance between the center of one patch to the center of an patch within a Von Neumann neighbourhood. Clearly, the higher the radius, the more aggressive the active investor is in seeking investment opportunities.

Four procedures are included in the model; Set Up (SU), Determine Competitors (DC), Neighbors Test (NT), and Growth (GR):

1. The SU procedure establishes the world, populates it randomly with normally-distributed patches of varying FL values (and colors reflecting these values). Further, this procedure randomly populates the world with a user-defined number of agents (potential investors), which is represented by yellow trees.

2. The DC procedure randomly reduces the number of potential investors to be consistent with the user-defined LoC parameter.

3. The NT procedure transforms potential investors to active investors (blue trees) by comparing the FT value with the FL value of the patch on which the potential investor is located. Further, this procedure transforms patches into invested patches locally around an active investor if the computed FN value is equal to or greater than the user-defined FN value for each local patch and if that local patch has an FL value above the user-defined FT value as well.

4. The GR procedure transforms patches beyond the local scale (global) into invested patches if they are within the Investment Radius, have a FL value equal to or greater than the user-defined FT value, and if the number of locally invested parcels is equal to or greater than the user-defined GC value.

## HOW TO USE IT

Use the slider for the six user-defined input parameters, as noted above, to establish initial conditions. Push the "Set Up" button to establish patch and potential investor distribution. You can push the "Go-Once" button, which will run all procedures automatically. If you'd like to see how each procedure works, you can push (in order) the "Determine Competitors" button to reduce competitors, then the "Neighbors Test" button to transform potential investors to active investors and qualified patches into invested patches locally (in neighborhood), and then the "Growth" button to transform qualified patches outside of local sphere of active investors into invested parcels.

If you'd like to run a scenario ten times consecutively, just type "sweep-test" in the observer window. You can then copy and paste these values into a spreadsheet in order to obtain an average value for the ten model runs performed.

## THINGS TO NOTICE

Thresholds relationships were found to exist that can help to inform future work. For instance, high rates of growth in invested patches occur across all relationships when initial investor population is varied between 25 and 200. However, instability and diminishing returns begin to occur when investor population reaches approximately 25 percent of total patch population (about 200 investors), and this diminishing return matures at 40 percent of total patch population (about 300 investors). This diminishing return likely points to a saturation point of investment within the model, where an increase in the population of investors becomes less meaningful in terms of invested patches. A similar diminishing return occurs for GC values between 5 and 6, which indicates that a “crowding out” likely limits the additional growth gained by a more favorable growth condition. In other words, most of the global growth that could possibly occur can be realized when 5 or 6 of neighboring patches are invested.

Notice the distribution of the FL values for invested patches when varying the FT and FN values.

Notice the number of multiple investors when varying the LoC value (hint: high LoC values should lead to higher numbers of multiple investors) - a high number of multiple investors points to either inefficient investment policies or it means that investment interest is high, which may lead to highly competitive field - which may drive up costs of investable parcels.

Notice the difference in invested parcels as well as parcel distribution after hitting the "Neighbors Test" button and the "Growth" button. This illustrates the difference between local and global investments.

## THINGS TO TRY

Try to run the model under varying scenarios and examine the resulting connectivity of invested parcels.

## EXTENDING THE MODEL

Experiment with using neighbors4 instead of neighbors and see results (see below).

Include a limit of investment per period (year) and see growth occur dynamically in a year-by-year basis.

Incorporate an investee risk threshold for patches and require that investee risk level match investor risk level before investment can occur.

Develop a population of investors and parcels (turtles and patches) with a heterogenous distribution of risk behavior.

Investigate the actual distribution of favorabilty of sites for investment (based upon site conditions/constraints) and formalize a method to use this distribution when generating initial patch distribtion.

## NETLOGO FEATURES

The neighbors primitive returns the agentset of the patches to the north, south, east, west, northeast, northwest, southeast, and southwest. `neighbors4` is like `neighbors` but only uses the patches to the north, south, east, and west. Some aBMs, like this one, are defined using the 8-neighbors rule, others the 4-neighbors.

## RELATED MODELS

In Model Library:

- Game of Life

- Altruism

- Slime

- Urban Suite: Urban Sprawl

## CREDITS AND REFERENCES

The Game of Life was invented by John Horton Conway.

See also:

Martin Gardner, "Mathematical Games: The fantastic combinations of John Conway's new solitaire game `life',", Scientific American, October, 1970, pp. 120-123.

## HOW TO CITE

If you mention this model in a publication, we ask that you include this citation for the model:

* Brown, S. (2013). NetLogo Aggregation model. Krasnow Institute for Advanced Study, Computational Social Science, George Mason University, Fairfax, VA. http://www.css.gmu.edu/

## COPYRIGHT AND LICENSE

Copyright 2013 Seth Brown

This model was created to fullfill requirements for CSS 899 - 001 Introduction to NetLogo taught by Steve Scott and Dr. Andrew Crooks at George Mason University, Fall, 2013, Fairfax, Virginia. http://www.css.gmu.edu/andrew

Comments and Questions

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

Click to Run Model

breed [investors investor]

patches-own [
  favorability-level?         ;; indicates level of favorability for cell, -2 for unfavorable, -1 for 
                              ;; less favorable, 0 for neutral, 1 for more favorable, 2 for favorable
  favorable-neighbors  ;; counts how many neighboring cells make a favorable match
near-patches
]

to setup
  clear-all
  ask patches
  ;; sets patch colors randomly ranging between 1-5   
    [if distribution = "random" [ set pcolor ((random 5) + 102) ]
      if distribution = "normal" [set pcolor (round (random-normal 2.5 1) + 102)]
    ]
  ask patches
    [ set pcolor [pcolor] of one-of neighbors ] 
  ask n-of num-turtles patches [ sprout 1 ] 
  ask patches with [pcolor <= 102]
  [set favorability-level? -2]
  ask patches with [pcolor = 103]
  [set favorability-level? -1]
  ask patches with [pcolor = 104]
  [set favorability-level? 0]
  ask patches with [pcolor = 105]
  [set favorability-level? 1]
  ask patches with [pcolor >= 106]
  [set favorability-level? 2]
  ask turtles [set shape "tree" set color 45]
  reset-ticks
;  go
;  determine-competitors
;  neighbors-test
;  grow
;  do-plot
end 

to go
  determine-competitors
  neighbors-test
  grow
  do-plot
end 

to determine-competitors
  ask turtles [
    let competitors count turtles-on neighbors 
    if competitors >= level-of-competition  
    [die]
  ]
end 

to neighbors-test ;; determining if neighbors are good for investment
  repeat 10
  [
    ask patches [
      let added-self [favorability-level?] of patch-at 0 0
      let added-east [favorability-level?] of patch-at 1 0
      let added-west [favorability-level?] of patch-at -1 0
      let added-north [favorability-level?] of patch-at 0 1
      let added-south [favorability-level?] of patch-at 0 -1
      let added-southeast [favorability-level?] of patch-at 1 -1
      let added-northeast [favorability-level?] of patch-at 1 1
      let added-southwest [favorability-level?] of patch-at -1 -1
      let added-northwest [favorability-level?] of patch-at -1 1
      
      if added-self + added-east >= favorability-need 
      and 
      (any? turtles-here)
      and
      added-self >= favorability-threshold [ask patch-at 1 0 [set pcolor 55 ] ]
      
      if added-self + added-west >= favorability-need 
      and 
      (any? turtles-here)
      and
      added-self >= favorability-threshold  [ask patch-at -1 0 [set pcolor 55 ] ]
      
      if added-self + added-north >= favorability-need 
      and 
      (any? turtles-here)    
      and
      added-self >= favorability-threshold  [ask patch-at 0 1 [set pcolor 55 ] ]
      
      if added-self + added-south >= favorability-need    
      and
      (any? turtles-here)
      and
      added-self >= favorability-threshold  [ask patch-at 0 -1 [set pcolor 55 ] ]
      
      if added-self + added-southeast >= favorability-need 
      and 
      (any? turtles-here) 
      and
      added-self >= favorability-threshold [ask patch-at 1 -1 [set pcolor 55 ] ]
      
      if added-self + added-northeast >= favorability-need 
      and 
      (any? turtles-here)
      and
      added-self >= favorability-threshold [ask patch-at 1 1 [set pcolor 55 ] ]
      
      if added-self + added-southwest >= favorability-need 
      and 
      (any? turtles-here)
      and
      added-self >= favorability-threshold [ask patch-at -1 -1 [set pcolor 55 ] ]
      
      if added-self + added-northwest >= favorability-need    
      and
      (any? turtles-here) 
      and
      added-self >= favorability-threshold [ask patch-at -1 1 [set pcolor 55 ] ]
    
      if any? neighbors with [ pcolor = 55 ]  
      and
      (any? turtles-here) 
      and 
      favorability-level? >= favorability-threshold
      [set pcolor 55]   
    ]
  ]
  ask turtles [
    if any? neighbors with [ pcolor = 55 ]  
    and
    (any? turtles-here) 
    and 
    favorability-level? >= favorability-threshold
    [hatch-investors 1 [set color 105 set shape "tree"]]
    if any? investors-here [die] 
  ]
end 

to grow
  repeat 5
  [
    ask patches [
   ask investors
    [
      ask patches in-radius investment-limit-radius
          [set near-patches 1]] 
 
;      let near-patches patches in-radius investment-limit-radius

      if count neighbors with [ pcolor = 55 ] >= growth-capacity 
      and 
      favorability-level? >= favorability-threshold
      and
      near-patches = 1
      and 
      [favorability-level?] of patch-at 1 0  >= favorability-threshold
      [ask patch-at 1 0 [set pcolor 55 ]]
        
      if count neighbors with [ pcolor = 55 ] >= growth-capacity 
      and 
      favorability-level? >= favorability-threshold
      and
      near-patches = 1
      and 
      [favorability-level?] of patch-at -1 0  >= favorability-threshold
      [ask patch-at -1 0 [set pcolor 55 ]]
      
      if count neighbors with [ pcolor = 55 ] >= growth-capacity 
      and 
      favorability-level? >= favorability-threshold
      and
      near-patches = 1
      and 
      [favorability-level?] of patch-at -1 -1  >= favorability-threshold
      [ask patch-at -1 -1 [set pcolor 55 ]]    
      
      if count neighbors with [ pcolor = 55 ] >= growth-capacity 
      and 
      favorability-level? >= favorability-threshold
      and
      near-patches = 1
      and 
      [favorability-level?] of patch-at 0 -1  >= favorability-threshold
      [ask patch-at 0 -1 [set pcolor 55 ]]       
      
      if count neighbors with [ pcolor = 55 ] >= growth-capacity 
      and 
      favorability-level? >= favorability-threshold
      and
      near-patches = 1
      and 
      [favorability-level?] of patch-at -1 -1  >= favorability-threshold
      [ask patch-at -1 -1 [set pcolor 55 ]]       
      
      if count neighbors with [ pcolor = 55 ] >= growth-capacity 
      and 
      favorability-level? >= favorability-threshold
      and
      near-patches = 1
      and 
      [favorability-level?] of patch-at 0 1  >= favorability-threshold
      [ask patch-at 0 1 [set pcolor 55 ]]    
      
      if count neighbors with [ pcolor = 55 ] >= growth-capacity 
      and 
      favorability-level? >= favorability-threshold
      and
      near-patches = 1
      and 
      [favorability-level?] of patch-at 1 1  >= favorability-threshold
      [ask patch-at 1 1 [set pcolor 55 ]]          
      
      if count neighbors with [ pcolor = 55 ] >= growth-capacity 
      and 
      favorability-level? >= favorability-threshold
      and
      near-patches = 1
      and 
      [favorability-level?] of patch-at 1 -1  >= favorability-threshold
      [ask patch-at 1 -1 [set pcolor 55 ]] 
      
      if count neighbors with [ pcolor = 55 ] >= growth-capacity 
      and 
      favorability-level? >= favorability-threshold
      and
      near-patches = 1
      and 
      [favorability-level?] of patch-at -1 1  >= favorability-threshold
      [ask patch-at -1 1 [set pcolor 55 ]]           
          
   ]
    ]
  do-plot
end  

to do-plot
  let invested-patches [favorability-level?] of patches with [pcolor = 55]
  set-current-plot "Favorability Levels of Invested Parcels"
  set-current-plot-pen "parcels"
  histogram invested-patches
end 

to-report Active-Investors
    report count patches with [pcolor = 55 and (any? turtles-here) ] 
end 

to-report Potential-Investors
  report count turtles
end 

to-report Invested-Parcels
  report count patches with [pcolor = 55]
end 

to-report Multiple-Investors
  report count patches with [pcolor = 55
and
(count investors-on neighbors > 1)]
end 




;
; sweep-test
;
; this is an automated parameter sweeping test
; it runs num-tests interations of the various configurations
; and prints results to the console
;
;Least Favorable
;  set growth-capacity 8
;  set investment-limit-radius 1
;  set num-turtles 25
;  set favorability-threshold 2
;  set favorability-need 4 
;  set level-of-competition 1

;Reasonable Scenario
;  set growth-capacity 2
;  set investment-limit-radius 1
;  set num-turtles 25
;  set favorability-threshold 1
;  set favorability-need 2 
;  set level-of-competition 2

;Most Favorable
;  set growth-capacity 0
;  set investment-limit-radius 5
;  set num-turtles 700
;  set favorability-threshold 0
;  set favorability-need 0 
;  set level-of-competition 9

to sweep-test
  ;
  ; setup the configuration
  ;
;;  set growth-capacity 1
;;  set investment-limit-radius 5
;;  set num-turtles 700
;;  set favorability-threshold 0
;;  set favorability-need 0 
;;  set level-of-competition 9

 
  let num-tests 10
  let i 0

  set i 0
  while [i <= 10]
    [
      setup
      print (Invested-parcels)
      set i (i + 1)
    ]
end 

to sweep-test-turtles
  ;
  ; setup the configuration
  ;
  set growth-capacity 3
  set investment-limit-radius 3
  set favorability-threshold 1
  set favorability-need 2 
  set level-of-competition 5
  set num-turtles 25
 
  let num-tests 25
  let i 0

  set i 0
  while [i <= 175]
    [
      setup
      print (word "Invested Parcels, " "Multiple Investors, " "Active Investors, " "Potential Investors, "  
        Invested-parcels ", " Multiple-Investors ", " Active-Investors ", " Potential-Investors ", " num-turtles ", " i ", " num-tests)
      set i (i + 1)
      if i = (num-tests) [set num-turtles (50)]
      if i = (num-tests + 50) [set num-turtles (100)]
      if i = (num-tests + 75) [set num-turtles (200)]
      if i = (num-tests + 100) [set num-turtles (300)]
      if i = (num-tests + 125) [set num-turtles (700)]
    ]
end 

to sweep-test-turtles-10
  ;
  ; setup the configuration
  ;
  set growth-capacity 3
  set investment-limit-radius 5
  set favorability-threshold 2
  set favorability-need 4 
  set level-of-competition 2
  set num-turtles 25
 
  let num-tests 10
  let i 0

  set i 0
  while [i <= 60]
    [
      setup
      print (word "Invested Parcels, " "Multiple Investors, " "Active Investors, " "Potential Investors, "  
        Invested-parcels ", " Multiple-Investors ", " Active-Investors ", " Potential-Investors ", " num-turtles ", " i ", " num-tests)
      set i (i + 1)
      if i = (num-tests) [set num-turtles (50)]
      if i = (num-tests + 10) [set num-turtles (100)]
      if i = (num-tests + 20) [set num-turtles (200)]
      if i = (num-tests + 30) [set num-turtles (300)]
      if i = (num-tests + 40) [set num-turtles (700)]
    ]
end 

to sweep-test-growth-capacity
  ;
  ; setup the configuration
  ;
  set growth-capacity 8
  set investment-limit-radius 2
  set num-turtles 300
  set favorability-threshold 1
  set favorability-need 2 
  set level-of-competition 2
 
  let num-tests 25
  let i 0

  set i 0
  while [i <= 175]
    [
      setup
      print (word "Invested Parcels, " "Multiple Investors, " "Active Investors, " "Potential Investors, "  
        Invested-parcels ", " Multiple-Investors ", " Active-Investors ", " Potential-Investors ", " growth-capacity ", " i ", " num-tests)
      set i (i + 1)
      if i = (num-tests) [set growth-capacity (5)]
      if i = (num-tests + 50) [set growth-capacity (4)]
      if i = (num-tests + 75) [set growth-capacity (3)]
      if i = (num-tests + 100) [set growth-capacity (2)]
      if i = (num-tests + 125) [set growth-capacity (1)]
    ]       
end 

to sweep-test-investment-radius
  ;
  ; setup the configuration
  ;
  set growth-capacity 0
  set investment-limit-radius 5
  set num-turtles 700
  set favorability-threshold 0
  set favorability-need 0 
  set level-of-competition 9
 
  let num-tests 25
  let i 0

  set i 0
  while [i <= 150]
    [
      setup
      print (word "Invested Parcels, " "Multiple Investors, " "Active Investors, " "Potential Investors, "  
        Invested-parcels ", " Multiple-Investors ", " Active-Investors ", " Potential-Investors ", " investment-limit-radius ", " i ", " num-tests)
      set i (i + 1)
      if i = (num-tests) [set investment-limit-radius (4)]
      if i = (num-tests + 50) [set investment-limit-radius (3)]
      if i = (num-tests + 75) [set investment-limit-radius (2)]
      if i = (num-tests + 100) [set investment-limit-radius (1)]
    ]       
end 

to sweep-test-favorability-threshold
  ;
  ; setup the configuration
  ;
  set growth-capacity 0
  set investment-limit-radius 5
  set num-turtles 700
  set favorability-threshold 0
  set favorability-need 0 
  set level-of-competition 9
 
  let num-tests 25
  let i 0

  set i 0
  while [i <= 100]
    [
      setup
      print (word "Invested Parcels, " "Multiple Investors, " "Active Investors, " "Potential Investors, "  
        Invested-parcels ", " Multiple-Investors ", " Active-Investors ", " Potential-Investors ", " favorability-threshold ", " i ", " num-tests)
      set i (i + 1)
      if i = (num-tests) [set favorability-threshold (1)]
      if i = (num-tests + 50) [set favorability-threshold (2)]
    ]       
end 

to sweep-test-favorability-need
  ;
  ; setup the configuration
  ;
  set growth-capacity 0
  set investment-limit-radius 5
  set num-turtles 700
  set favorability-threshold 0
  set favorability-need 0 
  set level-of-competition 9
 
  let num-tests 25
  let i 0

  set i 0
  while [i <= 150]
    [
      setup
      print (word "Invested Parcels, " "Multiple Investors, " "Active Investors, " "Potential Investors, "  
        Invested-parcels ", " Multiple-Investors ", " Active-Investors ", " Potential-Investors ", " favorability-need ", " i ", " num-tests)
      set i (i + 1)
      if i = (num-tests) [set favorability-need (1)]
      if i = (num-tests + 50) [set favorability-need (2)]
      if i = (num-tests + 75) [set favorability-need (3)]
      if i = (num-tests + 100) [set favorability-need (4)]
    ]       
end 

to sweep-test-level-of-competition
  ;
  ; setup the configuration
  ;
  set growth-capacity 0
  set investment-limit-radius 5
  set num-turtles 700
  set favorability-threshold 0
  set favorability-need 0 
  set level-of-competition 9
 
  let num-tests 25
  let i 0

  set i 0
  while [i <= 175]
    [
      setup
      print (word "Invested Parcels, " "Multiple Investors, " "Active Investors, " "Potential Investors, "  
        Invested-parcels ", " Multiple-Investors ", " Active-Investors ", " Potential-Investors ", " level-of-competition ", " i ", " num-tests)
      set i (i + 1)
      if i = (num-tests) [set level-of-competition (5)]
      if i = (num-tests + 50) [set level-of-competition (4)]
      if i = (num-tests + 75) [set level-of-competition (3)]
      if i = (num-tests + 100) [set level-of-competition (2)]
      if i = (num-tests + 125) [set level-of-competition (1)]
    ]       
end 

There is only one version of this model, created almost 4 years ago by Seth Brown.

Attached files

File Type Description Last updated
Project Aggregation.png preview Preview for 'Project Aggregation' almost 4 years ago, by Seth Brown Download

This model does not have any ancestors.

Children:

Graph of models related to 'Project Aggregation'