Net Logo
-
Upload
ana-maria-alionte -
Category
Documents
-
view
13 -
download
0
description
Transcript of Net Logo
Universitatea Tehnica "Gheorghe Asachi" Iasi
Facultatea de Automatica si Calculatoare
13
Raspandirea virusului gripal
intr-o comunitate Proiect NetLogo
Brucar Ana-Maria (SDTW 1B)
Alionte Ana-Maria (SDTW 1A)
2 | R a s p a n d i r e a g r i p e i i n t r - o c o m u n i t a t e
Cuprins
Descriere generala ....................................................................................................................................... 3
Utilizarea programului .................................................................................................................................. 3
Structura programului................................................................................................................................... 5
Contributii proprii ....................................................................................................................................... 12
Capturi ecran ............................................................................................................................................... 12
Concluzii ...................................................................................................................................................... 14
3 | R a s p a n d i r e a g r i p e i i n t r - o c o m u n i t a t e
Descriere generala
Necesitatea intelegerii ecosistemelor, a transmiterii unor virusuri in lumea reala a condus
la crearea unor modele matematice usor de inteles si urmarit chiar si de cei nespecializati in
domeniu.
Gripa este una dintre cele mai raspandite boli, care se manifesta in orice sezon,
predominant in sezonul rece, cu o perioada de incubatie relativ scurta, intre 1 si 3 zile. Sursa de
infectie este reprezentata de omul bolnav, cu forme inaparente sau grave. Gripa se transmite pe
cale aeriana, prin contact direct cu omul bolnav, iar receptivitatea este generala, cu atat mai mult
cu cat imunitatea este mai scazuta.
Proiectul in cauza isi propune sa studieze raspandirea acestei boli intr-o comunitate de
oameni, pe un esantion de maxim 200 de indivizi, plecand de la un numar mic de persoane
infectate (0.025% din numarul total al esantionului), cu un numar redus de medici (maxim 20 de
medici).
Numarul minim de indivizi ai populatiei studiate este de 50 de persoane, iar numarul
minim de medici este de 1 persoana.
Exista trei tipuri de persoane: indivizi sanatosi (reprezentati de culoarea verde), medicii
(reprezentati de culoarea albastra) si indivizi bolnavi/infectati (reprezentati de culoarea rosie).
20% din populatie se considera a fi vaccinata impotriva virusului care declanseaza gripa,
dar aceasta masura nu este 100% sigura, deci nu este exclus ca o parte din acestia sa se
imbolnaveasca.
La contactul cu o persoana bolnava, daca a fost vaccinat si imunitatea este scazuta, sau
daca nu a fost vaccinat, individul este infectat cu virusul care declanseaza gripa. La intalnirea cu
un medic, persoana infectata incepe un proces de vindecare, de crestere a imunitatii. Deoarece
virusul poate prezenta mutatii care duc la deces, acest lucru este reprezentat prin persoane care
nu se vindeca si ajung sa nu mai aiba imunitate, si implicit, vor muri.
Utilizarea programului
Programul este reprezentat de un fisier NetLogo, fluP.nlogo.
O data incarcat, va aparea o fereastra , cu 2 slidere, cu ajutorul carora se vor putea seta numarul
de indivizi ai esantionului studiat (denumit sugestiv initial-people) si numarul de medici
(denumit, de asemenea, sugestiv, doctors), pentru acelasi esantion. Pentru simplificare, se
considera ca o persoana bolnava nu poate fi medic, iar un medic nu se poate imbolnavi de gripa.
4 | R a s p a n d i r e a g r i p e i i n t r - o c o m u n i t a t e
Fig 1. Fereastra initiala NetLogo (indivizii de culoare rosie reprezinta numarul persoanelor
bolnave din esantion, indivizii de culoare albastra reprezinta doctorii, iar indivizii de culoare
verde reprezinta indivizii sanatosi)
De asemenea, programul mai dispune si de doua butoane, unul pentru initializare,
denumit setup, iar altul pentru executare, denumit go. Se considera ca avem epidemie de gripa
atunci cand numarul persoanelor infectate (%infected) depaseste 80%, moment in care
programul nu mai ruleaza.
Numarul total de indivizi ai populatiei este monitorizat pe tot parcursul rularii si updatat
in timp real. Acest lucru este vizibil, urmarind textul din monitorul People.
Dupa setarea datelor ( initial-people si doctors), se apasa butonul setup, si dupa,
go, pentru urmarirea evolutiei transmiterii virusului. Evolutia este reprezentata pentru usurinta, si
poate fi urmarita si sub forma de grafic, in plotul intitulat sugestiv Flu. Culoarea rosie a
graficului reprezinta numarul persoanelor infectate, iar culoarea albastra a graficului reprezinta
persoanele sanatoase.
5 | R a s p a n d i r e a g r i p e i i n t r - o c o m u n i t a t e
Structura programului
Programul este alcatuit din mai multe functii si din variabile globale.
Variabile globale
Sunt definite urmatoarele variabile globale :
epidemy - procentul de indivizi infectati de la care se considera ca gripa a
ajuns in stadiul de epidemie ;
doctorsNo - numarul de indivizi din populatie care sunt doctori (reprezentati
prin culoarea albastra) ;
displayNo - numarul total de indivizi ai populatiei;
Variabile specifice indivizilor (turtles-own)
Fiecare individ este caracterizat de un set de variabile, ce vor fi prezentate in cele ce
urmeaza :
imunity - imunitatea individului; un numar asignat random fiecarui individ
( turtle) cuprins in intervalul [1, 100];
vaccination? - variabila de tip boolean, cu urmatoarea semnificatie: true,
daca individul in cauza a fost vaccinat; false, altfel;
isSick? - variabila de tip boolean, setata cu valoarea true, daca
individul ( turtle) este bolnav; altfel, false;
hasSymptoms? - variabila de tip boolean, avand valoarea true, daca
individul prezinta simptomele specifice gripei, false, altfel. Se considera ca
virusul gripal are o perioada de incubatie de 3 zile, deci valoarea true va fi
setata doar daca au trecut 3 zile de la contactul cu o persoana bolnava
(nrDaysInfected >= 3) si variabila isSick are valoarea true;
nrDaysInfected - variabila in care se retine numarul de zile de cand o
persoana este infectata cu virusul gripal
HealingRate - rata de vindecare. Daca individul nu este bolnav, rata de
vindecare se considera a fi 0. Daca individul este bolnav, rata de vindecare se
considera a fi negativa. La intalnirea cu un individ doctor, rata de vindecare se
considera a fi pozitiva. Dupa ce este setata, se aduna la variabila imunity,
determinand astfel imunitatea individului.
6 | R a s p a n d i r e a g r i p e i i n t r - o c o m u n i t a t e
Functii specifice programului
Programul are doua functii principale, functia setup, a carei rol este initializarea datelor,
si functia go, a carei rol este rularea programului pana se intalneste conditia de oprire.
end
Functia setup, apelata la apasarea butonului setup
Corpul functiei setup este reprezentat de mai multe functii, ce vor fi prezentate in
continuare.
Functia setup-global, apelata in corpul functiei setup
Functia setup-global are rolul de a initializa variabilele globale, descrise mai sus (vezi
Variabile globale).
to setup ;;on pressing setup button, this function is called
clear-all ;; "clean" all data
setup-globals ;; function for defining global variables
setup-people ;; function for setup variables for turtles
update-plot ;; update plot
reset-ticks
end
to setup-globals
set epidemy 80 ;; you have a 80% chance of being infected
set diplayNo 0
end
to setup-people
crt initial-people
[ setxy random-xcor random-ycor
set shape "person"
set imunity random 100
set isSick? (who < initial-people * 0.025)
set vaccination? (who < initial-people * 0.2 + 10) ;;20%
7 | R a s p a n d i r e a g r i p e i i n t r - o c o m u n i t a t e
Corpul functiei setup-people, apelata in functia setup
Functia setup-people are rolul de a initializa populatia. Astfel, se creaza random un
numar prestabilit de indivizi ( numar cuprins intre [50, 200]), a caror forma este "person", cu o
valoare a imunitatii cuprinsa intre [0, 100], setata, de asemenea, random (set imunity random
100).
Dintre acestia, un numar de 0.025% din totalul esantionului se considera a fi indivizi
bolnavi ( isSick = true), cu o perioada de incubatie a virusului gripal (nrDaysInfected)
setata random, intre [1,3] zile, iar 20% dintre indivizi se considera a fi vaccinati. Dintre indivizii
neinfectati (bolnavi), se aleg un numar de doctors doctori, restul indivizilor considerandu-se a fi
indivizi sanatosi.
Tot in aceasta functie, se seteaza si culorile distinctive pentru tipurile de indivizi : rosu
pentru indivizii bolnavi, verde pentru cei sanatosi si albastru pentru doctori.
set hasSymptoms? false
set vizitaDoctor 0
ifelse isSick?
[ set nrDaysInfected random 3]
[ set nrDaysInfected 0 ]
if isSick?
[
set HealingRate -10
set HealingRate 0
]
ifelse (who > 40 and who <= doctors + 40 )
[ set color blue]
[ set color green ]
if isSick?
[set color red]
]
end
8 | R a s p a n d i r e a g r i p e i i n t r - o c o m u n i t a t e
Functia setup-people mai cuprinde si update-ul pentru grafic, in aceasta etapa el fiind
reinitializat.
Functia pentru updatarea graficului denumit sugestiv "Flu" (in grafic este reprezentat numarul
de oameni bolnavi - "Sick", in raport cu oamenii considerati sanatosi "Healthy")
In continuare, este prezentata functia go, functie apelata la apasarea butonului go, a carei
rol este de a simula raspandirea gripei intr-o comunitate.
Corpul functiei go
Se verifica daca s-a atins pragul de epidemie. Daca da, se opreste executarea
programului. Altfel, se continua. Indivizii (turtles) au o miscare aleatorie sus - jos, spre dreapta.
Corpul functiei, mai cuprinde, de asemenea, alte trei functii, ce vor fi prezentate in cele ce
to update-plot
set-current-plot "Flu"
set-current-plot-pen "Sick"
plot count turtles with [color = red ]
set-current-plot-pen "Healthy"
plot count turtles with [color = green ]
end
to go
if %infected > epidemy and diplayNo = 0
[ output-print "Epidemie la 80%"
set diplayNo 1 ]
ask turtles
[ forward random 5 - 3
right random 30
]
ask turtles [ getInfected ]
ask turtles [ healing ]
ask turtles [ dieTurtle ]
tick
end
9 | R a s p a n d i r e a g r i p e i i n t r - o c o m u n i t a t e
urmeaza. Acestea sunt denumite sugestiv getInfected, a carei rol este de a simula
imbolnavirea unui individ sanatos la intrarea in contact direct cu o persoana infectata, fie ca
aceasta prezinta simptomele gripei sau nu; healing, care simuleaza insanatosirea unei persoane
bolnave de gripa si dieTurtle, care simuleaza moartea unui individ care a suferit o mutatie a
virusului gripal.
Corpul functiei getInfected
to getInfected
let temp one-of (turtles-at -1 0) with [isSick?]
if temp != nobody and color = green [
if not vaccination? and not isSick?
[ set isSick? true
set color red
set nrDaysInfected 0
set hasSymptoms? false
set HealingRate -1
set imunity imunity - HealingRate ]
if isSick?
[ set imunity imunity - HealingRate
set nrDaysInfected nrDaysInfected + 1
if nrDaysInfected > 3
[ set hasSymptoms? true] ]
if vaccination? and not isSick?
[if imunity < 21
[ set isSick? true
set color red
set nrDaysInfected 0
set hasSymptoms? false
set HealingRate -5
set imunity imunity - HealingRate ] ] ]
end
10 | R a s p a n d i r e a g r i p e i i n t r - o c o m u n i t a t e
Am considerat pozitia -1 0 ca fiind vecinul din fata individului X, unde X este individul
actual. Daca vecinul este bolnav, iar individul actual este sanatos, dar nevaccinat, acesta sa
imbolnaveste automat. Daca individul este deja bolnav, atunci perioada de infectare creste si
imunitatea scade. Daca este vaccinat, dar imunitatea sa este scazuta ( s-a considerat ca imunitatea
este scazuta daca valoarea sa este sub 21), atunci acesta se imbolnaveste.
Corpul functiei getInfected
Daca vecinului individului curent este doctor ( culoarea sa este albastra), iar individul
curent este bolnav si manifesta simptome ( nrDaysInfected >= 3), atunci se considera ca acesta
primeste medicamente si incepe o imbunatatire a starii sale de sanatate. Daca valoarea imunitatii
este ridicata ( >70) si individul este bolnav, se considera ca sistemul sau imunitar este suficient
de puternic pentru a lupta impotriva gripei, si virusul este distrus. In concluzie, individul se
insanatoseste. In concluzie, un individ se poate insanatosi doar daca in prealabil a "vizitat" un
medic sau daca are sistemul imunitar suficient de puternic pentru a distruge virusul.
to healing
let doctor one-of (turtles-at -1 0) with [color = green]
if doctor != nobody and hasSymptoms?
[
set HealingRate 5
set imunity imunity + HealingRate
set nrDaysInfected nrDaysInfected + 1
set vizitaDoctor vizitaDoctor + 1
]
if imunity > 70 and isSick? and vizitaDoctor > 0
[
set HealingRate 0
set isSick? false
set nrDaysInfected 0
set hasSymptoms? false
set color green
]
end
11 | R a s p a n d i r e a g r i p e i i n t r - o c o m u n i t a t e
Corpul functiei dieTurtle
Daca individul curent are imunitatea foarte scazuta ( valoarea sa este mai mica sau egala
cu 10) si este bolnav, se considera ca virusul a suferit o mutatie, prin urmare, individul (turtle)
moare.
In afara de functiile prezentate mai sus, mai exista doua functii pentru monitorizare/
raportarea numarului de persoane infectate (%infected) si a numarului total de persoane
(noPersons).
Corpurile functiilor de raportare ( %infected si noPersons)
to dieTurtle
if imunity <= 10 and isSick? [ die ]
end set nrDaysInfected 0
set hasSymptoms? false
set color green
]
end
to-report %infected
ifelse any? turtles
[ report (count turtles with [isSick? = true] / count turtles) * 100
]
[ report 0 ]
end
to-report noPeople
report count turtles
end
12 | R a s p a n d i r e a g r i p e i i n t r - o c o m u n i t a t e
Contributii proprii
Proiectul nu a fost modificat, a fost conceput de la 0, bazandu-ne pe experienta din viata
reala, incercand sa implementam totusi un model simplist si relativ usor de urmarit.
Datele problemei ( numarul de persoane infectate, modul de vindecare, numarul de
doctori, numarul zilelor de incubatie a virusului inainte de aparitia simptomelor, mutatiile) au
fost stabilite urmarind evolutia gripei din viata de zi cu zi. Nu s-a luat in calcul anotimpul sau
ideea de spatii inchise, indivizii ( turtles) avand posibilitatea de a se misca independent de aceste
variabile, intr-o raza prestabilita ( in sus-jos). Am ales ca numarul doctorilor sa fie fix de la bun
inceput deoarece se presupune ca un spital are un numar fix de angajati, acesta nu creste sau
scade in acelasi timp cu numarul bolnavilor.
Totusi, ideea proiectului s-a bazat pe exemplul cu SIDA, din libraria NetLogo.
Capturi ecran
Fig 2. Captura ecran pentru un esantion de 200 de indivizi
13 | R a s p a n d i r e a g r i p e i i n t r - o c o m u n i t a t e
In fig. 2, urmarind graficul, se observa cum numarul de persoane sanatoase scade
considerabil in raport cu numarul de persoane bolnave, care creste foarte rapid, ca apoi, raportul
sa se stabilizeze. inainte ca imbolnavirea rapida a populatiei sa fie considerata epidemie (
valoarea prestabilita a unei epidemii fiind de 80%). In acest caz, numarul persoanelor decedate
este de 13.
Fig 3. Captura pentru un esantion de 93 de persoane, cu un numar de 20 de medici
Analizand graficul si comparand cu anteriorul (fig. 2), se observa cum rata imbolnavirilor
este mai scazuta (aproximativ 52% fata de aproximativ 74%), iar gripa se raspandeste mai greu.
De asemenea, si numarul de persoane decedate a scazut cu 0.5%, spre deosebire de cazul
anterior.
Dupa cum se observa si din cele doua capturi, pentru aceeasi perioada, riscul
imbolnavirilor scade, daca cei deja bolnavi se trateaza ( "viziteaza" un medic, in cazul de fata).
14 | R a s p a n d i r e a g r i p e i i n t r - o c o m u n i t a t e
Fig. 4. Captura pentru un esantion de 69 de persoane, cu un numar mare de medici (20)
Pentru o populatie care are un medic cam la 3.5 persoane, procentajul persoanelor
infectate este relativ scazut, numarul deceselor fiind foarte mic ( 1 singura persoana decedata).
Concluzii
Daca persoanele bolnave de gripa, in cazul de fata, se trateaza, riscul aparitiei unei
epidemii este din ce in ce mai scazut, rata mortalitatii se apropie de 0, iar riscul de imprastiere a
virusului este din ce in mai mic.
Modelul de fata ajuta la analiza transmiterii unui virus banal, dar foarte des intalnit si la
intelegerea modului in care acesta se imprastie, daca nu este tratat ca atare.