środa, 25 marca 2020

Implementacja komórkowa modelu SIR

 Zaczniemy od NAJPROSTSZEJ WERSJI MODELU gdzie CHOROBA JEST BARDZO KRÓTKA i BARDZO MAŁO ZARAŹLIWA. Formalnie będzie to dwuwymiarowy, probabilistyczny (kroki MC) automat komórkowy z regułą SIR.

Setup odpowiada za zasiewanie tablicy z zadaną gęstością początkową zdrowymi komórkami, oraz jedną pojedynczą komórką zarażoną na środku.

Procedura draw() odpowiada za wizualizacje, i za zmianę stanu modelu. Zaczynamy od wizualizacji bo jest ona po prostu odziedziczona po poprzednich automatach komórkowych.

...

Ciąg dalszy w postaci PDF bo kopiowanie z Google docs na Google blogera okazuje się całkiem nie działać :-D 

sobota, 21 marca 2020

Udostępnienie pierwszych rozdziałów książki o processingu na okoliczność epidemii koronawirusa

Zdecydowałem się udostępnić on line pierwszą część przygotowywanego skryptu (plik PDF), wraz z wcześniej już dostępnymi przykładami.
Jest to materiał przeznaczony dla osób, które jeszcze nigdy nie miały styczności z Processingiem, a może nawet nigdy jeszcze nie programowały.

Tak się śmiesznie złożyło, że to akurat 50 post na tym blogu 😋







Materiały dostępne są pod tym adresem:
https://github.com/borkowsk/sym4processing/tree/master/SimpleEdu

Skok do początku bloga! 

Skąd wziąć Processing?

piątek, 20 marca 2020

SIR - Podstawowy model epidemii

Nazwa tego modelu to skrót od trzech stanów osoby zarażonej. S oznacza “susceptible” czyli „podatny”, I to “infected” czyli „zainfekowany/chory”, wreszcie R to “recovered” czyli “wyleczony” (i chwilowo odporny). Tą odporność możemy uznać za trwałą lub nietrwałą, przy czym z biologicznego punktu widzenia może to oznaczać dwie rzeczy:
  1.     Zanik “pamięci immunologicznej” dla danego drobnoustroju, co raczej zdarza się w normalnych warunkach rzadko (choć niektóre “czynniki zakaźne” wymagają kilku kolejnych szczepień, żeby odporność była trwała)
  2.     Mutacje drobnoustroju, powodującą że jego nowe szczepy uciekają przed odpornością nabytą już przez żywicieli. To znacznie częstszy przypadek, gdyż ewolucja bakterii, a zwłaszcza wirusów przebiega o kilka rzędów wielkości szybciej niż ewolucja człowieka.
Dla naszego prostego modelu mechanizm tego zaniku nie będzie jednak istotny. Bardzo ważne będą natomiast prawdopodobieństwa zarażenia (Infection), sposób wychodzenia zarażonych z populacji (wyzdrowienie, śmierć), i prawdopodobieństwo lub czas utraty odporności - o ile będziemy chcieli się tym zająć.
Ponieważ stany SIR możemy zakodować jako liczby całkowite, nasz model może być wykonany w konwencji probabilistycznego automatu komórkowego. Poniżej przedstawiłem bardzo ogólny algorytm. Występuje tam słowo “sieć”, ale nie przejmujcie się tym. Automat komórkowy to też rodzaj sieci - bardzo regularnej.
Zwróćcie uwagę że jeśli zamiast automatu synchronicznego użyjecie wersji Monte Carlo to krok uaktualnienia stanów automatu nie będzie poza wewnętrzną pętlą, tylko uaktualnienie będzie zachodzić po prostu w trakcie wykonywania pętli po losowych agentach. Pytanie też kiedy kończymy. Można do tego użyć jakiejś statystyki - np. Liczby chorych. Ale w Processingu możemy też kończyć po prostu gdy uznamy że już nic ciekawego się nie dzieje.
Macie wybór, jeśli chodzi o sposób uaktualniania modelu. Sugeruję jednak, żeby komórki wybierać metodą Monte Carlo. To bardziej realistyczne. Istoty żywe rzadko działają synchronicznie, a jeśli to robią, to dużym nakładem sił, używając odpowiednich mechanizmów synchronizacyjnych.
Liczba interakcji z sąsiadami komórki automatu może być różna - to dobry parametr modelu. Interakcja polega na „przekazaniu wirusa”, co jest możliwe tylko między aktualnie chorym, a aktualnie zdrowym osobnikiem. Reszta interakcji z punktu widzenia modelu jest „bezpłodna”.
Początkowy przyjmiemy dla ułatwienia że choroba trwa około jeden dzień, czyli do następnego wylosowania agenta.
Musimy mieć jednak “z tyłu głowy”, że czas trwania infekcji może być bardzo różny, więc powinniśmy mieć możliwość odliczania upływu czasu od początku infekcji agenta.
Upływ czasu może polegać na zmianie stanu komórki na liczbę dni od początku choroby i wreszcie zmianie stanu komórki chorej na stan odporności, po upływie zadanej liczby dni. To zgodnie z zasadą, że “katar leczony trwa siedem dni, a nie leczony tydzień”.
Alternatywnie możemy też przyjąć, nieco nierealistycznie, że w każdym dniu choroby mamy pewne prawdopodobieństwo wyleczenia (albo śmierci!) i wtedy czas trwania choroby będzie zmienny.

