如何判断agent是否在timeMeasureStart中并移除已存在的agent?
解决TimeMeasureStart重复进入报错问题
我的Agent会经过timeMeasureStart组件,之后可能不会经过timeMeasureEnd组件。由于Agent处于循环流程中,未经过timeMeasureEnd就再次进入timeMeasureStart时,会触发报错:
The agent has already been through this object; must go through TimeMeasureEnd first
解决方案思路:
可以通过timeMeasureStart.remove(ped);代码将Agent从timeMeasureStart中移除,但需要先判断Agent是否已存在于该组件的计时列表中,仅当存在时再执行移除操作,避免触发报错。想要实现的核心逻辑如下:
if(agent存在于timeMeasureStart的计时列表中){ timeMeasureStart.remove(agent); }
针对AnyLogic环境,可直接使用组件自带的isMeasuring()方法完成判断,具体代码如下:
if(timeMeasureStart.isMeasuring(agent)){ timeMeasureStart.remove(agent); }
isMeasuring(agent)方法会返回布尔值,当Agent正在被该timeMeasureStart组件计时时返回true,此时执行移除操作就不会触发报错。
内容的提问来源于stack exchange,提问作者Aqeel Tariq
相关产品推荐
相关产品推荐

