NetLogo中能否不依赖agent变量让agent退出agentset?
解决方法
NetLogo内置了原生原语直接实现这个需求,你可以用other关键字,直接从目标agentset中排除当前执行代码的agent,写法和你扩展agentset的逻辑完全对称,非常简洁:
修正后的招募代码如下:
; 本示例中bad-folks尝试招募good-folks to do-bad-things if (random 3 < 2) [ ask one-of good-folks [ set good-folks other good-folks ; 从good-folks中移除自身 set bad-folks (turtle-set bad-folks self) ; 加入bad-folks ] ] end
方案说明
other是NetLogo原生支持的原语,作用就是返回输入agentset排除当前代码执行者(self)后的新agentset,完全匹配你要的「手动将自己从agentset中移除」的需求,写法和加入逻辑高度统一- 不需要额外定义任何
turtles-own变量,也不需要全量遍历所有turtle重建分组,执行效率更高,可读性也更强 - 完美支持重叠分组场景:如果需要同时维护多个可重叠的分组(比如
tall-folks、fast-folks等),只需要对对应分组执行相同的other操作即可,没有breed方案的互斥限制
内容的提问来源于stack exchange,提问作者Matteo
相关产品推荐
相关产品推荐

