У меня есть растр типов среды обитания для определенной области в Шотландии. Мне нужно создать сценарии будущей среды обитания с изменениями среды обитания, чтобы оценить жизнеспособность популяции видов птиц.
Например, в будущем лесное хозяйство в этом районе может быть увеличено на 10%. Я хотел бы изменить текущую карту путем случайного добавления леса в блоках определенного размера. До сих пор я размышляю о выборе случайных точек из растра, который идентифицирует области, где может произойти лесное хозяйство, и выращивания блоков правильного размера с использованием каких-либо клеточных автоматов.
Кажется ли это лучшим способом добиться этого? Есть ли лучший метод?
Если это лучший доступный способ, как я могу сделать это, предпочтительно, в R? (В настоящее время я смотрю на функцию rpoints в «spatstat» вместе с пакетом CellularAutomata)
У меня также есть доступ к GRASS, QGis и ArcMap 10, если в любом из них есть более простые способы.
raster
пакет? У него много инструментов для работы с растровыми (ну, ладно?) Данными.Ответы:
Вы думали об использовании цепи Маркова ? По сути, это «вероятностный клеточный автомат», обеспечивающий желаемую случайность. Вместо того, чтобы предписывать новое поколение в терминах локальных соседей существующего поколения, оно определяет распределение вероятностей для нового поколения. Это распределение можно оценить, скажем, по временным последовательностям изображений одинаковых или похожих областей.
Интуитивно понятно, что эта модель говорит, что ячейка не обязательно будет осуществлять переход от покрытых лесами к не покрытым лесом (или наоборот ), но шансы, что это сделает переход, зависят от земного покрова, непосредственно окружающего ее. Он может обрабатывать несколько классов укрытий, сложные конфигурации окрестностей и даже обобщаться, чтобы «помнить» недавнюю историю эволюции растительного покрова.
Переходы могут быть реализованы с помощью операторов алгебры карт, что делает этот метод практически применимым в любой растровой ГИС, даже в тех, которые не имеют прямого или быстрого доступа к данным на уровне ячеек. Использование R делает это еще проще.
Например, рассмотрим эту начальную конфигурацию только с двумя классами, белым и черным:
Чтобы проиллюстрировать, что может произойти, я создал параметризованную модель (не основанную на каких-либо данных), в которой переход к черному происходит с вероятностью 1 - q ^ k, где k - среднее число черных клеток в окрестности 3 на 3 (k = 0, 1/9, 2/9, ..., 1). Когда либо q мало, либо большая часть окрестности уже черная, новая ячейка будет черной. Вот четыре независимых моделирования десятого поколения для пяти значений q в диапазоне от 0,25 до 0,05:
Очевидно, что эта модель имеет многие характеристики ЦС, но она также включает в себя случайный эффект, полезный для изучения альтернативных результатов.
Код
Следующее реализует моделирование в
R
.источник
kernel = ConstantArray[1/3^2, {3,3}]
для ядра;transitionRule [k_] := With[{q = 0.1}, Boole[RandomReal[{0, 1}] > q^k]]
за правило; иnext[a_, kernel_, f_] := Map[f, ListConvolve[kernel, a, {1, 1}, 0], {2}]
применять их к массиву а . Например, чтобы построить четыре поколения от начала , используйтеArrayPlot /@ NestList[next[#, kernel, transitionRule] &, start, 3]
.