目前,我有一个包含许多参数的模型,其中一个模型是将一岁公鹿按照一定的标准进行分散。从对数正态分布中拉出每个雄性一岁幼仔的分散距离。这是我到目前为止所知道的:
to move-dispersing-maleyearlings
ask maleyearlings [
let chance-disperse random-float 1.001
if chance-disperse < .62 [ ;;average dispersal rates in Long et. al paper
let mu 7.5
let sigma 6.1
let beta ln (1 + (sigma * sigma) / (mu * mu))
let S (sqrt beta)
let M (ln mu) - (beta / 2)
let new-distance exp (random-normal M S)
while [any? other turtles-here and dispersal-distance < new-distance]
[right random 360
fd 1
set dispersal-distance dispersal-distance + 1]]]
end所以这个代码应该有62%的雄性一周岁的鹿被驱散,它们将驱散“新距离”的距离。如果我正确理解了我的while循环,它们将一直移动,直到它们到达“新距离”,直到它们落在一个空闲的地方。
但现在我想要做的是让每一只雄性一岁鹿分散它们各自的“新距离”,但如果它们落在一块被占用的地块上,我想让它们转移到最近的空地。如果他们在移动“新距离”后着陆的补丁没有被占用,那么他们将停留在该补丁上。
你有什么办法吗?谢谢你的帮忙!
发布于 2018-12-13 18:12:09
如果我对您的请求理解正确,您想要替换:
while [any? other turtles-here and dispersal-distance < new-distance]
[right random 360
fd 1
set dispersal-distance dispersal-distance + 1]]]使用移动到最近的空补丁的代码。尝试如下所示(未经过测试):
if any? other turtles-here
[ move-to min-one-of (patches with [not any? turtles-here]) [distance myself]https://stackoverflow.com/questions/53750737
复制相似问题