Netlogo多对多关系实现及国家海龟名称赋值问题咨询
NetLogo开发问题解答
多对多海龟-斑块关系的可视化支持
NetLogo原生规则中单只海龟同一时间仅归属于1个斑块(即turtle-here返回的是海龟当前坐标所在的唯一斑块),但多对多关系的可视化完全可以实现:
- 给海龟新增自定义列表类型变量存储其关联的所有斑块引用,可视化时批量将海龟关联的所有斑块设置为同一标识色即可直观体现所属关系
- 也可以直接在海龟和所有关联斑块之间创建无向链接,通过连线直接展示多对多绑定关系
跨国运营银行模型的代理与链接设置
你完全可以根据自己的模型需求选择方案,不是必须改成双海龟品种:
- 方案1:保留国家为斑块。给银行海龟新增自定义列表变量
operating-countries存储其运营的所有国家斑块的引用,需要调用关联国家属性时直接遍历该列表即可,适合国家属性较少、不需要国家做主动行为的场景 - 方案2:拆分为银行、国家两类海龟品种。更适合国家本身有大量自定义属性、需要主动执行逻辑的场景,通过链接代理关联两者是最简洁的实现方式
- 银行间链接建议单独设置专属的链接品种,和银行-国家的链接做区分,后续筛选、统计不同类型关系时不需要额外加状态判断,逻辑更清晰且不容易出bug
国名列表与国家海龟变量的批量匹配
不需要自建品种专属ID,直接通过sort对同品种海龟做固定排序,再和列表一一匹配即可,参考代码:
; 提前将CSV读取的国名存储为列表country-name-list let sorted-countries sort country-turtles ; sort对同品种海龟默认按who号升序排列,序列固定 (foreach country-name-list sorted-countries [ [current-name current-country] -> ask current-country [ set country-name current-name ] ])
- 只要你在执行赋值操作前没有增删国家海龟,排序后的序列就和国名列表的下标完全对应
- 后续需要通过国名检索对应国家海龟时,直接用
one-of country-turtles with [country-name = "目标国名"]调用即可,国名量级在千级以内时性能完全不受影响
内容的提问来源于stack exchange,提问作者LorenzoLearningCurve
相关产品推荐
相关产品推荐

