เปลี่ยนแผนที่แรสเตอร์ของประเภทที่อยู่อาศัยแบบสุ่มหรือไม่


12

ฉันมีแรสเตอร์ประเภทที่อยู่อาศัยสำหรับพื้นที่เฉพาะในสกอตแลนด์ ฉันต้องสร้างสถานการณ์ที่อยู่อาศัยในอนาคตด้วยการเปลี่ยนแปลงที่อยู่อาศัยเพื่อประเมินความมีชีวิตของประชากรนกชนิดนี้

ตัวอย่างเช่นในอนาคตอาจมีการทำป่าไม้เพิ่มขึ้น 10% ในพื้นที่ ฉันต้องการแก้ไขแผนที่ปัจจุบันโดยการสุ่มเพิ่มป่าไม้เป็นบล็อกขนาดที่แน่นอน ตอนนี้ฉันกำลังคิดถึงการเลือกจุดสุ่มจากแรสเตอร์ซึ่งระบุพื้นที่ที่ป่าไม้อาจเกิดขึ้นและเพิ่มขนาดบล็อกที่ถูกต้องโดยใช้ออโตมาตาเซลลูล่าร์

สิ่งนี้ดูเหมือนจะเป็นวิธีที่ดีที่สุดในการดำเนินเรื่องนี้ มีวิธีที่ดีกว่านี้ไหม?

หากนี่เป็นวิธีที่ดีที่สุดที่มีอยู่ฉันจะทำสิ่งนี้ได้อย่างไรโดยเฉพาะอย่างยิ่ง R (ฉันกำลังดูฟังก์ชัน rpoints ใน "spatstat" พร้อมกับแพ็คเกจ CellularAutomata)

ฉันยังสามารถเข้าถึง GRASS, QGis และ ArcMap 10 หากมีวิธีที่ง่ายกว่า


คุณดูrasterแพ็คเกจหรือยัง มีเครื่องมือมากมายที่จะทำงานกับข้อมูล raster (noo, rly?)
Roman Luštrik

ขอบคุณโรมัน ใช่สิ่งนี้ควรให้เครื่องมือในการอ่านและจัดการแผนที่พื้นฐานของฉัน
Matt Geary

คำตอบ:


18

คุณคิดว่าจะใช้โซ่มาร์คอฟหรือไม่? นี่คือ "หุ่นยนต์เคลื่อนที่ที่น่าจะเป็นไปได้อย่างมีประสิทธิภาพ" ดังนั้นจึงให้การสุ่มที่ต้องการ แทนที่จะกำหนดคนรุ่นใหม่ในแง่ของเพื่อนบ้านท้องถิ่นของคนรุ่นปัจจุบันมันระบุการกระจายความน่าจะเป็นสำหรับคนรุ่นใหม่ การกระจายนั้นสามารถประมาณได้จากการพูดลำดับเวลาของภาพในพื้นที่เดียวกันหรือคล้ายกัน

โดยสังหรณ์ใจโมเดลนี้บอกว่าเซลล์ไม่จำเป็นต้องทำการเปลี่ยนจากป่าไปเป็นป่า (หรือกลับกัน ) แต่โอกาสที่มันจะทำให้การเปลี่ยนแปลงขึ้นอยู่กับพื้นที่ปกคลุมรอบ ๆ มันทันที มันสามารถจัดการหลายชั้นเรียนของฝาครอบการกำหนดค่าที่ซับซ้อนของละแวกใกล้เคียงและแม้กระทั่งทั่วไปที่จะ "จำ" ประวัติศาสตร์ล่าสุดของวิวัฒนาการครอบคลุมที่ดิน

การเปลี่ยนสามารถดำเนินการได้โดยใช้คำสั่ง Map Algebra ซึ่งทำให้วิธีนี้สามารถนำไปใช้กับระบบ GIS ที่มี raster ได้แม้จะไม่สามารถเข้าถึงข้อมูลระดับเซลล์ได้โดยตรงหรือรวดเร็ว การใช้ R ทำให้ง่ายยิ่งขึ้น

ตัวอย่างเช่นพิจารณาการกำหนดค่าเริ่มต้นนี้มีเพียงสองคลาสสีขาวและสีดำ:

กริดคลุมที่ดิน

เพื่อแสดงให้เห็นถึงสิ่งที่สามารถเกิดขึ้นได้ฉันได้สร้างแบบจำลองที่มีพารามิเตอร์ (ไม่ได้อิงกับข้อมูลใด ๆ ) ซึ่งการเปลี่ยนเป็นสีดำเกิดขึ้นกับความน่าจะเป็น 1 - q ^ k โดยที่ k คือจำนวนเฉลี่ยของเซลล์สีดำ 0, 1/9, 2/9, ... , 1) เมื่อ q มีขนาดเล็กหรือพื้นที่ใกล้เคียงส่วนใหญ่เป็นสีดำเซลล์ใหม่จะเป็นสีดำ นี่คือการจำลองสี่แบบอิสระของการสร้างสิบสำหรับห้าค่า 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?
Kirk Kuykendall

2
@ Kirk ใช่ แต่ฉันไม่อยากจะแนะนำ: โมเดลที่ฉันใช้เพื่อประกอบภาพนั้นง่ายเกินไป แต่คุณสามารถได้รับสิ่งที่ดีกว่า: โดยการดูความถี่เชิงประจักษ์ของการเปลี่ยนจากการตั้งค่าแต่ละแถวที่เกิดขึ้นคุณสามารถสร้างแบบจำลองของวิวัฒนาการในอนาคต หากความถี่การเปลี่ยนผ่านมีลักษณะเป็นเนื้อเดียวกันและหากอนาคตยังคงทำตัวเหมือนในอดีตการจำลองสถานการณ์สองสามครั้งเหล่านี้สามารถให้ภาพที่ชัดเจนเกี่ยวกับอนาคตที่น่าจะเป็น
whuber

ขอบคุณดูเหมือนว่าจะทำสิ่งที่ฉันต้องการ เป็นไปได้ไหมที่จะกำหนดวงเงินตามสัดส่วนของพื้นที่ที่เปลี่ยนแปลง?
Matt Geary

@ Matt ใช่อย่างน้อยก็ในความน่าจะเป็น ทฤษฎีนี้อธิบายว่าโซ่มาร์คอฟเข้าถึงส่วนผสมที่มีความเสถียรของสัดส่วนของแต่ละรัฐได้อย่างไร นี่คือดุลยภาพแบบไดนามิก: ในแต่ละรุ่นเซลล์จำนวนมากอาจมีการเปลี่ยนแปลง แต่ผลสุทธิคือการรักษาสัดส่วนของพวกเขาภายในตารางเดียวกัน (ขึ้นอยู่กับการเบี่ยงเบนโอกาสเล็กน้อย)
whuber

1
ฉันเป็นโปรแกรมเมอร์ R ที่แย่มาก ฉันสามารถแบ่งปันรหัสMathematica ที่ฉันใช้ ด้วยฟังก์ชั่นการใช้งานของ R ก็ควรที่จะพอร์ตที่ดี คุณต้องใช้เคอร์เนลกฎการเปลี่ยนแปลงและขั้นตอนเพื่อนำไปใช้กับอาร์เรย์ 2D 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}]จะนำไปใช้กับอาร์เรย์ เช่นพล็อตสี่รุ่นจากการเริ่มต้นใช้งาน ArrayPlot /@ NestList[next[#, kernel, transitionRule] &, start, 3]
whuber
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.