निवास के प्रकार के बेतरतीब ढंग से रेखापुंज परिवर्तन?


12

मेरे पास स्कॉटलैंड में एक विशिष्ट क्षेत्र के लिए निवास स्थान का एक प्रकार है। मुझे पक्षी प्रजातियों की जनसंख्या व्यवहार्यता का आकलन करने के लिए निवास स्थान में परिवर्तन के साथ भविष्य के निवास परिदृश्य बनाने की आवश्यकता है।

उदाहरण के लिए, भविष्य में क्षेत्र में 10% अधिक वानिकी हो सकती है। मैं एक निश्चित आकार के ब्लॉकों में वानिकी को बेतरतीब ढंग से जोड़कर वर्तमान मानचित्र को बदलना चाहूंगा। मैं अब तक, एक रेखापुंज से यादृच्छिक बिंदुओं का चयन करने की तर्ज पर सोच रहा हूं जो उन क्षेत्रों की पहचान करता है जहां वानिकी हो सकती है और कुछ प्रकार के सेलुलर ऑटोमेटा का उपयोग करके सही आकार के ब्लॉक बढ़ सकते हैं।

क्या यह इस बारे में जाने का सबसे अच्छा तरीका लगता है? क्या कोई बेहतर तरीका है?

यदि यह सबसे अच्छा तरीका उपलब्ध है, तो मैं इसे कैसे कर सकता हूं, अधिमानतः, आर। (मैं वर्तमान में सेल्युलर औटोमेटा पैकेज के साथ "स्पैटस्टैट" में rpoints फ़ंक्शन को देख रहा हूं)

अगर उनमें से किसी में भी सरल तरीके हैं, तो मेरे पास GRASS, QGis और ArcMap 10 तक पहुंच है।


क्या आपने rasterअभी तक पैकेज को देखा है? इसे रास्टर (noo, rly?) डेटा के साथ काम करने के लिए बहुत सारे टूल मिले हैं।
रोमन लुसट्रिक

धन्यवाद, रोमन। हां, इससे मुझे अपने आधार मानचित्र को पढ़ने और हेरफेर करने के लिए उपकरण मिलेंगे।
मैट गीरी

जवाबों:


18

क्या आपने मार्कोव श्रृंखला का उपयोग करने के बारे में सोचा है ? यह प्रभावी रूप से एक "संभाव्य सेलुलर ऑटोमेटन" है, जिससे वांछित यादृच्छिकता की आपूर्ति होती है। मौजूदा पीढ़ी के स्थानीय पड़ोसियों के संदर्भ में नई पीढ़ी को निर्धारित करने के बजाय, यह नई पीढ़ी के लिए एक संभावना वितरण को निर्दिष्ट करता है। उसी या इसी तरह के क्षेत्रों की छवियों के समय, कहने, वितरण से अनुमान लगाया जा सकता है।

सहज रूप से, यह मॉडल कहता है कि एक सेल आवश्यक रूप से फॉरेस्ट से नॉन-फॉरेस्ट (या इसके विपरीत ) में संक्रमण नहीं करेगा, लेकिन यह संभावना है कि यह संक्रमण को तुरंत इसके चारों ओर भूमि कवर पर निर्भर करेगा। यह कई वर्गों को कवर कर सकता है, पड़ोस के जटिल विन्यास और यहां तक ​​कि भूमि कवर विकास के हाल के इतिहास को "याद" करने के लिए सामान्यीकृत किया जा सकता है।

मानचित्र बीजगणित कथनों का उपयोग करके संक्रमणों को लागू किया जा सकता है, जो इस पद्धति को किसी भी रेखापुंज-आधारित जीआईएस में व्यावहारिक बनाता है, यहां तक ​​कि उन तक जो सेल-स्तरीय डेटा तक सीधे या त्वरित पहुंच के बिना। 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])))

+1 बहुत दिलचस्प। यदि आपके पास किसी विशेष क्षेत्र के लिए ऐतिहासिक लैंडकवर डेटा था, तो क्या q और / या k को प्राप्त करना संभव होगा?
कर्क कुक्केंडल

2
@Kirk हां, लेकिन मैं इसकी सिफारिश नहीं करूंगा: जिस मॉडल का मैंने चित्रण के लिए उपयोग किया है वह बहुत सरल है। लेकिन आप कुछ बेहतर प्राप्त कर सकते हैं: प्रत्येक पड़ोस कॉन्फ़िगरेशन के बाहर संक्रमण के अनुभवजन्य आवृत्तियों को देखकर, आप भविष्य के विकास के मॉडल बना सकते हैं जिनके संक्रमण सांख्यिकीय रूप से पिछले विकास का अनुकरण करते हैं। यदि संक्रमण आवृत्तियां स्थानिक रूप से सजातीय हैं और यदि भविष्य अतीत की तरह कार्य करता है, तो इनमें से कुछ सिमुलेशन चलाने से भविष्य में धारण की संभावना की स्पष्ट तस्वीर मिल सकती है।
whuber

धन्यवाद, यह वही करता है जो मुझे चाहिए। क्या उस क्षेत्र के अनुपात पर एक सीमा निर्धारित करना संभव होगा जो बदलता है?
मैट गीरी

@ मैट हाँ, कम से कम एक संभाव्य अर्थ में। सिद्धांत बताता है कि मार्कोव श्रृंखलाएं प्रत्येक राज्य के अनुपात के एक विषम रूप से स्थिर मिश्रण तक कैसे पहुंचती हैं। यह एक गतिशील संतुलन है: प्रत्येक पीढ़ी में बहुत सारी कोशिकाएँ बदल सकती हैं, लेकिन शुद्ध परिणाम ग्रिड के भीतर उनके अनुपात को समान रखने के लिए होता है (छोटे संयोग विचलन तक)।
whuber

1
मैं एक भयानक आर प्रोग्रामर हूं। मैं इस्तेमाल किया गया गणित का कोड साझा कर सकता हूं; आर के कार्यों के साथ, इसे अच्छी तरह से पोर्ट करना चाहिए। आपको एक कर्नेल, एक संक्रमण नियम और उन्हें 2 डी 0/1 सरणी पर लागू करने के लिए एक प्रक्रिया की आवश्यकता है। इस प्रकार: 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}]उन्हें एक सरणी में लागू करने के लिए a । जैसे, शुरू से चार पीढ़ियों की साजिश करना ArrayPlot /@ NestList[next[#, kernel, transitionRule] &, start, 3]
whuber
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.