将空间自相关变量分配给海龟

时间:2015-09-29 14:44:48

标签: netlogo

我想将生成的自相关变量(0到1)分配给遍布网格的海龟。我可以在 R 中创建自相关数据,然后将其导入 Netlogo ,但可以肯定的是,在 Netlogo 中有更有效的方法。

这是一个简单的例子:

turtles-own [
variable
]

to setup
  clear-all

create-turtles 30
   [ 
    move-to one-of patches with [ not any? turtles-here ]
    ; I would like to assign a spatially autocorrelated variable
    ; for now, I am using a uniform variable
    set variable random-float 1.0 
   ]

end

这是一个使用 R

的示例
N <- 16 * 16
p <- 0.07

# generate some points
set.seed(1234)
x.coord <- rep(1:16, 16)
y.coord <- rep(1:16, each = 16)
points <- cbind(x.coord,y.coord)

# distance matrix between points
Dd <- as.matrix(dist(points))

# weights matrix
w <- exp(-p * Dd)
Ww <- chol(w)

# variable
z <- t(Ww) %*% rnorm(N,0,1)
z <- scale(z, center = min(z), scale = max(z) - min(z)) # rescale to 0-1 variable

# plot
require(ggplot2)
df <- data.frame(x = x.coord, y = y.coord, z = z)
ggplot(df, aes(x = x, y = y, col = z)) +
  geom_point() +
  scale_colour_gradient(low="red", high="white") 

因为我获得了每个补丁的数据,所以我可以从海龟所在的补丁中创建variable。无论如何,这看起来不必要地复杂。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

可能不是最好的解决方案,但至少它是接近的。我使用k-means扩展来根据海龟之间的距离生成聚类。然后,我将0到1 +之间的随机数分配给每个群集的海龟。

let clusters k-means:cluster-by-xy targets 10 100 0.1
(foreach clusters (n-values 10 [random-float 1.0]) 
[ ask ?1 [ set variable random-between ?2 0.15 ]] ) ]

random-between是一份报告:

to-report random-between [number width-interval]
  let half-interval width-interval / 2
  let random-number (number - half-interval) + random-float width-interval
  if random-number < 0 [set random-number 0]
  if random-number > 1 [set random-number 1]
  report random-number
end

答案 1 :(得分:0)

这不是很清楚 - 我不相信你的意思是自相关的,因为你还没有提到时间。根据您的R代码,您希望海龟在常规点(在这种情况下您想要ask patches [ sprout 1 ]而不是创建海龟)并且让他们拥有一个基于其位置的值的变量,在这种情况下您可以编写一个以xcorycor作为输入的函数。