Markov 체인 사용에 대해 생각해 보셨습니까 ? 이것은 효과적으로 "확률 적 셀룰러 오토 마톤"이므로, 원하는 랜덤 성을 제공한다. 기존 세대의 로컬 이웃 측면에서 새로운 세대를 처방하는 대신, 새로운 세대에 대한 확률 분포를 지정합니다. 이 분포는 동일하거나 유사한 영역의 이미지의 시간 시퀀스로부터 추정 될 수있다.
직관적으로,이 모델은 셀이 반드시 숲에서 숲이 아닌 곳으로 또는 그 반대로 전환 할 필요 는 없지만, 세포가 전환 될 가능성은 바로 그 주변의 토지 표지에 달려 있다고 말합니다. 그것은 여러 종류의 표지, 복잡한 이웃 구성을 처리 할 수 있으며, 최근의 토지 표지 진화 이력을 "기억"하도록 일반화 될 수도 있습니다.
전이는 Map Algebra 문을 사용하여 구현할 수 있으므로 셀 수준 데이터에 직접 또는 빠르게 액세스 할 수없는 래스터 기반 GIS에서도이 방법을 실행할 수 있습니다. R을 사용하면 훨씬 쉬워집니다.
예를 들어, 흰색과 검은 색의 두 클래스만으로 시작 구성을 고려하십시오.
발생할 수있는 일을 설명하기 위해 검정으로의 전이가 1-q ^ k 확률로 발생하는 매개 변수화 된 모델 (데이터를 기반으로하지 않음)을 만들었습니다. 여기서 k는 3 x 3 근방의 평균 블랙 셀 수입니다 (k = 0, 1/9, 2/9, ..., 1). q가 작거나 이웃의 대부분이 이미 검은 색이면 새 셀이 검은 색이됩니다. 다음은 0.25에서 0.05 사이의 q 값 5 개에 대한 10 세대의 독립적 인 4 가지 시뮬레이션입니다.
분명히이 모델에는 CA의 많은 특성이 있지만 대체 결과를 탐색하는 데 유용한 임의 효과도 포함되어 있습니다.
암호
다음은의 시뮬레이션을 구현합니다 R
.
#
# Make a transition from state `x` using a kernel having `k.ft` as
# its Fourier transform.
#
transition <- function(x, k.ft, q=0.1) {
k <- zapsmall(Re(fft(k.ft * fft(x), inverse=TRUE))) / length(x)
matrix(runif(length(k)) > q^k, nrow=nrow(k))
}
#
# Create the zeroth generation and the fft of a transition kernel.
#
n.row <- 2^7 # FFT is best with powers of 2
n.col <- 2^7
kernel <- matrix(0, nrow=n.row, ncol=n.col)
kernel[1:3, 1:3] <- 1/9
kernel.f <- fft(kernel)
set.seed(17)
x <- matrix(sample(c(0,1), n.row*n.col, replace=TRUE, prob=c(599, 1)), n.row)
#
# Prepare to run multiple simulations.
#
y.list <- list()
parameters <- c(.25, .2, .15, .1, .05)
#
# Perform and benchmark the simulations.
#
i <- 0
system.time({
for (q in parameters) {
y <- x
for (generation in 1:10) {
y <- transition(y, kernel.f, q)
}
y.list[[i <- i+1]] <- y
}
})
#
# Display the results.
#
par(mfrow=c(1,length(parameters)))
invisible(sapply(1:length(parameters),
function(i) image(y.list[[i]],
col=c("White", "Black"),
main=parameters[i])))
raster
패키지를 아직 보셨습니까 ? 래스터 (noo, rly?) 데이터로 작업 할 수있는 많은 도구가 있습니다.