netlogo - NetLogo:如何让海龟在一次滴答后返回
问题描述
希望你能帮帮我!我对以下代码有一个 NetLogo 问题:
breed [tourists tourist]
turtles-own [satisfaction]
to setup
clear-all
reset-ticks
end
to go
tick
ask n-of initial-number-tourists patches
[
sprout 1 [
set color white
set size 1
]
]
ask turtles
[ let nearest min-one-of turtles [distance myself]
if-else distance nearest < 0.0000001 [ set satisfaction 0 ]
[ set satisfaction 1 ]
]
ask turtles with [satisfaction = 0] [die]
end
目的是在每个滴答声开始时产生“初始数量的游客”。然后,他们根据是否有海龟靠近来计算他们的“满意度”,让满意度为 0 的海龟死亡。然后,剩下的(满意的)乌龟将再次发芽,并再次计算它们的满意度。
但是,该代码正在运行,但结果出乎意料。发生的事情是,海龟都发芽了,而且它们都死了。下一个刻度;它们再次发芽,又全部死亡。即使我像在我提供的代码中那样将距离阈值设置得非常低。
希望你能帮帮我!!亲切的问候
解决方案
你遇到的问题是离每只乌龟最近的乌龟就是它自己!因此,到的距离nearest
始终为零,并且每只海龟的满意度都将设置为零。你想要的是other
海龟中最接近的,
let nearest min-one-of other turtles [distance myself]
(您的距离阈值将意味着所有海龟satisfaction
的值为 1,但我认为这是您在测试中想要完成的。由于海龟是在斑块的中心发芽的,因此阈值为 1< 1.0
可以完成同样的事情。)
次要观点:约定是放在程序tick
的末尾,而不是go
程序的开头。
推荐阅读
- powershell - How do i dynamically change file-names with Rename-Item?
- javascript - fs.readFileSync("./bank/"+client,'cp1251'); 正在抛出新的 ERR_INVALID_OPT_VALUE_ENCODING
- c# - 如何从 ObjectListView 中选定项目的特定列中获取数据?
- vba - 运行时错误 91,未设置对象,尝试自动下载电子邮件附件
- vb6 - 将 BLOB 保存到文档
- javascript - 在第一个结果中获取下拉列表的返回值 [object Object]。当我选择一个选项并工作时,它会改变。如何修复默认结果
- laravel - 部署 laravel + vuejs 到共享主机
- java - 使用 PreparedStatement 在 where 子句中传递字符串
- mysql - 加入两个集合并在 MongoDB 中更新
- c - libxml2 的解析问题:命名空间错误