NetLogo原生指令实现捕鼠器模型:BehaviorSpace与可视化等技术咨询
NetLogo捕鼠器模型开发:三个技术问题求助
我正在用NetLogo原生指令开发捕鼠器模型,模拟陷阱触发(pop)及随ticks变化的pcolor状态,未使用time系列扩展。目前遇到以下三个技术问题:
问题1:BehaviorSpace中设置Reporter测试max_dist相关指标
如何在BehaviorSpace中设置Reporter,以测试max_dist变化时的三个指标:空中球数量峰值时间、最后一个陷阱触发时间、触发陷阱占比?
问题2:Pop过程中两种判断条件的差异
将Pop过程中的判断条件从if trigger-time < 0改为if pcolor = yellow后模型仍运行,但前者似乎更精准,二者差异是什么?
问题3:原生指令绘制触发传播路径连线
如何通过原生指令编写程序,绘制触发源patch与被触发patch间的连线,可视化触发传播路径?
附上当前代码、运行结果及BehaviorSpace设置截图以辅助排查。
问题1解答
空中球数量峰值时间
- 新增全局变量
max-ball-count(初始0)和peak-tick(初始0); - 每
tick更新时,计算当前空中球数量(例:count turtles with [state = "air"]),若当前数量大于max-ball-count,则更新max-ball-count并将当前ticks赋值给peak-tick; - BehaviorSpace的Reporter中直接调用
peak-tick即可。
- 新增全局变量
最后一个陷阱触发时间
- 新增全局变量
last-pop-tick(初始-1); - 在
pop过程中,每当陷阱触发时,将last-pop-tick更新为当前ticks; - BehaviorSpace的Reporter中调用
last-pop-tick。
- 新增全局变量
触发陷阱占比
- 提前用全局变量
total-traps记录初始陷阱总数(例:set total-traps count patches with [pcolor = yellow]); - BehaviorSpace的Reporter中写入表达式:
(count patches with [trigger-time >= 0]) / total-traps(根据你的触发状态定义调整判断条件)。
- 提前用全局变量
问题2解答
trigger-time < 0的逻辑:trigger-time是直接绑定陷阱触发状态的核心变量,未触发时设为负值,触发后更新为对应ticks,属于逻辑状态的直接记录,不受视觉渲染、其他操作干扰,判断精准度高。pcolor = yellow的逻辑:pcolor是视觉表现变量,仅作为触发状态的视觉映射。若模型中存在其他操作误改pcolor,或触发逻辑与颜色更新不同步(比如触发后未及时改色),都会导致判断错误,属于依赖视觉同步的间接判断,存在潜在误差风险。
问题3解答
通过以下步骤实现:
- 为每个patch新增变量
trigger-source,初始设为nobody,用于记录触发当前patch的源patch; - 在
pop触发逻辑中,当patch A触发patch B时,执行ask patch B [set trigger-source patch A]; - 编写绘制连线的过程:
to draw-trigger-paths clear-draw ask patches with [trigger-source != nobody] [ draw-line xcor ycor [xcor] of trigger-source [ycor] of trigger-source black 1 ] end
- 可在
tick结束时自动调用该过程,或添加按钮手动触发绘制。若需保留历史路径,移除clear-draw即可累积绘制。
内容的提问来源于stack exchange,提问作者user22570245
相关产品推荐
相关产品推荐

