# Virus Spread with Hospital Capacities of Hospital Beds, Medics and Medicines

Model was written in NetLogo 6.4.0
•
Viewed 85 times
•
Downloaded 13 times
•
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

;; 100 ticks = 1 day globals[ pop-susceptible ; counts susceptible population pop-infected ; counts infected population pop-recovered ; counts recovered population pop-deceased ; counts deceased population pop-density ; population density time-infection ; number of ticks that persons remains infected kapa ; percentage of deceased seconds ; used for execution time normal-speed ; normal agents' speed high-speed ; when an agent is infected it's urgent to arrive to hospital time-revision ; ticks needed to check agents at hospital days-hospitalized ; ticks convesrion to days to calculate medicines per day at hospital dead-possibility ; random posibility to compare with kapa ; values for increasing-decreasing chance-of-dead lgm ; low getting medicine hh ; high hospitalized hdm ; high daily medicine hgm ; high getting medicine daily-increase ; if not getting treatment will increase chance-of-dead daily p-deceased ; percentage of deceased p-recovered ; percentage of recovered p-susceptible ; percentage of not infected acc-infected ; infected population accumulator ] breed [persons person] ; principal agents that represent persons breed [units unit] ; agents that represents hospital units breed [banners banner] ; simple label to identify hospital units ; specification for persons persons-own[ status ; susceptible, infected, recovered or deceased ticks-infected ; time in ticks that agent is infected severity ; 0 (low) - not require hospitalization; 1 (mid) - requires revision at hospital; 2 (high) - requires hospitalization chance-of-dead ; increase when not getting attention or hospitalization or medicines p-mobility ; speed of agent's mobility h-target ; hospital where agent will be attended attended ; status of attention time-at-unit ; time spent at hospital days-at-unit ; days at hospital received-medicine ; status of received medicines ] ; specification for hospital units units-own [ u-beds ; number of beds available u-medics ; number of medics available u-medicines ; number of medicines available ] to setup ca reset-ticks reset-timer ; initialize values set pop-susceptible population - 1 set pop-infected 0 set pop-recovered 0 set pop-deceased 0 set pop-density (population / (world-height * world-width) ) set acc-infected 0 set time-infection 210 ; 21 days of infection set kapa 0.15 ; 15% of total infected people will die set normal-speed 0.5 set high-speed 1 set time-revision 10 ; ticks needed to check a person at hospital set days-hospitalized 20 ; max of days that a person can be hospitalized set lgm 0.3 set hh 0.5 set hdm 0.8 set hgm 0.5 set daily-increase 0.05 ask patches[ set pcolor white ] ; person initialize create-persons population[ move-to one-of (patches with [not any? turtles-here]) ; initial position, ensure that two persons don't use same patch set status "susceptible" ; all agents are suceptible set ticks-infected 0 ; counts how many ticks person is infected set severity 0 ; not used until agents gets infected set chance-of-dead 0 ; not used until agents gets infected set p-mobility normal-speed ; agent moves at normal speed set h-target nobody ; while not infected, agent is not looking hospital set attended 0 ; when receives attention at hospital it could take values: 1, 2, 3 or 4 used for statistical info set time-at-unit 0 ; count how many ticks agent is at hospital unit receiving attention set days-at-unit 0 ; count how many days agent is hospitalized set received-medicine 0 ; not need medicine so far update-status ; updates color and shape ] ; calculus for position hospital units in a polygon vertex, so they don't render closer to another let radius ( world-width / 2.5 ) let angle ( 360 / hospitals ) let rotation random 360 ; initialize hospital units create-units hospitals [ set shape "hospital2" set size 2 set color cyan set u-beds beds ; beds defined by slider set u-medics medics ; medics defined by slider calculated as follows medics for shift: 10 at morning, 10 at evening 5 at night set u-medicines medicines ; number of treatments a hospital can provide, 1 per consultation and 1 per day at hospital ; calculations to move the hospital to a polygon vertex let x ( radius * sin ((who - hospitals) * angle) ) let y ( radius * cos ((who - hospitals) * angle) ) let xn ( x * cos(rotation) - y * sin(rotation) ) let yn ( y * cos(rotation) + x * sin(rotation) ) setxy xn yn ; set the label under the icon set label-color [ 0 0 0 128 ] ; label in black color with 50% transparency attach-banner who ( xn + 1 ) ( yn - 1.7 ) ; label sets the id of agent ] ; initialize the first infected person ask one-of persons [ set status "infected" set ticks-infected 1 ; tick 1 of infection set pop-infected (pop-infected + 1) ; update count of infected population set severity 0 ; always initialize with the lower severity set chance-of-dead 1 ; normal chance, depends of posibility determined by kapa update-status ] end to go if all? persons [ status != "infected" ] [ ; stops simulation when infected people is 0 ifelse pop-recovered = 1 [ output-print "Not enough infections. Run again!" ][ set p-susceptible ( pop-susceptible / population ) * 100 set p-deceased ( pop-deceased / acc-infected ) * 100 set p-recovered ( pop-recovered / population ) * 100 output-print word "Percentage of Not infected = " word ( precision p-susceptible 2 ) "%" output-print word "Percentage of Decease = " word ( precision p-deceased 2 ) "%" output-print word "Percentage of Recovered = " word ( precision p-recovered 2 ) "%" ] stop ] ; main process, checks mobility of agents, infection and hospitals consuming ask persons with [ status != "deceased"] [ ; if not infected agent is not looking for hospital and moves normally ifelse h-target = nobody [ rt random 20 lt random 20 ][ ; in case that agent is assigned to an hospital ; check if agent has arrived to hospital and stops moving if any? units-on patch-ahead 1 [ set p-mobility 0 ; actions for agents with severity = 1 (med) if severity = 1 [ if attended = 0 [ ; check if agent has no received attention ask h-target [ ifelse u-medics > 0 [ ; check if there are medics available set u-medics ( u-medics - 1) ; assigns medic ask myself [ set attended 1 ; agent is attended (for medical consultation) ] ][ ask myself [ set h-target nobody ; if not medics available, agent leaves hospital set p-mobility normal-speed ; and change to normal speed moving set attended 2 ; agent didn't receive attention (for medical consultation) set received-medicine 3 ; not getting medicines by insufficient medics ] ] ] ] if attended = 1 [ ; if agents is attended set time-at-unit ( time-at-unit + 1 ) ; counts how many ticks is at consultation if time-at-unit > time-revision [ ; when consultation ends medics is reasigned to hospital ask h-target [ set u-medics ( u-medics + 1 ) ifelse u-medicines > 0 [ ; if there are medicines available agents gets one set u-medicines ( u-medicines - 1 ) ask myself [ set received-medicine 1 ; getting medicines set chance-of-dead ( chance-of-dead * lgm ) ; chance of dead decreased, lgm ] ][ ask myself [ set received-medicine 2 ; not getting medicines by insufficient stock ] ] ] set h-target nobody ; when agent gets attended, no more looking for unit set p-mobility normal-speed ] ] update-status ] ; actions for agents with severity = 2 (high) if severity = 2 [ if attended = 0 [ ask h-target [ ifelse u-medics > 0 [ set u-medics ( u-medics - 1) ask myself [ set attended 1 ; agent is attended (for medical consultation) ] ][ ask myself [ set h-target nobody set p-mobility normal-speed set attended 2 ; agent didn't receive attention (for medical consultation) set received-medicine 3 ; not getting medicines by insufficient medics ] ] ] ] if attended = 1 [ set time-at-unit ( time-at-unit + 1 ) if time-at-unit > time-revision [ ; if medical consultation is finished, free medics and check if it can be hospitalized ask h-target [ set u-medics ( u-medics + 1 ) ifelse u-beds > 0 [ ; if bed is available then is assigned to agent and decreased from count set u-beds ( u-beds - 1) ask myself [ set attended 3 ; agent is hospitalized set chance-of-dead ( chance-of-dead * hh ) ; chance of dead decreased, hh ] ][ ask myself [ set attended 4 ; agents isn't hospitalized ;set chance-of-dead ( chance-of-dead * hnh ) ; chance of dead increased, hnh ask h-target [ ifelse u-medicines > 0 [ ; if there are medicines available agents gets one set u-medicines ( u-medicines - 1 ) ask myself [ set received-medicine 1 ; getting medicines set chance-of-dead ( chance-of-dead * hgm ) ; chance of dead decreased, hgm ] ][ ask myself [ set received-medicine 4 ; not getting medicines by insufficient beds ] ] ] set h-target nobody ; if there is not beds, agent leaves hospital set p-mobility normal-speed ] ] ] ] ] if attended = 3 [ ; if agent is hospitalized, count days set time-at-unit ( time-at-unit + 1 ) if time-at-unit > 10 [ ; if times count 10, a day has passed and medicine is given to agent, if available set days-at-unit ( days-at-unit + 1 ) set time-at-unit 0 ask h-target [ ifelse u-medicines > 0 [ set u-medicines ( u-medicines - 1 ) ask myself [ set received-medicine 1 ; getting medicines set chance-of-dead ( chance-of-dead * hdm ) ; chance of dead decreased every day getting medicines, hdm ] ][ ask myself [ set received-medicine 2 ; not getting medicines by insufficiente stock ] ] ] ] ] update-status ] ] ] fd p-mobility ; move agent based on speed calculated in above actions ] ; infect other agents ask persons with [ status = "infected" ][ let nb (other persons) in-radius 0.1 with [ status = "susceptible" ] ; check for agents nearby with susceptible status and infect them if nb != nobody[ ask nb [ set status "infected" set pop-infected (pop-infected + 1) ; update count for infected population set acc-infected (acc-infected + 1) ; accumulates infected population set pop-susceptible (pop-susceptible - 1) ; update count for susceptible population set severity random 3 ; assign a random severity if severity = 0 [ set chance-of-dead 1 ; basic dead rate, death depends totally by kapa ] if severity != 0 [ set h-target one-of units ; if severity is med or high then look for an hospital face h-target ; set direction toward hospital ] if severity = 1 [ set chance-of-dead 1.25 ; chance of dead increased by severity in 25%, based on basic death rate = 1 ] if severity = 2 [ set p-mobility high-speed ; if severity is high, speed up agent movility set chance-of-dead 1.5 ; chance of dead increased by severity in 50%, based on basic death rate = 1 ] update-status ] ] if ( attended = 2 ) or ( attended = 4 ) or ( received-medicine != 1 )[ set chance-of-dead ( chance-of-dead + chance-of-dead * daily-increase ) ; increase daily if not hospitalized or getting treatment ] set ticks-infected (ticks-infected + 1) ; increase count of ticks infected ] ; check for recovered or decesased agents ask persons with [ status = "infected" ][ if ticks-infected > time-infection [ ; check if time of infection has reached to end set dead-possibility random-float 1 ; calculate if agent will die or not, based on kapa value ifelse severity = 0 [ ; if severity is low, agent gets recovered set status "recovered" set pop-recovered (pop-recovered + 1) set p-mobility normal-speed set h-target nobody ][ if attended = 3 [ ; if agent was hospitilized, free the bed ask h-target [ set u-beds ( u-beds + 1 ) ] ] ifelse dead-possibility <= ( kapa * chance-of-dead ) [ ; agent dies if dead-posibility is between 0 an kapa, chance-of-dead increments posibility set status "deceased" set pop-deceased (pop-deceased + 1) ][ set status "recovered" set pop-recovered (pop-recovered + 1) set p-mobility normal-speed set h-target nobody ] ] set pop-infected (pop-infected - 1) update-status ] ] tick set seconds timer end ; update shape and color by condition of agent ; normal agent = gray circle not filled ; infected low severity = yellow circle filled ; infected mid severity looking hospital = red arrow filled ; infected mid severity attended = red circle filled ; infected mid severity not attended = red circle not filled ; infected hihg severity looking hospital = maroon arrow filled ; infected hihg severity attended = maroon circle filled ; infected hihg severity not attended = maroon circle not filled ; infected hihg severity hospitalized = maroon star ; infected hihg severity not hospitalized = maroon x ; recovered agent = green + ; deceased agent = blue x to update-status (ifelse status = "susceptible" [ set color gray + 2 set size 0.6 set shape "circle 3" ] status = "infected" [ (ifelse severity = 0 [ set size 0.6 set shape "circle 4" set color [255 145 0] ] severity = 1 [ set color [255 0 0] (ifelse attended = 0 [ set size 0.8 set shape "navigation" ] attended = 1 [ set size 0.6 set shape "circle 4" ] attended = 2 [ set size 0.6 set shape "circle 3" ] ) ] severity = 2 [ set color [155 15 15] (ifelse attended = 0 [ set size 0.8 set shape "navigation" ] attended = 1 [ set size 0.6 set shape "circle 4" ] attended = 2 [ set size 0.6 set shape "circle 3" ] attended = 3 [ set size 0.9 set shape "star" ] attended = 4 [ set size 0.8 set shape "x" ] ) ] ) ] status = "recovered" [ set color [21 176 26] set size 0.6 set shape "cross" ] status = "deceased" [ set color [0 0 255] set size 0.7 set shape "x" ] ) end ; function to place label to attach-banner [lbl lx ly] hatch-banners 1 [ set size 0 set label lbl setxy lx ly create-link-from myself [ tie hide-link ] ] end

There are 3 versions of this model.

## Attached files

File | Type | Description | Last updated | |
---|---|---|---|---|

Virus Spread with Hospital Capacities of Hospital Beds, Medics and Medicines.png | preview | Preview for 'Virus Spread with Hospital Capacities of Hospital Beds, Medics and Medicines' | about 1 month ago, by Alfredo Ramirez | Download |

This model does not have any ancestors.

This model does not have any descendants.