Anylogic:事件块重置Histogram遇类型不匹配错误求助
AnyLogic中实现Histogram每小时重置并统计TimeMeasureEnd输出的解决方案
问题原因
你遇到的类型不匹配错误,是因为直接将Histogram绑定到timeMeasureEnd.distribution(TimeMeasureEnd的内置样本分布对象),调用reset()时系统错误地尝试将TimeMeasureEnd对象转换为double类型,导致类型冲突。该问题和Source注入的Agent无关。
正确实现步骤
方法1:手动维护Histogram Data(推荐)
- 创建Histogram Data对象:在Main的Data面板下新建一个Histogram Data,命名为
hourlyTimeData。 - 配置TimeMeasureEnd模块:在TimeMeasureEnd的On measure end事件中添加代码,将每次测量结果手动添加到Histogram Data:
hourlyTimeData.add(timeMeasureEnd.getLastValue()); - 绑定Histogram组件:将你的Histogram组件(chart)的Data属性设置为
hourlyTimeData,替代原来的timeMeasureEnd.distribution。 - 设置事件块重置逻辑:在HourlyReset事件块的Action中,调用Histogram Data的重置方法:
注:部分AnyLogic版本中可替换为hourlyTimeData.reset();clear(),若reset()报错可测试此方法。
方法2:复用TimeMeasureEnd的重置功能
如果不想额外维护Histogram Data,也可以直接重置TimeMeasureEnd的统计数据,让Histogram自动同步新数据:
- 将Histogram的Data属性保持为
timeMeasureEnd.distribution。 - 在HourlyReset事件块的Action中,直接重置TimeMeasureEnd的统计:
这样TimeMeasureEnd会清空之前的样本,Histogram会自动刷新为新的每小时数据。timeMeasureEnd.reset();
验证方法
运行模型后,观察每小时事件触发时,Histogram是否清空并重新统计新的测量值,同时检查控制台是否仍有类型不匹配的错误提示。
内容的提问来源于stack exchange,提问作者AndyC22
相关产品推荐
相关产品推荐

