NetLogo中如何移动到链路属性为指定值的关联智能体
需求说明
筛选出与当前智能体存在连接、且对应连接trust属性为0.9的高信任关联智能体,随机选取其中一个后移动到目标位置。
原有代码问题
- 建连逻辑中所有连接的
trust属性统一赋值为0.4,不存在trust=0.9的连接,无法筛选到目标对象 - 调用
my-out-connections获取连接不适配无向连接breed,无向连接直接使用my-connections即可获取当前节点的所有关联连接 - 对端智能体筛选逻辑冗余:NetLogo连接内置
other-end关键字,可直接获取连接另一端的节点,不需要额外做集合成员判断 - 缺少边界判断:如果当前节点没有符合要求的高信任连接,直接选取集合元素会触发运行时报错
修正后可运行代码
breed [ people ] undirected-link-breed [ connections connection ] connections-own [ trust ] to setup clear-all ; 初始化50个智能体随机分布,可根据自己的模型调整数量和初始位置规则 create-people 50 [ setxy random-xcor random-ycor ] setup-all-connections reset-ticks end to setup-all-connections ask people [setup-connection] end to setup-connection ; 示例建连逻辑:每个智能体随机和最多3个其他智能体建立连接,可替换为你实际的建连规则 let connect-targets n-of min 3 (count other people) other people create-connections-with connect-targets [ ; 20%概率生成trust=0.9的高信任连接,其余连接trust为0.4,方便测试效果,可替换为实际赋值规则 set trust ifelse-value (random-float 1 < 0.2) [0.9] [0.4] ] end to go move-people tick end to move-people ask people [ let chance random 100 if chance < 80 [ ; 筛选当前智能体所有trust值为0.9的连接 let high-trust-connections my-connections with [trust = 0.9] ; 批量提取所有高信任连接对端的智能体,转为标准智能体集合 let high-trust-agents turtle-set [other-end] of high-trust-connections ; 存在符合条件的智能体时才执行移动,避免报错 if any? high-trust-agents [ move-to one-of high-trust-agents ] ] ] end
关键逻辑说明
- 无向连接不需要区分入/出方向,直接通过
my-connections即可获取当前智能体的所有关联连接 - 通过
[other-end] of 连接集合可以批量取出所有连接对端的节点,使用turtle-set转为标准智能体集合后,即可正常调用one-of随机选取目标 - 移动前增加
any?判断,当当前智能体没有符合要求的高信任连接时跳过移动逻辑,避免运行报错 - 建连部分的trust赋值逻辑为测试用示例,你可以根据实际业务规则调整,只要保证存在
trust=0.9的连接即可正常筛选
内容的提问来源于stack exchange,提问作者kay21
相关产品推荐
相关产品推荐

