Getting Down On Dengue: Agent Based
Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)
WHAT IS IT?
This is an agent-based model of the spread of a single strain of Dengue Fever in Cuba.
HOW IT WORKS
The model is comprised of two layers: GIS/Water layer and Agent layer. In the GIS/Water layer, monthly rainfall/evaporation data alongside GIS data for elevation and surface water are used to model the collection of standing water in Cuba. In the Agent layer, the mosquito population breeds around the standing water according to reproductive rules and infects the human population which is obtained from GIS population density data.
HOW TO USE IT
Simply press setup and go to run the model. One tick represents a day with month and year recorded in their respective monitors. The graph labeled "water" monitors the total amount of standing water in cubic meters. The graph labeled "humans" monitors the human population with infected and recovered. The graph labeled "mosquito" monitors the mosquito population with infected. The monitor labeled "max" displays the maximum number of infected humans in the run and the monitor labeled "tick" displays the tick at which the peak infection occured.
THINGS TO NOTICE
Notice that the rainfall graph fits the trend which you would expect, with a rainier monsoon season on the summer and a drier season in the winter. Notice that the infection spreads throughout the human population quite rapidly. Notice that the mosquito population tends to die out within the first two months due to a lack of standing water.
THINGS TO TRY
Experiment with the following sliders: Immunized - Initial percentage of humans that are vaccinated Initial-Infected-Rate - Initial percentage of mosquitoes that are infected Source-Reduction - Probability that a human will remove the water from their patch M-Velocity - Distance (in patches) which a mosquito moves each tick Biting-Rate - Probability that a hungry mosquito will succesfully bite a nearby human Infection-Rate - Probability that a mosquito will infect a nearby human and vice versa Human-Mobility - Radius of human mobility (as a percentage of world size) Mobility-Per-Tick - Percentage of humans that are mobile
Comments and Questions
extensions [ gis sound ] globals [ surfacewater elevation slope aspect population ; gis datasets rainfall ; monthly rainfall amount in mm storms ; number of storms each month land ; patchset with elevation > 5 year month evaporation max-infected max-tick ] breed [mosquito mosquitoes ] breed [human humans] breed [water waters] human-own [closest-human] water-own [closest-water] turtles-own [ infected? hungry? age fertility state duration recovered? immune?] ;This is an agent-based model of the spread of a single strain of Dengue Fever in Cuba. ;The model is comprised of two layers: GIS/Water layer and Agent layer. ;In the GIS/Water layer, monthly rainfall/evaporation data alongside GIS data for elevation and surface water are used to model the collection of standing water in Cuba. ;In the Agent layer, the mosquito population breeds around the standing water according to reproductive rules and infects the human population which is obtained from GIS population density data. ; UNITS ; land area for Cuba: 109,884 km² land above sea-level = 11,951 patches ; 1 patch = 9 square kilometers ; evaporation = 3.53965 mm/day (source: "Tropical Forest Ecology : A View from Barro Colorado Island" http://bit.ly/1lbez17) to setup clear-all cd set population gis:load-dataset "gis/cubds00ag.asc" set surfacewater gis:load-dataset "gis/CUB_water_areas_dcw.shp" gis:set-drawing-color blue gis:fill surfacewater 1 gis:set-world-envelope gis:envelope-of population if elevation = 0 [ set elevation gis:load-dataset "gis/cuba_lores.asc" set land patches with [gis:raster-sample elevation self > 5 ] ; use sobel convolution filter to calculate delta-x and delta-y let horizontal-gradient gis:convolve elevation 3 3 [ 1 1 1 0 0 0 -1 -1 -1 ] 1 1 let vertical-gradient gis:convolve elevation 3 3 [ 1 0 -1 1 0 -1 1 0 -1 ] 1 1 set slope gis:create-raster gis:width-of elevation gis:height-of elevation gis:envelope-of elevation set aspect gis:create-raster gis:width-of elevation gis:height-of elevation gis:envelope-of elevation ; calculate slope and aspect (from Netlogo GIS Gradient example) let x 0 repeat (gis:width-of slope) [ let y 0 repeat (gis:height-of slope) [ let gx gis:raster-value horizontal-gradient x y let gy gis:raster-value vertical-gradient x y if ((gx <= 0) or (gx >= 0)) and ((gy <= 0) or (gy >= 0)) [ let s sqrt ((gx * gx) + (gy * gy)) gis:set-raster-value slope x y s ifelse (gx != 0) or (gy != 0) [ gis:set-raster-value aspect x y atan gy gx ] [ gis:set-raster-value aspect x y 0 ] ] set y y + 1 ] set x x + 1 ] gis:set-sampling-method aspect "bilinear" gis:paint elevation 100 ] ask turtles [ set evaporation 129] set rainfall 266 set storms 3 set year 0 set month "jan" ask patches [ let value gis:raster-sample population self if (value <= 0 or value >= 0) [ set pcolor scale-color red gis:raster-sample population self 0 400 ] ] ask patches gis:intersecting surfacewater [ sprout 1 [ set color blue set breed water ]] ask patches gis:intersecting surfacewater [ sprout 4 [ set breed mosquito set age random 30 ifelse random 100 < initial-infected-rate [ set infected? true] [set infected? false ] set fertility random 3 ]] ask patches with [gis:raster-sample elevation self > 25 ] [if random (30000) = 1 [ sprout ( .6 * (rainfall)) [set color blue set breed water ]]] ask mosquito [ if gis:raster-sample elevation patch-here < 10 [die]] ask patches with [gis:raster-sample elevation self < 5 ] [ set pcolor white ] human-spawn set m-velocity .00141455 set infection-rate 75 set biting-rate 83 set max-infected 0 set max-tick 0 reset-ticks end to go tick if count human with [ infected? = true ] > max-infected [ set max-infected count human with [ infected? = true ] set max-tick ticks] ; Have water face downslope and move forward (from Netlogo GIS Gradient example) ask water [ forward .1 let h gis:raster-sample aspect self ifelse h >= -360 [ set heading subtract-headings h 180 ] [ die ] ] ask mosquito [ if hungry? = false [ face min-one-of water [distance myself]]] ask mosquito [ if hungry? = true [ face min-one-of human [distance myself]]] ask mosquito [ forward m-velocity ] ; handle monthly rainfall and evaporation if ticks = 31 [ set rainfall 238 set month "feb" set evaporation 144 ] if ticks = 59 [ set rainfall 178 set month "mar" set evaporation 195 ] if ticks = 90 [ set rainfall 153 set storms 4 set month "apr" set evaporation 209 ] if ticks = 120 [ set rainfall 534 set storms 6 set month "may" set evaporation 179 ] if ticks = 151 [ set rainfall 854 set storms 9 set month "jun" set evaporation 183 ] if ticks = 181 [ set rainfall 518 set storms 8 set month "jul" set evaporation 188 ] if ticks = 212 [ set rainfall 770 set month "aug" set evaporation 189 ] if ticks = 243 [ set rainfall 541 set storms 7 set month "sep" set evaporation 155 ] if ticks = 273 [ set rainfall 386 set storms 6 set month "oct" set evaporation 142 ] if ticks = 304 [ set rainfall 124 set storms 4 set month "nov" set evaporation 117 ] if ticks = 334 [ set rainfall 245 set month "dec" set evaporation 110 ] if ticks = 365 [ reset-ticks set rainfall 266 set evaporation 129 set storms 3 set month "jan" set year year + 1] rain human-life infect move-humans source-reduce end to rain evaporate ask patches with [gis:raster-sample elevation self > 25 ] [ if random (30000) = 1 [ sprout ( .6 * (rainfall)) [set color blue set breed water ;sound:play-note "Rain" 60 rainfall / 10 2 ;sound:play-sound "rain.wav" ] ] ] ] mosquito-spawn end to evaporate if count water > (evaporation / 30) [ask n-of (evaporation / 30) water [die]] ask water [ if gis:raster-sample elevation patch-here < 10 [die]] end to mosquito-spawn ask mosquito [set age age + 1 ] ask patches [ if count mosquito-here > 0 and count human-here > 0 and random 100 < biting-rate [ ask mosquito-here [set hungry? false set fertility fertility + 1 ]]] ; hatch four mosquitoes around water and after eating ask patches [if count water-here > 0 and count mosquito-here > 0 [ ask mosquito-here [ if age > 12 and hungry? = false and fertility < 6 [ hatch 4 [ set breed mosquito set hungry? true set infected? false set age 0 set fertility 0] ] ] ] ] ask mosquito [ if age > 37 [die]] ask mosquito [ if gis:raster-sample elevation patch-here < 10 [die]] end to human-life ask human [set age age + 1 ] if random 1000 < 11 [ crt 1 [ set breed human set age 0 set color red set duration 0 set recovered? false ifelse random 100 < immunized [ set immune? true ] [set immune? false ] ]] if random 1000 < 8 [ ask n-of 1 human [ die]] ask human [ if age > 25000 [die]] end to human-spawn ; generate population based on population density map ask land [ sprout ((gis:raster-sample population self ) / 100) [ set color red set breed human set age random 20000 set infected? false set duration 0 set recovered? false ifelse random 100 < immunized [ set immune? true ] [set immune? false ] ] ] end to infect ask patches [ if count mosquito-here > 0 and count human-here > 0 and random 100 < infection-rate [ask human-here [if infected? = true [ ask mosquito-here [set infected? true ]]]]] ask patches [ if count mosquito-here > 0 and count human-here > 0 and random 100 < infection-rate [ask mosquito-here [if infected? = true [ ask human-here [if immune? = false [ set infected? true ]]]]]] ask human [ if infected? = true [ set duration duration + 1 if duration > 15 [ ifelse random 100 < 95 [set infected? false set duration 0 set recovered? true set immune? true ] [die] ]]] end to source-reduce ask patches [ if count water-here > 0 and count human-here > 0 and random 100 < source-reduction [ask water-here [die] ]] ;sound:play-drum "Hand Clap" 10 end to move-humans if human-mobility > 0 [ let mRadius human-mobility * world-width ask links [die] ask n-of (mobility-per-tick / 100 * count human) human [ let swap-partner one-of other human in-radius mRadius if swap-partner != nobody [ create-link-with swap-partner let mX xcor let mY ycor setxy [xcor] of swap-partner [ycor] of swap-partner ask swap-partner [setxy mX mY] ] ] ] end
There is only one version of this model, created over 10 years ago by Mohit Dubey.
Attached files
File | Type | Description | Last updated | |
---|---|---|---|---|
Getting Down On Dengue: Agent Based.png | preview | Preview for 'Getting Down On Dengue: Agent Based' | over 10 years ago, by Mohit Dubey | Download |
This model does not have any ancestors.
This model does not have any descendants.
Fernando Mirabelli
gis/cubds00ag.asc not found (Question)
cannot run the model due to this error "gis/cubds00ag.asc not found"
Posted over 9 years ago