如何在NetLogo中用Monitor显示季节(92Ticks)内每日LWG的均值?
解决方案:计算NetLogo模型中季节内每日LWG的平均值
你的核心问题在于当前代码中live-weight-gain是累加值,记录的是海龟从季节开始到当天的总增重,而非每日的LWG增量。要获取整个季节92天内所有海龟每日LWG的平均值,需要先记录每天的LWG数据,再在季末计算所有数据的均值。
修改后的代码
globals [season current-season-average] turtles-own [ daily-lwg ; 记录当日的体重增量 season-lwg-list ; 存储当前季节内每天的daily-lwg数据 ] to setup clear-all reset-ticks crt 5 [ set daily-lwg 0 set season-lwg-list [] ] ask n-of 40 patches [set pcolor green] set current-season-average 0 end to go ; 每日重置当日LWG,确保记录的是当天的增量 ask turtles [set daily-lwg 0] ; 海龟移动并吃草,更新当日LWG ask turtles [ fd 1 if pcolor = green [ set daily-lwg daily-lwg + 1 ; 吃完草后可以把草变成其他颜色,避免重复吃(可选) set pcolor brown ] ] ; 将当日LWG添加到季节列表中 ask turtles [set season-lwg-list lput daily-lwg season-lwg-list] tick ; 更新季节判断 set season ifelse-value ticks < 93 ["spring"] [ ifelse-value ticks < 183 ["summer"] [ ifelse-value ticks < 277 ["autumn"] ["winter"] ] ] ; 季末计算并存储平均LWG if ticks = 92 or ticks = 184 or ticks = 276 or ticks = 368 [ ; 合并所有海龟的季节LWG列表,计算所有每日数据的均值 set current-season-average mean flatten [season-lwg-list] of turtles print (word season " 平均每日LWG: " current-season-average) ] ; 季节切换时重置数据,并停止模型(按需保留) if member? ticks [93 185 277 369] [ ask turtles [ set daily-lwg 0 set season-lwg-list [] ] set current-season-average 0 stop ; 若不需要季末停止,可删除此行 ] end
关键修改说明
变量拆分:
daily-lwg:专门记录海龟当日的体重增量,每天重置为0,确保数据是单日的。season-lwg-list:每个海龟存储自己当前季节内每天的daily-lwg,形成一个长度为92的列表。current-season-average:全局变量,存储当前季节的平均每日LWG,方便Monitor直接调用。
数据记录逻辑:
每天海龟完成吃草动作后,将当日的daily-lwg添加到season-lwg-list中,确保季节内的每日数据都被保存。季末计算逻辑:
使用flatten [season-lwg-list] of turtles将所有海龟的季节LWG列表合并成一个包含所有每日数据的大列表,再用mean计算平均值,这就是你需要的「整个季节内所有海龟每日LWG的均值」。Monitor设置:
在界面添加Monitor,将表达式设置为current-season-average,即可实时查看当前季节的平均LWG(季末会显示最终计算值)。
内容的提问来源于stack exchange,提问作者JoseNav
相关产品推荐
相关产品推荐

