Być może Wszechświat jest wielką rodziną automatów komórkowych. Oddziaływania grawitacyjne, choć teoretycznie o nieograniczonym zasięgu, zdają się porządkować tylko pobliskie sobie grupy galaktyk. Jak to wpływa na całość? Czy ewolucja Wszechświata jest poznawalna inaczej, niż przez bierną obserwację? Nie wiadomo, ale mamy nadzieję, że świat jest pomyślany inaczej.
Andrzej Stasiewicz,
"C++Builder - Całkiem Inny Świat"
Streszczenie
Ideą projektu BurnForest było przeprowadzenie komputerowych symulacji pożaru lasu. Głównym celem tworzonych modeli było znalezienie wzajemnych funkcji parametrów określających warunki w lesie (np. gęstości, wilgotności, wiatru) oraz pożaru (np. czas trwania, procent spłoniętego drzewostanu). Rdzeniem projektu były dwa modele pożaru lasu, które zostały zaimplementowane w kodzie C++, a następnie uruchomione na ponad dwunastu komputerach oraz czterech systemach operacyjnych (Windows, DOS, Linux, SunOS). W rezultacie modelowania zostało odkrytych kilka niespodziewanych efektów, zarówno dotyczących samego modelu, jak i software'u.
Ogólny opis modelu
Generalnym założeniem modelu jest przedstawienie lasu w postaci sumy pewnych quasi-elementarnych jednostek powierzchni dS. Na pojedynczym dS znajduje się część lasu o pewnej gęstości. Oczywiście las o pewnej gęstości może mieć różny rozkład drzew i pustych przestrzeni, w związku z czym należy jego pożar potraktować jako zjawisko opisywalne statystycznie.
Szczegółowy opis modelu i jego ograniczeń
Dla zadanej gęstości i (jakkolwiek to dziwnie nie brzmi) rozmiaru dS generowany jest las o przypadkowym (random) rozkładzie drzew. W pewnej chwili czasu t = 0 zostaje zapalone jedno z drzew. To powoduje pożar - ewolucję iteracyjną automatu komórkowego, którym jest modelowany obszar lasu. Oczywiście jeden pożar jest jedynie jednym punktem pomiarowym, czyli rzeczą statystycznie nic nie znaczącą. Dlatego też modelowanie przeprowadza się poprzez wiele prób dla tych samych parametrów wejściowych (obserwując w ten sposób zachowanie zespołu statystycznego). Tymczasowo - w pierwszej i drugiej wersji modelu - zaniedbałem parametry wilgotności, a także ukształtowania terenu i zróżnicowania sposobu oraz charakterystyki przenoszenia się ognia w funkcji wysokości (ściółka, runo, korony drzew). Założyłem także, iż palące się drzewo jest źródłem pola prawdopodobieństwa zapłonu, którego wartość maleje wraz z odległością i że rozkład ten jest zbliżony do Gaussowskiego. To założenie opowiada zerowemu wypadkowemu kierunkowi wiatru, jednakże poprzez zmianę odchylenia standardowego krzywej Gaussa można zmieniać efektywny zasięg ognia pochodzącego z pojedynczego drzewa, a zatem - wpływ wiatru na dystrybucję pożaru. Po przeprowadzeniu superpozycji pól prawdopodobieństw generowanych z osobna przez każde z płonących drzew następuje `redukcja funkcji falowej', czyli przeistoczenie, dla każdego niepłonącego drzewa z osobna, prawdopodobieństwa jego zapłonu w zapłonięcie, bądź pozostanie zdrowym (z punktu widzenia ognia) drzewem. Bardziej zbliżony do rzeczywistości byłby model z dodatkiem impulsów tłumiących prawdopodobieństwo (tzn. każde drzewo położone na prostej K łączącej ją z pewnym ze źródeł pola prawdopodobieństwa zapłonu zmniejsza silnie prawdopodobieństwo zapłonu drzewa położonego dalej od źródła na prostej K), lecz, ze względu na ograniczenia w mocy obliczeniowej, impulsywnego tłumienia pola nie zaimplementowałem. Starsza pierwsza wersja modelu oparta była na mniej realistycznym założeniu, że wszyscy najbliżsi sąsiedzi zapalają się z prawdopodobieństwem = 1, a dalsi z prawdopodobieństwem = 0. Założenie takie warto było zbadać, bowiem odpowiada ono krzywej Gaussa o małej dyspersji (co ma miejsce w realnym lesie przy niezbyt wietrznej pogodzie), zaś ogromnie ułatwia obliczenia procesu dystrybucji pożaru (ma dalece mniejsze zapotrzebowanie na moc obliczeniową).
Program / Implementacja
Implementacje, zarówno modelu 1 jak i modelu 2+, znajdują się w archiwum, które poniżej można stąd ściągnąć. Zawiera ono pełny pakiet BurnForest 2, składający się ze: skompilowanego dla Windows programu BurnForest 2.6, kodu źródłowego programu symulującego (który to jest napisany w C++ i niezależny od platformy, przygotowany do kompilacji w środowiskach MSWin 32-bit, DOS 16/32-bit, UNIX), pełnej dokumentacji projektu, oraz część (całość zajmuje ponad 14MB) wyników symulacji dla obydwu modeli. Uwaga! Przed uruchomieniem programu proszę się zapoznać z zawartym w archiwum plikiem "!uwaga!.txt".
BurnForest 2.61 (20 lipca 2003, 534kB)
Niezależnie od tego można pobrać pełną dokumentację projektu w formacie PDF (81kB)
Przykładowy screenshot i animacja pożaru lasu
Proszę zwrócić uwagę na to, iż tylko niewielka część lasu płonie (tzw. efekt ściany ognia) - to ta jasnoszara otoczka pomiędzy poszerzającym się białym kręgiem wypalonych drzew, a ciemnoszarym żywym jeszcze lasem; czarne pola to tereny niezalesione.
Wyniki (efekty) modelowania
Poniżej są zamieszczone częściowe wyniki modelowania (modelem 1) dla dS = 1000x1000 komórek po 100 prób dla gęstości z zakresu od 1% do 100% co 1%, oraz wyniki modelowania (modelem 2) dla dS = 80x80 komórek po 100 prób dla gęstości od 1% do 100% co 1%, dla dx = 1, dx = 2, oraz dx = 7. Wyniki te są przedstawione w formie wykresów.
Dla modelu 1, dS=1000x1000 x 100 prób:
Wykres czasu trwania pożaru w funkcji gęstości lasu
Wykres spłonięcia drzewostanu w funkcji gęstości lasu
Dla modelu 2, dS=80x80 x 100 prób, dx = 1:
Wykres czasu trwania pożaru w funkcji gęstości lasu
Wykres spłonięcia drzewostanu w funkcji gęstości lasu
Dla modelu 2, dS=80x80 x 100 prób, dx = 2:
Wykres czasu trwania pożaru w funkcji gęstości lasu
Wykres spłonięcia drzewostanu w funkcji gęstości lasu
Dla modelu 2, dS=80x80 x 100 prób, dx = 7:
Wykres czasu trwania pożaru w funkcji gęstości lasu
Wykres spłonięcia drzewostanu w funkcji gęstości lasu
Proszę zwrócić uwagę, że charakterystyczne "przejścia fazowe" występują zarówno w modelu 1, jak i modelu 2, co wskazuje na wynikanie tego zjawiska z jakiejś ogólniejszej zależności. Co ciekawe: dla wyższych odchyleń standardowych następuje przesunięcie całej charakterystyki w stronę mniejszych gęstości, wszelako bez zmiany kształtu "krzywych".
Wnioski
Istnieje gęstość krytyczna lasu, po przekroczeniu której wystarczy zapłon jednego drzewa do tego, by spłonęła większość lasu. Czas trwania pożaru dla tej gęstości jest najdłuższy i znacznie dłuższy niż dla innych gęstości. Po przekroczeniu gęstości krytycznej czas trwania pożaru w funkcji jego gęstości jest z grubsza opisywalny zanikającą funkcją eksponencjalną. Wartość gęstości krytycznej zależy od charakterystyki funkcji prawdopodobieństwa zapłonu od odległości. Charakter tej zależności dla prawdopodobieństwa określanego przez krzywą Gaussa z grubsza określa poniższy wykres.
Nie wyznaczyłem konkretnej zależności funkcyjnej gęstości krytycznej od dx, ponieważ 7 punktów pomiarowych to zbiór zbyt mały na to, żeby na serio rozmawiać o jakiejś zależności. W tym celu należałoby przeprowadzić modelowanie dla większej ilości dx, na to w tym projekcie nie było jednak miejsca, bowiem założenie zależności prawdopodobieństwo zapłonu od odległości jako funkcji Gaussa jest zbyt grubym oszacowaniem, by miało sens bawienie się szczegółami charakterystyki zbioru wynikowego.
Podsumowanie
Modelowanie pożaru lasu dla dS = 1.000.000 komórek, zgodnie z prostymi założeniami modelu 1, zajęło 1 tydzień (co prawda nieciągłej) pracy komputera. Przemodelowanie modelu 2 dla dS = 6400 komórek zajęło również tydzień (aczkolwiek całe przedsięwzięcie trwało ponad miesiąc - niestety początkowo źle oszacowałem wydajność programu i modelowałem zbyt duże, jak na możliwości hardware'u, dS). Model pożaru lasu został doprowadzony jednocześnie do granicy. przy której skończyła się sensowność używania prostych założeń. Innymi słowy: dalsze rozwijanie modelu, który przecież ma być modelem rzeczywistości, wymagałoby zaimplementowania rzeczywistych parametrów w zależności prawdopodobieństwa zapłonu od odległości, wilgotności, o wietrze nie wspominając. To zaś jednoznacznie wymagałoby przeprowadzenia skomplikowanych (teoretycznie i organizacyjnie) dociekań dotyczących termodynamiki i hydrodynamiki dystrybucji ognia w lesie. Uznałem, że czynić tego nie zamierzam. Tym niemniej gdyby ktoś kiedyś trafił na model bardziej zaawansowany niż BurnForest2 - proszę dać mi znać.
Przy okazji okazało się, iż generator liczb pseudolosowych jest bardzo PSEUDOlosowy. Dowodzi tego charakter danych wyjściowych. Wprawdzie często zasiewałem na nowo zarodek ciągów, oraz korzystałem z najbardziej wydajnego ze znanych mi sposobów generacji tych liczb (szczegóły w kodzie źródłowym programu), to otrzymane wyniki wyglądały w większości na przykład tak: `ciąg jedynek - ciąg jakichś liczb - ciąg dwójek - ciąg jedynek - ciąg jakichś liczb - itp'. Szczegóły można obejrzeć w przykładowym pliku wynikowym. Ponadto BurnForest okazał się być prawdziwym crash-testem dla systemów windowsowych. Około 60-70% komputerów na których uruchamiany został BurnForest w wersji dla Windows po kilku godzinach pracy bez powodu zawieszało się. Pod UNIX-em efekt ten nie wystąpił, z czego wnoszę o 'winie' systemu, nie kodu (kod był ten sam dla wszystkich systemów). Ponadto nauczyłem się wielu rzeczy na temat zarządzania wieloplatformowymi (4) i wieloosobowymi (ok. 12) projektami, co jest może uwagą niemerytoryczną, ale pochwalić się nie zaszkodzi ;).
Podziękowania
Dziękuję Markowi Górskiemu za udostępnienie mi (ze stratą na zdrowiu) mocy obliczeniowej swojego komputera do przebadania rozruchowej pierwszej wersji modelu BF. Dziękuję prof. Białynickiemu-Biruli za uwagi dotyczące modelu oraz samego modelowania rzeczywistości. Dziękuję też Dominikowi Szczerbie za inspirację pomysłem palenia lasu [2] i wyśmienitą funkcję rand().
Osobno chciałbym podziękować wszystkim uczestnikom projektu BurnForest:
Markowi Górskiemu, Piotrkowi Traczykowi, Ali Strachockiej, Ani Zawadzkej, Marcinowi Kierczakowi, Czciborowi Hejwowskiemu, Rafałowi Czubie, oraz prof. Beacie Wanago-Wojtczak.
Dziękuję Wam jeszcze raz za użyczenie BurnForest'owi swoich komputerów i czasu.
Uwagi
Projekt BurnForest rozwijałem w okresie od końca lutego od końca maja 2001. W maju 2001 został on odznaczony oceną bardzo dobrą na wykładzie "Modelowanie Rzeczywistości" prof. Iwa Białynickiego-Biruli, zaś w lutym 2002 otrzymał on ocenę 5+ na wykładzie "Symulacje w materii skondensowanej" prof. Ryszarda Kutnera.
Literatura
[1] Andrzej Stasiewicz, 1998, C++Builder. Całkiem inny świat, Helion, Gliwice.
[2] Dominik Szczerba, 1996, Pożar lasu, Magazyn Amiga 50 (10/96), 28-30.