码农家园

关闭
导航

Netlogo 代理错误


netlogo

Netlogo Agents error

我正在实施演讲厅的疏散模拟。我有两种类型的学生坐在桌子上和额外的学生在类内随机分配。所以我创建了两个滑块以便将学生分配到所需的位置数字。滑块被命名为 extrastudents 和 standardstudents。当模拟开始时,我希望所有学生(包括桌子和临时学生)都去最近的出口(我有两个出口)。所以我只为坐下的学生实施了这一点:

1
2
3
4
5
6
ask standarstudents  [
ifelse pycor > 0
[ set target one-of nexits]
[ set target one-of sexits]
face target
]

Nexits 是北出口。
Sexits 是南出口。

问题是我得到了这个错误,我可以继续:

ASK 期望输入是代理或代理集,但得到了数字 3。
观察者运行 ASK 时出错。(数字 3 来自用户选择的滑块)
由过程 SETUP 调用
由按钮 'setup'

调用

org.nlogo.nvm.ArgumentTypeException: ASK 预期输入是代理或代理集,但得到了数字 3。

有什么想法吗?

相关讨论

  • 另外,我不知道你是否意识到这一点,但是 pycor 报告了海turtle所在的补丁的坐标,如果它不在,它将与海turtle所在的坐标不同补丁的中心。 ycor 为 0.5 的海turtle将具有 pycor = 0,因此即使海turtle略高于原点,pycor > 0 也会为假,这可能是也可能不是您想要的。
  • @NicolasPayette:ycor 为 0.5 的海turtle的 pycor 为 1,而不是 0。
  • @SethTisue 我的错误——感谢您指出。 0.5 被四舍五入,所以这是一个不好的例子。一个正确的应该是 0.49 的 ycor,这将给出 0 的 pycor(所以一般观点仍然存在......)


好吧,如果您有名为 extrastudents 和 standarstudents 的滑块,这两个变量是代表您想要的每种学生数量的数值,而不是学生本身。就像错误消息说的那样,ask 原语与代表"你在问谁"的代理集一起工作。

你真的创造了你的学生吗?将滑块放在界面上本身不会做任何事情。我建议将您的滑块重命名为 num-extrastudents 和 num-standarstudents 之类的名称,然后使用这样的代码来初始化您的人口:

1
2
3
4
5
6
7
breed [ extrastudents extrastudent ]
breed [ standarstudents standarstudent ]

to setup
  create-standarstudents num-standarstudents
  create-extrastudents num-extrastudents
end

然后,您发布的代码将起作用,因为 extrastudents 和 standarstudents 将是海turtle的品种,因此是代理集。


Copyright ©  码农家园 联系:[email protected]