首页 > 解决方案 > 将海龟移动到 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 循环,它们将移动,直到它们到达它们的“新距离”,直到它们降落在一个未被占用的补丁上。

但是现在我想做的是让每只雄性一岁鹿分散它们各自的“新距离”,但是如果它们降落在一个被占用的土地上,我希望它们然后移动到最近的未被占用的土地上。如果他们在移动“新距离”后着陆的补丁未被占用,那么他们将留在那个补丁上。

关于如何做到这一点的任何想法?谢谢你的帮助!

标签: distancenetlogo

解决方案


如果我正确理解您的要求,您想替换:

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]

推荐阅读