Teraz pomyślcie sami…
Może uda wam się zaimplementować model, zanim opublikuje moje rozwiązanie.

CDN




czwartek, 19 marca 2020

Wstęp do modelu epidemii


“W języku potocznym termin epidemia używany jest jako synonim masowych zachorowań wywołanych chorobami zakaźnymi. Często definiuje się ją jako wystąpienie na danym obszarze zakażeń lub zachorowań na chorobę zakaźną w liczbie wyraźnie większej niż we wcześniejszym okresie albo wystąpienie zakażeń lub chorób zakaźnych dotychczas niewystępujących. Przypadki globalnych epidemii nazywa się pandemią.”
Oto kilka przykłady najważniejszych chorób epidemicznych (i pandemicznych):

  • grypy
    • grypa hiszpanka (1918-1919) – ponad 50 mln ofiar śmiertelnych na całym świecie
    • grypa azjatycka (1957) – ok. 1 mln ofiar śmiertelnych na całym świecie
    • grypa Hong-Kong (1968) – ok. 1 mln ofiar śmiertelnych na całym świecie
    • Pandemia grypy A/H1N1 (od 11 czerwca 2009) - ok. 12799 ofiar na całym świecie
  • AIDS – masowe zachorowania; zwłaszcza na kontynencie afrykańskim (wszystko od początku rozdziału do tego miejsca zaczerpnięte z tekstu “Modele epidemii“ ). Epidemia ta jest o tyle nietypowa, że wirus HIV bezpośrednio atakuje komórki układu odporności człowieka, upośledzające jego odpowiedź immunologiczną, a co więcej jest tzw. “retrowirusem”, co oznacza, że kopia jego kodu genetycznego jest włączana do DNA komórki, więc wirus ginie tylko wraz z zakażoną komórką, a jego produkcja może być tak niewielka, że zakażone komórki są dla układu immunologicznego nieodróżnialne od zdrowych.
  • Koronawirusy - SARS, MERS, SARS-2 czyli COVID-19
  • Stare choroby epidemiczne dorosłych, w większości zwalczone już higieną, szczepionkami i/lub antybiotykami: dżuma, czarna ospa (ostatni raz w Polsce w 1963 we Wrocławiu), cholera, kiła, gruźlica i trąd 
  • Opanowane choroby epidemiczne dzieci: polio, płonica (szkarlatyna), błonica (krup), krztusiec (koklusz), oraz jeszcze nie opanowane, mimo istnienia szczepionki: odra, świnka i różyczka.
  • Ospa wietrzna - jedna z bardziej zaraźliwych chorób wirusowych, ale na szczęście nie obarczona śmiertelnością. Chorują zarówno dzieci jak i dorośli, przy czym dorośli ciężej.
  • Chorobami epidemicznymi są też “katary”, czyli “nieżyty nosa” zwane też “przeziębieniami”. Wywołuje je wiele szczepów wirusów, które ze względu na długą koewolucję z człowiekiem nie są już niebezpieczne dla ludzi z normalnym systemem odpornościowym. W większości przypadków za powstanie kataru wirusowego odpowiadają rhinowirusy, wirusy paragrypy, wirus grypy i adenowirusy. Wielość wirusów wywołujących “przeziębienie”, ich względna nieszkodliwość i szybkie mutacje powodują, że przygotowanie szczepionek przeciw nim jest uznawane za nieopłacalne czy wręcz niewykonalne.
Różnorodne modele epidemii to jedna z ważniejszych użytkowo klas modeli matematycznych i komputerowych modeli symulacyjnych. Różnorodne modele epidemii chorób zakaźnych stosowane od lat w epidemiologii - niekiedy z niezłymi skutkami. Ostatnio coraz częściej są to modele oparte na sieciach społecznych – istotne szczególnie dla epidemii grypy, AIDS czy SARS (tym tematem zajmiemy się później). Zdarzają się także bardzo złożone, przypominające gry w SIMSy, modele epidemii w konkretnych miastach (np. Model grypy w Los Angeles), coś nieco zbliżonego możemy jeszcze zrobić ćwicząc w następnym rozdziale model epidemii w konwencji ABM.



EPIDEMIA jest także głównym modelem rozprzestrzeniania się informacji i innowacji w społeczeństwie, chociaż to nie do końca słuszne, i do czego też powinniśmy kiedyś wrócić.

CD w następnym wpisie.

PROCESSING W EDUKACJI I MODELOWANIU

Dawno nie pisałem na tym blogu, co nie znaczy, że nic w tej kwestii nie robiłem.
Doraźne ciekawostki umieszczałem w tym czasie na stronie na Facebooku.
Powoli powstawała też książka pod analogicznym tytułem. Ma już nieco ponad 150 str. w Googlowym brudnopisie.
Jeszcze trochę i będę szukał wydawcy.

Pojawiła się też nowa wersja Processingu, a materiały pomocnicze do kursu umieściłem na GitHubie.

Poniżej aktualny spis treści powstającej książki. Może chcielibyście żebym umieścił w niej jeszcze jakieś tematy?