ABM_HPV
Model was written in NetLogo 6.0
•
Viewed 413 times
•
Downloaded 29 times
•
Run 0 times
Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)
WHAT IS IT?
HOW IT WORKS
HOW TO USE IT
THINGS TO NOTICE
THINGS TO TRY
EXTENDING THE MODEL
NETLOGO FEATURES
CREDITS AND REFERENCES
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:
- Wilensky, U. (1997). NetLogo AIDS model. http://ccl.northwestern.edu/netlogo/models/AIDS. Center for Connected Learning and Computer-Based Modeling, Northwestern University, Evanston, IL.
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
Comments and Questions
Please start the discussion about this model!
(You'll first need to log in.)
Click to Run Model
extensions [nw] ;extensions [r] globals [ infection-chance ;; The chance out of 100 that an infected person will pass on ;; infection during one week of couplehood. symptoms-show ;; How long a person will be infected before symptoms occur ;; which may cause the person to get tested. slider-check-1 ;; Temporary variables for slider values, so that if sliders slider-check-2 ;; are changed on the fly, the model will notice and ; slider-check-3 ;; change people's tendencies appropriately. slider-check-4 initial-people vaccine-rate vaccine-type recruitment-rate natural-death-rate cc-death-rate time ;; time in weeks year infected population n num ] breed [women woman] breed [men man] turtles-own [ infected? ;; If true, the person is infected. It may be known or unknown. known? ;; If true, the infection is known (and infected? must also be true). sane? vaccinated? cancer? virus-type ;; Stands for virus type 1,2,3 or 4 depending on what family pf hpv does it goes alpha 11 , 7, 6, 5 respectively infection-length ;; How long the person has been infected. coupled? ;; If true, the person is in a sexually active couple. couple-length ;; How long the person has been in a couple. ;; the next four values are controlled by sliders commitment ;; How long the person will stay in a couple-relationship. coupling-tendency ;; How likely the person is to join a couple. test-frequency ;; Number of times a person will get tested per year. partner ;; The person that is our current partner in a couple. promiscuity ;; It measures roughly in a scale of 0 to 1, meaning 0 is monogamous and 1 poligamous (completely promiscuous) coupling-efectivity ;;Based on the principle that "el que liga más, liga más" age stage vaccine-lenght ] ;;; ;;; SETUP PROCEDURES ;;; to setup clear-all setup-globals setup-people reset-ticks end to setup-globals set infection-chance 80 ;;hay que revisar la probabilidad de infección en la literatura set symptoms-show 200.0 ;; lo mismo para el tiempo de infeccion set slider-check-1 average-commitment set slider-check-2 average-coupling-tendency set slider-check-4 average-test-frequency set vaccine-rate vr set vaccine-type vaccine set time 0 set recruitment-rate 0.75 set natural-death-rate 0.524 set cc-death-rate 0.0012 set year 0 set population (initial-men + initial-women) end to setup-people set initial-people initial-women + initial-men create-women initial-women ask women [ifelse version ="people"[set shape "person righty"][set shape "triangle"]] create-men initial-men ask men [ifelse version ="people"[set shape "person lefty" ][set shape "circle"]] ask turtles [set vaccinated? false set infected? false set sane? true set cancer? false] ask n-of (floor(initial-women * vaccine-rate)) women [set vaccinated? true] ask n-of (floor((count turtles with [vaccinated? = false]) * random-float 1)) turtles with [vaccinated? = false][set infected? true] ask turtles[ setxy random-xcor random-ycor set known? false set coupled? false set partner nobody set promiscuity random-float 1 set coupling-efectivity random-float 1 set age 13 + random 47 if vaccinated? = true [set vaccine-lenght random 5] if infected? = true [ set virus-type random 4 set infection-length random-float symptoms-show ] assign-commitment assign-coupling-tendency assign-test-frequency] ask women [assign-woman-color] ask men [assign-man-color if vaccine-type = "vac3"[ask n-of (initial-men * vaccine-rate) men [set vaccinated? true ]]] end ;; Different people are displayed in 4 different colors depending on health ;; green is not infected ;; blue is infected but doesn't know it ;; red is infected and knows it ;; grey is vaccinated to assign-man-color ;; turtle procedure ask men [ifelse infected? = true [ifelse known? = true[ set color red + 2 ][set color blue + 2]][ set color green + 2]] ; ask men [ifelse infected? = true and Known? = true[ set color red + 0.2 ][set color green + 0.2]] ; ask men[if infected? = true and known? = false [ set color blue + 0.2] ] end to assign-woman-color ;; turtle procedure ask women [ifelse infected? = true [ifelse known? = true[ set color red - 2 ][set color blue - 2]][ set color green - 2]] ; ask women [if sane? = true ] ;; ask women[ if infected? = true and known? = false ] end to getSick if infected? = true [set stage 1] if infection-length > 50 and random 12 < 6 [set stage 2] if infection-length > 150 and random 12 = 11[set stage 3] if stage = 3 and random 12 < 11 [set cancer? true] if cancer? = true and random 12 = 11[die set pcolor black] end ;; The following four procedures assign core turtle variables. They use ;; the helper procedure RANDOM-NEAR so that the turtle variables have an ;; approximately "normal" distribution around the average values set by ;; the sliders. to assign-commitment ;; turtle procedure set commitment random-near average-commitment end to assign-coupling-tendency ;; turtle procedure set coupling-tendency random-near average-coupling-tendency end ;to assign-condom-use ;; turtle procedure ; set condom-use random-near average-condom-use ;end to assign-test-frequency ;; turtle procedure set test-frequency random-near average-test-frequency end to-report random-near [center] ;; turtle procedure let result 0 repeat 40 [ set result (result + random-float center) ] report result / 20 end ;; Recruitment hay que cambiar como se hace el reclutamiento,debe asignarse a estas tortugas las variables to new-year if time = 52 [cp set time 0 set year year + 1 ask n-of (floor(natural-death-rate * population)) turtles [die set pcolor black] create-women 0.51 * initial-people * recruitment-rate create-men 0.49 * initial-people * recruitment-rate ask women with [xcor = 0 and ycor = 0 ][ifelse version ="people"[set shape "person righty"][set shape "triangle"]] ask men with [xcor = 0 and ycor = 0 ][ifelse version ="people"[set shape "person lefty"][set shape "circle"]] ask turtles with [xcor = 0 and ycor = 0 ][set vaccinated? false set infected? false set sane? true set cancer? false] ask n-of (floor((count women with [xcor = 0 and ycor = 0]) * vaccine-rate)) women with [xcor = 0 and ycor = 0 ] [set vaccinated? true] ; ask n-of (floor(initial-women * vaccine-rate)) women [set vaccinated? true] ask n-of (floor((count turtles with [xcor = 0 and ycor = 0 and vaccinated? = false]) * random-float 1)) turtles with [xcor = 0 and ycor = 0 and vaccinated? = false][set infected? true] ask turtles with [xcor = 0 and ycor = 0 ][ setxy random-xcor random-ycor set known? false set coupled? false set partner nobody set promiscuity random-float 1 set coupling-efectivity random-float 1 set age 13 + random 47 if vaccinated? = true [set vaccine-lenght random 5] if infected? = true [ set virus-type random 4 set infection-length random-float symptoms-show ] assign-commitment assign-coupling-tendency ; assign-condom-use assign-test-frequency] ask women [assign-woman-color] ask men [assign-man-color if vaccine-type = "vac3"[ask n-of (initial-men * vaccine-rate) men [set vaccinated? true ]]]] end ;;; ;;; GO PROCEDURES ;;; to go if all? turtles [known? = true] [ stop ] check-sliders ask patches[if turtles-here = 0 [set pcolor black]] ask turtles [ if infected? = true [ set infection-length infection-length + 1 ] if coupled? = true [ set couple-length couple-length + 1 ] ] ask turtles [ if coupled? = false [ move ] ] ;; Righties are always the ones to initiate mating. This is purely ;; arbitrary choice which makes the coding easier. ask women [ if coupled? = false and (random-float 10.0 < coupling-tendency) [ couple ] ] ask turtles [ uncouple ] ask turtles [ infect ] ask turtles [ test ] ask turtles [getSick] ask men [ assign-man-color ] ask women [ assign-woman-color ] ;file-open "red_contactos.txt" nw:set-context turtles links ;ask women [ file-write map sort nw:get-context ] tick set time time + 1 new-year ask turtles [set age age + year] set population (count turtles) ask turtles with [coupled? = true][if partner = nobody[set coupled? false]] set n random 100 set num (word n) if time = 50 [nw:save-matrix (word "matriz" num ".txt")] end ;; Each tick a check is made to see if sliders have been changed. ;; If one has been, the corresponding turtle variable is adjusted to check-sliders if (slider-check-1 != average-commitment) [ ask turtles [ assign-commitment ] set slider-check-1 average-commitment ] if (slider-check-2 != average-coupling-tendency) [ ask turtles [ assign-coupling-tendency ] set slider-check-2 average-coupling-tendency ] if (slider-check-4 != average-test-frequency ) [ ask turtles [ assign-test-frequency ] set slider-check-4 average-test-frequency ] end ;; People move about at random. to move ;; turtle procedure ifelse version = "people" [rt random-float 360 fd 1] [fd 1] end ;; People have a chance to couple depending on their tendency to have sex and ;; if they meet. To better show that coupling has occurred, the patches below ;; the couple turn gray. to couple ;; turtle procedure -- righties only! let potential-partner one-of (men-at -1 0) with [coupled? = false] if potential-partner != nobody [ if random-float 10.0 < [coupling-tendency] of potential-partner and coupling-efectivity > 0.6 [ set partner potential-partner if relacion = true [create-link-with partner] set coupled? true ask partner [ set coupled? true ] ask partner [ set partner myself ] move-to patch-here ;; move to center of patch ask potential-partner [move-to patch-here] ;; partner moves to center of patch set pcolor gray - 3 ask (patch-at -1 0) [ set pcolor gray - 3 ] ] ] if turtles-here = nobody [set pcolor black] end ;; If two peoples are together for longer than either person's commitment variable ;; allows, the couple breaks up. to uncouple ;; turtle procedure ask women [if coupled? = true [ if (couple-length > commitment) or ([couple-length] of partner) > ([commitment] of partner) or promiscuity > 0.7 [ set coupled? false set couple-length 0 ask partner [ set couple-length 0 ] set pcolor black ask (patch-at -1 0) [ set pcolor black ] ask partner [ set partner nobody ] ask partner [ set coupled? false ] set partner nobody ] ]] end ;; Infection can occur if either person is infected, but the infection is unknown. ;; This model assumes that people with known infections will continue to couple, ;; but will automatically practice safe sex, regardless of their condom-use tendency. ;; Note also that for condom use to occur, both people must want to use one. If ;; either person chooses not to use a condom, infection is possible. Changing the ;; primitive to AND in the third line will make it such that if either person ;; wants to use a condom, infection will not occur. to infect ;; turtle procedure if coupled? = true and infected? = true and known? = false and vaccinated? = false [ if random-float 100 < infection-chance [ ask partner [ set infected? true ] ] ] ;] if vaccine-type = "vac1"[ if coupled? = true and infected? = true and known? = false and [vaccinated?] of partner = true and [vaccine-lenght] of partner < 2 and virus-type > 2 [ if random-float 100 < infection-chance [ ask partner [ set infected? true ] ] ] ] if vaccine-type = "vac2"[ if coupled? = true and infected? = true and known? = false and [vaccinated?] of partner = true and [vaccine-lenght] of partner < 2 and virus-type = 3 [ if random-float 100 < infection-chance [ ask partner [set infected? true ] ] ] ];] end ;; People have a tendency to check out their health status based on a slider value. ;; This tendency is checked against a random number in this procedure. However, after being infected for ;; some amount of time called SYMPTOMS-SHOW, there is a 5% chance that the person will ;; become ill and go to a doctor and be tested even without the tendency to check. to test ;; turtle procedure if random-float 52 < test-frequency [ if infected? = true [ set known? true ] ] if infection-length > symptoms-show [ if random-float 100 < 5 [ set known? true ] ] end ;;; ;;; MONITOR PROCEDURES ;;; to-report %infected ifelse any? turtles [ report (count turtles with [infected? = true] / count turtles) * 100 ] [ report 0 ] end to-report %vaccinated ifelse any? women [ report (count women with [vaccinated? = true] / count women) * 100 ] [ report 0 ] end to-report global-clustering-coefficient let closed-triplets sum [ nw:clustering-coefficient * count my-links * (count my-links - 1) ] of turtles let triplets sum [ count my-links * (count my-links - 1) ] of turtles report closed-triplets / triplets end
There is only one version of this model, created over 7 years ago by Augusto Cabrera-Becerril.
Attached files
File | Type | Description | Last updated | |
---|---|---|---|---|
ABM_HPV.png | preview | Preview for 'ABM_HPV' | over 7 years ago, by Augusto Cabrera-Becerril | Download |
This model does not have any ancestors.
This model does not have any descendants.