คุณคิดว่าจะใช้โซ่มาร์คอฟหรือไม่? นี่คือ "หุ่นยนต์เคลื่อนที่ที่น่าจะเป็นไปได้อย่างมีประสิทธิภาพ" ดังนั้นจึงให้การสุ่มที่ต้องการ แทนที่จะกำหนดคนรุ่นใหม่ในแง่ของเพื่อนบ้านท้องถิ่นของคนรุ่นปัจจุบันมันระบุการกระจายความน่าจะเป็นสำหรับคนรุ่นใหม่ การกระจายนั้นสามารถประมาณได้จากการพูดลำดับเวลาของภาพในพื้นที่เดียวกันหรือคล้ายกัน
โดยสังหรณ์ใจโมเดลนี้บอกว่าเซลล์ไม่จำเป็นต้องทำการเปลี่ยนจากป่าไปเป็นป่า (หรือกลับกัน ) แต่โอกาสที่มันจะทำให้การเปลี่ยนแปลงขึ้นอยู่กับพื้นที่ปกคลุมรอบ ๆ มันทันที มันสามารถจัดการหลายชั้นเรียนของฝาครอบการกำหนดค่าที่ซับซ้อนของละแวกใกล้เคียงและแม้กระทั่งทั่วไปที่จะ "จำ" ประวัติศาสตร์ล่าสุดของวิวัฒนาการครอบคลุมที่ดิน
การเปลี่ยนสามารถดำเนินการได้โดยใช้คำสั่ง 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])))
raster
แพ็คเกจหรือยัง มีเครื่องมือมากมายที่จะทำงานกับข้อมูล raster (noo, rly?)