将海龟移到Netlogo中最近的空置补丁

时间:2018-12-12 20:19:20

标签: distance netlogo

目前,我有一个模型,其中包含许多参数,其中一个是根据某些条件分散雄性一岁鹿。从对数正态分布中拉出每个雄性一岁鸽散布的距离。这是我到目前为止的内容:

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循环,则它们将移动直到达到“新距离”,直到降落在空置的补丁上为止。

但是现在我要做的是让每只雄性一岁鹿驱散它们各自的“新距离”,但是如果它们降落在被占领的斑块上,我希望它们然后移到最近的空置斑块。如果他们在移动“新距离”后降落的补丁未被占用,那么他们将停留在该补丁上。

有关如何执行此操作的任何想法?感谢您的帮助!

1 个答案:

答案 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]
相关问题