# Self-Balancing Social Distancing

No preview image

Model was written in NetLogo 6.1.1
•
Viewed 61 times
•
Downloaded 1 time
•
Run 0 times

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

Info tab cannot be displayed because of an encoding error

## 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 daily-delta total-infected avg-daily-delta total-delta moving-average day-1 day-2 day-3 day-4 day-5 transmissibility ] turtles-own[ infected? immune? distanced? dead? ] to setup clear-all set-patch-size (275 / max-pxcor) setup-turtles setup-infected setup-distancers set max-infected (count turtles with [infected?]) set cumulative-output (0) set transmissibility (1) 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 init-num-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) infect-susceptibles recover-infected death recolor move-normal move-distancers calculate-max-infected calculalate-cumulative-output calculate-daily-delta if ticks > 0 [calculate-avg-daily-delta] calculate-total-infected if self-balancing = true[ adjust-distancers ] recolor calculate-moving-average tick end to adjust-distancers let daily-delta-prop (daily-delta / num-people) if ((total-infected / num-people) > (threshold) or ((daily-delta-prop) > .005)) [ if (daily-delta > 0) ;; let's also say that we need at least 5% of the population NOT distancing. [ if (((count turtles with [distanced? and not immune? and not dead?] + (num-people * distance-step-ups)) < (num-people * .95)) and ((count turtles with [not distanced? and not immune? and not dead?]) > (num-people * distance-step-ups))) [ let new-distanced ((num-people * distance-step-ups)) ask n-of new-distanced turtles with [not distanced? and not immune? and not dead?] [ set distanced? true if (color = black) [ set color blue] ] ] ] ] if ((total-infected / num-people) < (threshold * .75)) [ if (daily-delta < 0) [ let new-not-distanced (num-people * distance-step-downs) if (new-not-distanced < count turtles with [distanced? and not immune? and not dead?])[ ask n-of new-not-distanced turtles with [distanced? and not immune? and not dead?] [ set distanced? false if (color = blue) [ set color black] ] ] ] ] end to infect-susceptibles ;; S -> I ask turtles with [not infected? and not immune?][ let infected-neighbors (count turtles-here with [infected?]) if (random-float 1 < 1 - (((1 - transmissibility) ^ infected-neighbors))) [set infected? true] ;let infected-neighbors (count other turtles with [infected?] in-radius 1) ; 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] ask turtles with [distanced? and not infected?] [ set color blue] ask turtles with [not distanced? and not infected?] [ set color white] ask turtles with [immune?] [set color gray] ask turtles with [dead?] [ set color pink] end to move-normal ask turtles with [not dead? and not distanced?] [ right random 360 ;;get a new random heading forward random sociability-of-non-distancers ] end to move-distancers ask turtles with [distanced? and not dead?][ right random 360 forward random 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. ;;1% of infected die, ;;if we are saying each tick equals 1 day, ;;and 1% of sick patients should be dead at 2 weeks ;;daily mortality should be (1-x)^14=.99, x= 0.000717624 ask turtles with [infected?] [ if random-float 1 < 0.000717624 [set dead? true set color pink set infected? false ] ] 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? and not dead?] * 2) + (count turtles with [not infected? and distanced? and not dead?])) set cumulative-output (cumulative-output + y) end to calculate-total-infected set total-infected ((count turtles with [infected? and not dead?])) end to calculate-daily-delta set daily-delta (count turtles with [infected? and not dead?] - total-infected) end to calculate-avg-daily-delta let y (daily-delta) set total-delta (total-delta + y) set avg-daily-delta (total-delta / ticks) end to calculate-moving-average set day-1 (day-2) set day-2 (day-3) set day-3 (day-4) set day-4 (day-5) set day-5 (daily-delta) if (ticks > 4) [ set moving-average ((day-1 + day-2 + day-3 + day-4 + day-5) / 5) ] end to-report total-adjusted-output report cumulative-output / (num-people * 2 * (ticks)) 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-distancing report ((count turtles with [distanced? and not dead? and not immune?]) / 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.

## Attached files

No files

This model does not have any ancestors.

This model does not have any descendants.