NetLogo双绘图异常及‘空列表均值’报错排查求助
NetLogo绘图问题修复指南
问题现状
复刻NetLogo模型库「Lottery」示例的两个绘图时,X轴正常但Y轴功能失效:
- TURTLES PLOT:目标绘制每周海龟数量,仅计数器变动但绘图始终显示0
- PATCHES PLOT:目标绘制每周补丁平均花朵数,运行触发报错:
Runtime error: Can’t find the mean of list with no numbers []
尝试将计数、平均值转为独立变量时,出现agentset类型错误,同类方案未解决问题。
问题代码
TURTLES PLOT 更新代码
clear-plot foreach sort remove-duplicates [week] of turtles [ week-count -> plotxy week-count count turtles with [week-count = [week] of turtles] ]
PATCHES PLOT 更新代码
clear-plot foreach sort remove-duplicates [week] of turtles [ week-count -> plotxy week-count mean [flowers] of patches with [week-count = [week] of turtles ] ]
补丁初始化代码
to setup-patches ask patches [ if random-float 100 < flower-density [ set flowers 100 set pcolor 134 if flowers = 0 [ while [ flowers = 0 ] [ set flowers random-float 100 ] ] ] ] end
问题排查与修复
1. TURTLES PLOT 错误修复
错误原因:[week] of turtles返回所有海龟的week列表,而非当前海龟的week值,导致with筛选条件逻辑完全错误,始终返回空集合,计数为0。
修复后代码:
clear-plot foreach sort remove-duplicates [week] of turtles [ week-count -> plotxy week-count count turtles with [week = week-count] ]
2. PATCHES PLOT 错误修复
错误原因:补丁没有week变量,patches with [week-count = [week] of turtles]会筛选出空集合,触发mean函数报错;同时逻辑上未正确关联补丁与对应周的海龟。
分场景修复:
- 如果补丁有对应周的
week变量(需全局同步更新):
clear-plot foreach sort remove-duplicates [week] of turtles [ week-count -> plotxy week-count mean [flowers] of patches with [week = week-count] ]
- 如果补丁无
week变量,需统计当前周内被海龟访问过的补丁:
clear-plot foreach sort remove-duplicates [week] of turtles [ week-count -> let current-turtles turtles with [week = week-count] let target-patches patches with [any? turtles-here and member? self [patch-here] of current-turtles] plotxy week-count ifelse-value empty? target-patches [0] [mean [flowers] of target-patches] ]
3. 补丁初始化代码优化
原代码中if flowers = 0判断冗余(刚设置flowers 100不可能为0),优化后更简洁:
to setup-patches ask patches [ if random-float 100 < flower-density [ set flowers random-float 100 set pcolor 134 ] else [ set flowers 0 ] ] end
内容的提问来源于stack exchange,提问作者remcin
相关产品推荐
相关产品推荐

