目前,我有一个模型,其中包含许多参数,其中一个是根据某些条件分散雄性一岁鹿。从对数正态分布中拉出每个雄性一岁鸽散布的距离。这是我到目前为止的内容:
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循环,则它们将移动直到达到“新距离”,直到降落在空置的补丁上为止。
但是现在我要做的是让每只雄性一岁鹿驱散它们各自的“新距离”,但是如果它们降落在被占领的斑块上,我希望它们然后移到最近的空置斑块。如果他们在移动“新距离”后降落的补丁未被占用,那么他们将停留在该补丁上。
有关如何执行此操作的任何想法?感谢您的帮助!
答案 0 :(得分:3)
如果我正确理解了您的请求,则要替换:
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]