为海龟分配空间自相关变量



我想给分布在网格上的海龟分配一个生成的自相关变量(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。不管怎样,这看起来没有必要这么复杂。

任何想法?

可能不是最好的解决方案,但至少很接近。我使用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 is a report:

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

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

最新更新