क्या आपने मार्कोव श्रृंखला का उपयोग करने के बारे में सोचा है ? यह प्रभावी रूप से एक "संभाव्य सेलुलर ऑटोमेटन" है, जिससे वांछित यादृच्छिकता की आपूर्ति होती है। मौजूदा पीढ़ी के स्थानीय पड़ोसियों के संदर्भ में नई पीढ़ी को निर्धारित करने के बजाय, यह नई पीढ़ी के लिए एक संभावना वितरण को निर्दिष्ट करता है। उसी या इसी तरह के क्षेत्रों की छवियों के समय, कहने, वितरण से अनुमान लगाया जा सकता है।
सहज रूप से, यह मॉडल कहता है कि एक सेल आवश्यक रूप से फॉरेस्ट से नॉन-फॉरेस्ट (या इसके विपरीत ) में संक्रमण नहीं करेगा, लेकिन यह संभावना है कि यह संक्रमण को तुरंत इसके चारों ओर भूमि कवर पर निर्भर करेगा। यह कई वर्गों को कवर कर सकता है, पड़ोस के जटिल विन्यास और यहां तक कि भूमि कवर विकास के हाल के इतिहास को "याद" करने के लिए सामान्यीकृत किया जा सकता है।
मानचित्र बीजगणित कथनों का उपयोग करके संक्रमणों को लागू किया जा सकता है, जो इस पद्धति को किसी भी रेखापुंज-आधारित जीआईएस में व्यावहारिक बनाता है, यहां तक कि उन तक जो सेल-स्तरीय डेटा तक सीधे या त्वरित पहुंच के बिना। R का उपयोग करने से यह और भी आसान हो जाता है।
उदाहरण के लिए, केवल दो वर्गों, सफेद और काले रंग के साथ इस शुरुआती विन्यास पर विचार करें:
क्या हो सकता है, यह स्पष्ट करने के लिए, मैंने एक पैरामीकृत मॉडल (किसी भी डेटा पर आधारित नहीं) बनाया, जिसमें काले रंग का संक्रमण प्रायिकता 1 - q ^ k के साथ होता है, जहाँ k 3 से 3 के भीतर काली कोशिकाओं की औसत संख्या है (k =) 0, 1/9, 2/9, ..., 1)। जब या तो q छोटा है या अधिकांश पड़ोस पहले से ही काला है, तो नया सेल काला होगा। क्यू के पाँच मूल्यों के लिए दसवीं पीढ़ी के चार स्वतंत्र सिमुलेशन यहां 0.25 से 0.05 तक हैं:
जाहिर तौर पर इस मॉडल में 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?) डेटा के साथ काम करने के लिए बहुत सारे टूल मिले हैं।