NetLogo海龟模型如何按指定条件识别邻居并更新belief属性
错误原因
你代码里one-of link-neighbors with [belief > .5]的返回值是符合条件的海龟代理对象,而with关键字要求后面的代码块必须返回true/false布尔值,因此会抛出类型不匹配的运行时错误。同时你原来的代码没有添加「自身belief小于0.5」的判断条件,会导致不符合规则的海龟也被执行加值操作。
修复方案
使用NetLogo内置的any?关键字判断是否存在符合条件的邻居,any?会接收一个代理集合,返回布尔值表示集合是否非空,刚好匹配你的规则要求。修复后的go过程代码如下:
to go ask turtles with [ belief < 0.5 and any? link-neighbors with [ belief > 0.5 ] ] [ set belief belief + 0.1 ; 可选配置:限制belief最大值不超过1,符合你设定的[0,1]取值范围 set belief min (list belief 1) ] tick ; 推进仿真步长,可选按需添加 end
如果你的仿真规则要求同一轮内所有海龟的判断都基于上一轮的belief值,避免前序海龟更新后的值影响同轮后序海龟的判断,可以修改为预存更新值再统一赋值的写法:
to go ; 先给所有要更新的海龟存临时变量 ask turtles [ set temp-belief belief if belief < 0.5 and any? link-neighbors with [ belief > 0.5 ] [ set temp-belief min (list belief + 0.1 1) ] ] ; 统一赋值所有海龟的belief ask turtles [ set belief temp-belief ] tick end
注意使用上面的写法需要先在turtles-own里添加temp-belief属性。
内容的提问来源于stack exchange,提问作者Descartes
相关产品推荐
相关产品推荐

