Mam raster typów siedlisk dla określonego obszaru w Szkocji. Muszę stworzyć przyszłe scenariusze siedlisk ze zmianami w siedlisku, aby ocenić żywotność populacji gatunku ptaka.
Na przykład w przyszłości na tym obszarze może być o 10% więcej leśnictwa. Chciałbym zmienić obecną mapę, losowo dodając leśnictwo w blokach o określonym rozmiarze. Do tej pory myślę zgodnie z zasadami wybierania losowych punktów z rastra, który identyfikuje obszary, w których może wystąpić leśnictwo, i uprawy bloków o odpowiednich rozmiarach za pomocą jakiegoś automatu komórkowego.
Czy to wydaje się być najlepszym sposobem na to? Czy istnieje lepsza metoda?
Jeśli jest to najlepszy dostępny sposób, jak mogę to zrobić, najlepiej w R? (Obecnie patrzę na funkcję rpoints w „spatstat” wraz z pakietem CellularAutomata)
Mam również dostęp do GRASS, QGis i ArcMap 10, jeśli są prostsze sposoby na którymkolwiek z nich.
raster
paczkę? Ma wiele narzędzi do pracy z danymi rastrowymi (noo, rly?).Odpowiedzi:
Czy myślałeś o użyciu łańcucha Markowa ? Jest to faktycznie „probabilistyczny automat komórkowy”, zapewniając w ten sposób pożądaną losowość. Zamiast zalecać nowe pokolenie w kategoriach lokalnych sąsiadów istniejącego pokolenia, określa rozkład prawdopodobieństwa dla nowego pokolenia. Rozkład ten można oszacować, powiedzmy, na podstawie sekwencji czasowych obrazów tego samego lub podobnego obszaru.
Intuicyjnie ten model mówi, że komórka niekoniecznie dokona przejścia z zalesionej na nieleśną (lub odwrotnie ), ale szanse, że sprawi, że przejście będzie zależeć od pokrycia terenu bezpośrednio wokół niego. Może obsługiwać wiele klas pokrycia, złożone konfiguracje dzielnic, a nawet zostać uogólniony, aby „zapamiętać” najnowszą historię ewolucji pokrycia terenu.
Przejścia można zaimplementować za pomocą instrukcji Map Algebra, co czyni tę metodę możliwą do zastosowania w dowolnym systemie GIS opartym na rastrze, nawet bez bezpośredniego lub szybkiego dostępu do danych na poziomie komórki. Używanie R sprawia, że jest to jeszcze łatwiejsze.
Rozważmy na przykład tę konfigurację początkową zawierającą tylko dwie klasy, białą i czarną:
Aby zilustrować, co może się zdarzyć, stworzyłem sparametryzowany model (nie oparty na żadnych danych), w którym przejście do czerni występuje z prawdopodobieństwem 1 - q ^ k, gdzie k jest średnią liczbą czarnych komórek w sąsiedztwie 3 na 3 (k = 0, 1/9, 2/9, ..., 1). Gdy q jest małe lub większość sąsiedztwa jest już czarna, nowa komórka będzie czarna. Oto cztery niezależne symulacje dziesiątej generacji dla pięciu wartości q w zakresie od 0,25 do 0,05:
Oczywiście model ten ma wiele cech charakterystycznych CA, ale zawiera także efekt losowy przydatny do badania alternatywnych wyników.
Kod
Poniżej zaimplementowano symulację w
R
.źródło
kernel = ConstantArray[1/3^2, {3,3}]
dla jądra;transitionRule [k_] := With[{q = 0.1}, Boole[RandomReal[{0, 1}] > q^k]]
dla reguły; inext[a_, kernel_, f_] := Map[f, ListConvolve[kernel, a, {1, 1}, 0], {2}]
zastosować je do tablicy a . Np. Aby wykreślić cztery pokolenia od początku , użyjArrayPlot /@ NestList[next[#, kernel, transitionRule] &, start, 3]
.