ONA – Zadanie 1- stochastyczny automat komórkowy

Podobnie jak w zeszłym roku, naszym pierwszym zadaniem zaliczeniowym będzie wykonanie programu w pythonie, który symuluje automat komórkowy. Tym razem będzie to tzw. stochastyczny automat komórkowy, gdzie zmiany stanów następują losowo, zgodnie z pewnymi regułami. Będziemy to robić na przykładzie bardzo uproszczonego modelu epidemii podczas kwarantanny. Będziemy używali adaptacji uproszczonego modelu Kermack’a-McKendricka. Osoby zainteresowane mogą poczytać wicej o podobnych modelach w tym artykule:schneckenreither2008

W naszym przypadku model automatu komórkowego to dwuwymiarowa macierz o wymiarach NxN (gdzie N jest parametrem wykonania programu). Każda komórka macierzy reprezentuje jedną osobę i może przyjmować jedną z 3 możliwych wartości:

  • 0 – podatny na zarażenie,
  • 1 – zarażony,
  • 2 – ozdrowieniec (niepodatny na zarażenie).

Macierz jest w większości inicjowana na 0 (cała populacja jest na razie zdrowa i podatna na zarażenie), oprócz k pierwszych zarażonych, rozłożonych losowo w różnych miejscach macierzy (k to kolejny parametr wykonania)

W każdym kroku symulacji, wartości w macierzy będą zmieniały się zgodnie z następującymi regułami:

  • ozdrowieńcy (komórki o wartości 2) nie zmieniają już swojego stanu
  • każda komórka w stanie zarażonym (1) ma szanse na wyzdrowienie (przejście do stanu 2) w każdym kroku równe p_w (parametr)
  • każda komórka w stanie podatnym (0) ma szanse na zarażenie się od każdego chorego sąsiada równe p_z (parametr)

Sąsiedztwo wyznaczamy wg. metody Moore’a, przy czym rozważamy sąsiedztwo o promieniu r, (parametr, domyślnie 1), czyli sąsiadami są pola o odległości Czebyszewa nie większej niż r.

W związku z tym, w każdym kroku możemy obliczyć dla każdego pola liczbę sąsiadów zarażonych Z (liczba pól w zadanym sąsiedztwie, które w obecnym stanie mają wartość 1). Wtedy prawdopodobieństwo zarażenia w danym kroku (zakładamy niezależne zarażenia od wszystkich sąsiadów) to 1- (1-p_z)**Z.

Interesuje nas ewolucja takich układów dla zadanych parametrów N,k,p_w,p_z,r.

Państwa zadaniem jest napisanie programu, który pozwala na:

  1. Przeprowadzenie symulacji (dla zadanych parametrów), która wykonuje maksymalnie M kroków, chyba, że wcześniej zostanie osiągnięty stan, w którym wszyscy są już niepodatni na zarażenie ozdrowieńcami (5 pkt)
  2. Wizualizacja poszczególnych kroków algorytmu w postaci:
    a) wykresu liniowego (liczba komórek o wartościach 0,1,2 w zależności od czasu – 1 pkt)
    b) wizualizacji stanów systemu w kolejnych krokach (przy pomocy funkcji imshow() – 1pkt)
    c) zapisu tych wizualizacji do formatu .png (1 pkt)
    c) animacji przy pomocy klasy animation (2 pkt).

Mają Państwo na to 2 tygodnie, czyli spodziewam się przesłania do mnie e-mailem, z tagiem [ONA] w tytule, rozwiązania w postaci pojedyńczego, skomentowanego pliku pythonowego, jako załącznik, do dnia 1. kwietnia 2020.

Pytania najlepiej przesyłać w postaci komentarzy do tego posta.

15 thoughts on “ONA – Zadanie 1- stochastyczny automat komórkowy”

  1. Na wykładzie ustaliliśmy, że wydajność nie będzie miała zasadniczego wpływu na ocenę, ale zakładam, że korzystać będziecie Państwo z macierzy numpy i wizualizacji matplotlib.

  2. Czy parametry: N,k,p_w,p_z,rsą podawane w momencie uruchomienia z terminala, czy mają być zbierane ze stdin? Czy jeśli mogą być ze stdin to możemy użyć int(input()) dla każdego z parametrów?

    1. Nie jest to wymienione w zadaniu, więc można to zrobić dowolnie, ale zachęcam do zapoznania się z modułem Argparse i przetwarzaniem parametrów z linii komend. int(input()) to nie jest dobra metoda przyjmowania argumentów…

  3. “Przeprowadzenie symulacji (dla zadanych parametrów), która wykonuje maksymalnie M kroków”
    M to kolejny parametr? Nie został wymieniony w zadanych parametrach.

  4. Czy animacja powinna mieć tytuł albo inne cechy, czy wystarczą “zmieniające się kolory kwadracików”?

  5. Moment zakończenia, czyli gdy nikt nie jest podatny na zarażenie, mamy interpretwać w ten sposób, że po prostu nie ma 0 w macierzy, czy że mogą być nadal 0, ale już wiemy, że się nie zarażą?

    1. Moment zakończenia, to wtedy, gdy są same 2 (jeśli mamy 1 – to jeszcze muszą wyzdrowieć). Początkowo to niejasno sformułowałem.

  6. Przepraszam, ale nie wiem czy dobrze rozumiem. Cytuję: “Przeprowadzenie symulacji (dla zadanych parametrów), która wykonuje maksymalnie M kroków, chyba, że wcześniej zostanie osiągnięty stan, w którym wszyscy są już ozdrowieńcami (5 pkt)”. Z tego wynika, że jeśli nie ma już komórek o wartości 1, ale ciągle są 0 i 2 (sytuacja w której nie wszyscy się zarazili) to symulacja ma dalej trwać aż do M kroków? Nie lepiej to zakończyć w momencie, gdy na mapie nie ma już komórek zarażonych?

    1. Zapisywanie do pliku png (punkt 2c) dotyczy zarówno wykresu liniowego jak i pojedyńczych klatek animacji (2a, 2b), natomiast nie ma obowiązku zapisywania samej animacji do pliku gif, choć jak ktoś się tego nauczy, to na pewno się to przyda…

Leave a Reply to bartek Cancel reply

Your email address will not be published. Required fields are marked *