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 循环,它们将移动,直到它们到达它们的“新距离”,直到它们降落在一个未被占用的补丁上。
但是现在我想做的是让每只雄性一岁鹿分散它们各自的“新距离”,但是如果它们降落在一个被占用的土地上,我希望它们然后移动到最近的未被占用的土地上。如果他们在移动“新距离”后着陆的补丁未被占用,那么他们将留在那个补丁上。
关于如何做到这一点的任何想法?谢谢你的帮助!
解决方案
如果我正确理解您的要求,您想替换:
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]
推荐阅读
- angular - 类型 'never' 必须有一个返回迭代器的 '[Symbol.iterator]()' 方法
- excel - 通过联合范围循环
- batch-file - DOSBox 中的当前目录 [可选:使用 TURBO C]
- python - 在 pandas 中分析来自多个 .txt 文件的数据
- vba - MS Access VBA - MouseMove 离开对象时如何执行事件
- python - 选择列中具有特定值的行,并在 pandas 数据框中包含具有 NaN 的行
- java - for循环中的Java特定字符
- google-apps-script - Google Apps 脚本:响应预先存在的电子邮件线程
- docker - 根据环境在 Dockerfiles 中调用不同的命令
- git - 可以从即将删除的分支中剪切一个 git 分支吗?