Disease, Social Distancing, Economic Impact

Disease, Social Distancing, Economic Impact preview image

1 collaborator

Default-person Alex Brown (Author)

Tags

Visible to everyone | Changeable by the author
Model was written in NetLogo 6.1.1 • Viewed 178 times • Downloaded 4 times • Run 0 times
Download the 'Disease, Social Distancing, Economic Impact' modelDownload this modelEmbed this model

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


Comments and Questions

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

Click to Run Model



globals [max-infected
  cumulative-output]


turtles-own[
  infected?
  immune?
  distanced?
  dead?
]

to setup
  clear-all
  setup-turtles
  setup-infected
  setup-distancers
  set max-infected (count turtles with [infected?])
  set cumulative-output (0)
  reset-ticks
end 

to setup-turtles
  create-turtles num-people [
    set color white
    set shape "person"
    set size 2
    set infected? false
    set immune? false
    set distanced? false
    set dead? false
    setxy random-pxcor random-pycor
  ]
end 

to setup-distancers
  ask n-of num-people-distancing turtles [
    set color blue
    set distanced? true
  ]
end 

to setup-infected
  ask n-of init-infected turtles [
   set color red
   set infected? true
  ]
end 

to go
  ;;stop if everyone or noone is infected
  ;;if (count turtles with [infected? and not dead?] = 0)
  ;;or (count turtles with [infected?] = num-people)
  if (ticks > 365)
  [stop]

  infect-susceptibles
  recover-infected
  death
  recolor
  move-normal
  move-distancers
  calculate-max-infected
  calculalate-cumulative-output
  tick

  ;;  sociability-of-non-distancers / Sociability-of-Distancers

  repeat ( 1 ) [
  infect-susceptibles
  recover-infected
  death
  recolor
  move-normal
  calculate-max-infected
  calculalate-cumulative-output
  tick
  ]
end 

to infect-susceptibles ;; S -> I
  ask turtles [
    let infected-neighbors (count other turtles with [color = red] in-radius 2)
    if (random-float 1 <  1 - (((1 - transmissibility) ^ infected-neighbors)) and not immune?)
    [set infected? true]
  ]
end 

to recolor
  ask turtles with [infected? and not dead?]
  [ set color red]
end 

to move-normal

  ask turtles with [not dead? and not distanced?] [
    right random 360 ;;get a new random heading
    forward  sociability-of-non-distancers
  ]
end 

to move-distancers
  ask turtles with [distanced? and not dead?][
    right random 360
    forward Sociability-of-Distancers
  ]
  ask turtles with [dead?][

    forward 0
  ]
end 

to recover-infected ;;I -> R

  ;;avg case length is 2 weeks.
  ;;should have 50% chance of becoming immune at 2 weeks
  ;;if we are saying each tick equals 1 day,
  ;;daily odds of recovering should be (1-x)^14=.5, x= 0.0483


  ask turtles with [infected? and not dead?]
  [
    if random-float 1 < 0.0483
    [
      set infected? false
      ifelse are-survivors-immune?
      [
        set immune? true
        set color gray
        set distanced? false
      ]
      [
        set color white
      ]
    ]
  ]
end 

to death
  ;;avg case length is 2 weeks.
  ;;2% of infected die,
  ;;if we are saying each tick equals 1 day,
  ;;and 2% of sick patients should be dead at 2 weeks
  ;;daily mortality should be (1-x)^14=.98, x= 0.00144201
  ask turtles with [infected?]
  [
    if random-float 1 < 0.00144201
    [set dead? true
    set color pink
    ]
  ]
end 

to calculate-max-infected
  let x (count turtles with [infected? and not dead?])
  if x > max-infected
  [set max-infected x]
  if x = 0
  [ask turtles with [distanced?][
    set distanced? false
    set color white
    ]
  ]
end 

to calculalate-cumulative-output
  let y ((count turtles with [infected? and not dead?] * .5) + (count turtles with [not infected? and not distanced?] * 2) + (count turtles with [not infected? and distanced?]))
  set cumulative-output (cumulative-output + y)
end 

to-report total-adjusted-output
  report cumulative-output / (num-people * 2 * (ticks + 1))
end 

to-report calculate-daily-output
  report (((count turtles with [infected? and not dead?] * -1) + (count turtles with [dead?] * -5) + (count turtles with [not infected? and not distanced?] * 2) + (count turtles with [not infected? and distanced?] * 1.5)) / (num-people * 2))
end 

to-report max-infected-prop
  report max-infected / num-people
end 

to-report prop-dead
  let y (count turtles with [dead?])
  report y / num-people
end 

to-report prop-uninfected
  report (count turtles with [not infected? and not immune?]) / num-people
end 

There are 2 versions of this model.

Uploaded by When Description Download
Alex Brown 6 months ago People stop distancing once nobody is sick Download this version
Alex Brown 6 months ago Initial upload Download this version

Attached files

File Type Description Last updated
Disease, Social Distancing, Economic Impact.png preview The Curve 6 months ago, by Alex Brown Download

This model does not have any ancestors.

This model does not have any descendants.