USA Mass shooting model (NetLogo 6.04)
Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)
WHAT IS IT?
This is a very simple model of USA mass shootings.
Is the mass shooter a maniac or a relatively normal person in a state of great stress? According to the FBI report (Silver, J., Simons, A., & Craun, S. (2018). A Study of the Pre-Attack Behaviors of Active Shooters in the United States Between 2000 – 2013. Federal Bureau of Investigation, U.S. Department of Justice,Washington, D.C. 20535.), only 25% of the active shooters were known to have been diagnosed by a mental health professional with a mental illness of any kind prior to the offense.
The main objects of the model are the humans and the guns. The main factors influencing behavior are the population size, the number of people with mental disabilities ("psycho" in the model terminology) per 100,000 population, the total number of weapons ("guns") in the population, the availability of guns for humans, the intensity of stressors affecting humans and the threshold level of stress, upon reaching which a person commits an act of mass shooting.
The key difference (in the model) between a normal person and a psycho is that a psycho accumulates stressors and, upon reaching a threshold level, commits an act of mass shooting. A normal person is exposed to stressors, but reaching the threshold level for killing occurs only when the simultaneous effect of stressors on him exceeds this level.
HOW IT WORKS
The population dynamics are determined by the following factors: average (normally distributed) life expectancy ("life_span" attribute of humans) and population growth with the percentage of newborns set by the value of the TickReprRatio% slider of the current population volume from 16 to 45 years old.Thus, one step of model time corresponds to a year.
The experiment begins with the creation of a population of adults with a randomly distributed value of age and position in space, as well as a population of guns (in the amount specified by the product of the value TickReprRatio% slider by the size of the population of people), also randomly distributed in space.
In the process of a simulation experiment, people and guns make random movements in space. At each step of the experiment, a breed of stressors is born (in quantities equal to the product of the slider StressorsHumanRatio value by the current size of population), characterized by a random distribution of the force of influence ("value" attribute of stressors) and position in space. People experience the effects of stressors (the total simultaneous effect of stressors located from a person in the radius of StressRadius). At the end of one period of model time, the generation of stressors dies.
If the threshold level of exposure is reached, the attribute "drive" of the human gets the value "true", which means a willingness to commit an act by a mass of shooting. The key difference between a normal person and a psycho is that a psycho accumulates (in memory of "memorysize" units, the value of "memorysize" is set in the model code) stressors and a normal person experiences only momentary stressors.
A person who is ready to shoot (drive is equal to "true" and he's over 11 years old), with a probability of 1/3 performs an act of mass shooting now if there is a gun next to him (in radius GunRadius). After the shooting the shooter dies (both the victims and the shooter do not die as agents of the model, but get the "alive" attribute value "false" (and red color), so that during the experiment one can observe the shooting victims of past years).
The number of psycho in a population is determined by the value of the PsychoPer100000 slider, setting their number per 100,000 people. At each tick of the model time, a certain number of people (procedure Generation) is born, depending on the value of the TickReprRatio% slider and the size of the population from the age of 16 up to 45 years.
HOW TO USE IT
The Quantity slider controls how many humans are in the model, and the GunHumanRatio slider controls how many guns are in model.
The SETUP button forms breeds of humas and guns. To advance the model one step at a time, use the GO ONCE button. The GO button keeps the model running until ticks less then 10000 or count humans with [alive] = 0.
It is possible in the model to change on the fly all radii and StressorsVisible switch.
Reports:
Killed humans (plot) is total number of victims (including shooters) during the experiment. Psycho humans (plot) is quantity of psycho-humans alive in population at the time. Humans/HumansWitnGuns (plot) are quantity of humans and humans in radius GunRadius from the gun at the time. Population AgeHistogram (plot)
For each mass shooting act: "Ticks, Shooter's age, victims, Psycho? (true/false)" (data in Observer window)
THINGS TO NOTICE
The amount of weapons that are potentially accessible to people is set by the slider GunHumanRatio. Its default value is set to 30%. (According to "The Stock and Flow of U.S. Firearms: Results from the 2015 National Firearms Survey" 32% of US men said they personally owned a gun in 2015 and 12% US women said they personally owned a gun in 2015).
With zero weapons, there can be no mass shooting.
THINGS TO TRY
Try varying the values set by all the sliders. With TickReprRatio% less than 2.8, the population dies. A FireRadius value greater than 4 results in an unbelievably large number of casualties during mass shooting acts. An increase in the threshold level (ShootingLevel) leads to the fact that only psychos begin to commit acts of mass shooting. An increase in the radius of exposure to stressors (StressRadius), on the contrary, leads to the fact that a larger number of normal people reach a stress level sufficient to complete an act of mass shooting. And so on...
EXTENDING THE MODEL
The most significant extension of the model would be the implementation of the process on a different time scale (month, day), as well as the realization of the possibility of switching different time scales during the simulation experiment.
In the current version of the model, the population of guns does not increase and the weapons do not "die". A more realistic approach involves the implementation in the model of weapon life cycle and the increase in the number of units of guns over time (according to one or another rule).
NETLOGO FEATURES
The world topology is a "torus".
Lists are used by humans to memorize stressors values.
Stressors are implemented as a breed since the introduction of humans links with each other (to simulate the interaction of humans creating stress) in case of the population size more than 1000 leads to a significant slowdown of the model running.
CREDITS AND REFERENCES
Silver, J., Simons, A., & Craun, S. (2018). A Study of the Pre-Attack Behaviors of Active Shooters in the United States Between 2000 – 2013. Federal Bureau of Investigation, U.S. Department of Justice,Washington, D.C. 20535
McMahon, S. (August 6, 2019). Lawyers, Guns, and Mental Illness. Available at SSRN: https://ssrn.com/abstract=3433116 or http://dx.doi.org/10.2139/ssrn.3433116
The Stock and Flow of U.S. Firearms: Results from the 2015 National Firearms Survey Deborah Azrael, Lisa Hepburn, David Hemenway, Matthew Miller RSF: The Russell Sage Foundation Journal of the Social Sciences, Volume 3, Number 5, October 2017, pp. 38-57 (Article) Published by Russell Sage Foundation
HOW TO CITE
If you mention this model or the NetLogo software in a publication, we ask that you include the citations below.
For the model itself:
.......................................
Please cite the NetLogo software as:
- 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 Ivan Smarzhevskiy 2019
Comments and Questions
globals [i objects] ;; service variables are i, objects breed [humans human] breed [guns gun] breed [shots shot] breed [stressors stressor] humans-own [psycho ;; boolean hasgun ;; boolean alive ;; boolean drive ;; boolean age life_span stress_list ;; Memory for stressors. Psycho has the memory, normal humans has't it memory_size ] stressors-own [value] to setup clear-all create-ordered-shots 10 [set size turt_size set shape "star" set color black] ;; create shots figures create-ordered-humans quantity [ set size turt_size set shape "person" ;; set label who set age random 75 ;; population of different ages humans. They are alive now, not just born. set life_span random-normal 75 6 set hasgun false set alive true set drive false set stress_list [] set memory_size 3 ifelse (random 100000 < PsychoPer100000) [set psycho true set color blue write "Psycho" show who] [set psycho false set color green] setxy random-xcor random-ycor ] create-ordered-guns quantity * GunHumanRatio [ set color white set size turt_size set shape "gun1" setxy random-xcor random-ycor ] write "Psycho" ;; {------OBSERVER------} show count humans with [psycho];; {------OBSERVER------} show "---------------- setup done ------------------" reset-ticks end ;------------------------------------------------------------------------------------- to go ask humans with [alive] [lt random Stoch_Motion_Speed fd random 2 * Stoch_Motion_Speed] ;;; move it stochasticaly!!! ask guns [lt random Stoch_Motion_Speed fd random 2 * Stoch_Motion_Speed] ;;; move it stochasticaly!!! create-stressors quantity * StressorsHumanRatio ;;; generation stressor factor as breed [ set color red setxy random-xcor random-ycor set value random 1000 set hidden? not StressorsVisible ] HasGun? HasDrive? Fire!!! tick generation ;; new humans ask humans [set age age + 1] ask humans with [alive and age > life_span] [die] ;; corpses don't die ))) ask stressors [die] if (ticks = 10000 or count humans with [alive] = 0) [stop] end ;----------------------------------------------- to HasGun? ;; Is there a gun next to human? ask humans [ ifelse (count guns in-radius GunRadius) > 0 [set hasgun true] [set hasgun false] ] end to HasDrive? ask humans [ let vp sum [value] of stressors in-radius StressRadius ifelse length stress_list < memory_size [set stress_list lput vp stress_list ] [set stress_list remove 0 stress_list set stress_list lput vp stress_list] ifelse psycho [ ifelse (sum stress_list > ShootingLevel) [set drive true][set drive false] ] [ ifelse (last stress_list > ShootingLevel) [set drive true][set drive false] ] ] end to Fire!!! ask humans with [drive and alive and age > 11] ;;;; [psycho and alive and age > 15 and drive] OLD version [ if hasgun and random 100 < 33 [ let vpx xcor let vpy ycor set objects count other humans in-radius FireRadius if objects > 0 [ set i 0 while [i < min list objects 10] ;; we have 10 shots figures only [ ask shot i [set color yellow set xcor vpx + random i set ycor vpy - random i] show "Boo-bookh!!!" set i i + 1 ] ask other humans in-radius FireRadius [set alive false set color red] set alive false ;; now psycho is dead write "Ticks, Shooter's age, victims, Psycho?" write ticks write age write objects show psycho stop ] ] ] end to generation let v count humans with [alive and age > 15 and age < 46] create-ordered-humans random-normal (v * TickReprRatio% / 100 ) (v / 20) [ set size turt_size set shape "person" set age 0 set life_span random-normal 75 6 set hasgun false set alive true set drive false set stress_list [] set memory_size 3 ifelse (random 100000 < PsychoPer100000) [set psycho true set color blue write "Psycho" show who] [set psycho false set color green] setxy random-xcor random-ycor ] end
There is only one version of this model, created almost 6 years ago by Ivan Smarzhevskiy.
Attached files
File | Type | Description | Last updated | |
---|---|---|---|---|
USA Mass shooting model (NetLogo 6.04).png | preview | Preview for 'USA Mass shooting model (NetLogo 6.04)' | almost 6 years ago, by Ivan Smarzhevskiy | Download |
This model does not have any ancestors.
This model does not have any descendants.
Ivan Smarzhevskiy
Model running
The model runs very slowly on the web (with the number of agents (people) of the order of 10,000). It is recommended to download the model.
Posted almost 6 years ago