netlogo - 如何让代理在特定滴答内停留在 netlogo 中的特定补丁?
问题描述
我正在编写代码以使代理在世界各地漫游以觅食。
找到食物后,他们应该在找到食物的地方停留一段时间。但我有一个问题是让它们在食物区停留一段时间。
一定时间:每只海龟都有自己的变量“s”,“s”是NetLogo生成的随机数,这个数字在每个tick内不应该改变,我有一个问题是让“s”不改变。
例如,乌龟 1 的“s”=60,乌龟 1 找到食物后,会在食物上停留 60 刻。乌龟 1 在那里停留 60 刻后,它会离开食物,“s”的值将再次重置为另一个随机值。每只海龟都有不同的“s”值
我尝试使用计时器编码,但是每次代理遇到食物时计时器只会减少(就像他们只是在食物上行走而不是呆在那里)我不能使用bk 1 or fd -1
命令,因为海龟在他们走路后只是继续前进向后 1 个刻度。
任何帮助表示赞赏。
这是代码:
turtles-own
[
food
location
s
]
patches-own
[
food-quality
]
to go
move
forage
end
to move
ask turtles
[fd 1]
end
to forage
set s random 100
ask turtles
[ [ if food < food-quality ;meaning that turtle will only keep the best food's value each time they found food
[set food food-quality ;food-quality is patch-own, the food's value
set location patch-here]
if s >= 50
[stay] ]
]
]
end
to stay
set s s - 1 ;decrement-timer
if s = 0
[move
set label ""
reset-s
]
end
to reset-count-down
set s random 100
end
编辑:使问题更清晰并更新一些代码。
解决方案
我认为您有逻辑问题而不是编码问题,但这并不是特别清楚。如果您的变量 's' 应该是类似于停留计时器(更具描述性的名称),那么不要set
在草料过程的开头使用它。相反,set
当乌龟找到食物时,它只会在没有被停留计时器持有的情况下移动/觅食。您的代码中也没有tick
任何内容,因此您没有推进时钟。我想你想要这样的东西:
to forage
ask turtles
[ if food < food-quality ; has found food that is more than currently owned
[ set stay-timer random 5 + 20 ; sets number of ticks to stay between 5 and 24
set food food-quality ; food-quality is patch-own, the food's value
set location patch-here
]
set stay-timer stay-timer - 1
]
end
to go
ask turtles with [stay-timer = 0] [ move ]
forage
tick
end
推荐阅读
- azure - ARM 模板的输出可以在另一个模板中用作不称为嵌套的引用吗?
- .net - 本地使用 DotNet 的一天中的几个小时
- javascript - 从字符串中删除最后一个 + 符号的正则表达式是什么
- css - 在反应视图上将代码部署到heroku时未显示库样式
- excel-formula - 使用 Excel 进行数据分析
- angular - 导航到库源代码而不是索引
- python - Python 电子邮件侦听器时间间隔,仅下载 .pdf 和 .doc 附件
- javascript - 在 Vuejs 应用程序中集成 basic-ftp npm 包
- javascript - 我们对 JS 中的箭头函数优化有什么保证吗?
- r - 乳胶 - 表格未显示