NetLogo中基于列表的海龟速度绘图与监视器数值显示问题
解决NetLogo海龟速度分布绘图与监视器数值显示问题
一、监视器显示速度数值的修正
你当前用max-one-of adults [item 0 vi]得到的是拥有最大x方向速度的海龟代理(比如(adult 24)),要显示对应的速度数值,只需在外面套一层[item 0 vi] of来提取该海龟的速度分量:
[item 0 vi] of max-one-of adults [item 0 vi]
这样监视器就会直接显示该海龟的x方向速度数值。
二、绘图代码的正确写法
1. 直接获取所有海龟x方向速度的最大值
如果你的需求是绘制所有海龟x方向速度的最大值,正确的写法是先获取所有海龟的item 0 vi(x方向速度)组成的列表,再取最大值:
plot max [item 0 vi] of turtles
你原来的plot max item 0 [vi] of turtles顺序错误,item 0 [vi] of turtles会只取第一个海龟的速度向量的x分量,再取max(无意义),所以要把[item 0 vi] of turtles作为整体传入max。
2. 通过max-one-of获取最大值并绘图
max-one-of的作用是找到拥有最大指定属性的代理,如果要用它来绘图,需要提取该代理的速度数值(不能直接plot海龟代理),写法如下:
plot [item 0 vi] of max-one-of turtles [item 0 vi]
这和第一种写法的绘图结果是一致的(都是所有海龟x方向速度的最大值),只是实现逻辑不同:前者直接计算列表最大值,后者先找到对应海龟再取它的速度。
三、关于expected a literal value错误
你之前写的plot max-one-of turtles item 0 [vi]报错,原因有两个:
max-one-of的语法要求第二个参数是报告器块,正确的报告器应该是[item 0 vi],而不是分开写item 0 [vi]max-one-of返回的是海龟代理,而plot命令需要数值类型的输入,必须通过[item 0 vi] of提取数值才能传入plot
内容的提问来源于stack exchange,提问作者Konty
相关产品推荐
相关产品推荐

