AnyLogic模型分段计时时出现“agent无法解析为变量”错误的技术咨询
解决AnyLogic中直方图“agent无法解析为变量”的错误
首先得说清楚你为啥会遇到这个错误:你在Main模块的Histogram Data里直接写了agent.cycleTime,但Main的上下文里并没有默认的agent变量——系统根本不知道你指的是哪个Agent,自然就会报错啦。
下面是具体的修正步骤,一步步来:
1. 调整数据写入逻辑
在你计时结束块的On enter槽里,除了计算cycleTime,还要主动把计算好的时间值添加到Main的数据集里。修改后的代码应该是这样的:
// 计算周期时间 agent.cycleTime = agent.endTime - agent.startTime; // 把值存入Main里的myDataSet数据集 myDataSet.add(agent.cycleTime);
小提醒:如果你的流程块不是在Main里(比如在子模块中),那需要用
main.myDataSet.add(agent.cycleTime)来访问Main里的数据集。
2. 修正直方图的数据源设置
打开你在Main里创建的直方图,直接选择myDataSet作为它的数据源就好,不需要再在数据源里写agent.cycleTime的表达式了——因为我们已经把数据主动塞进数据集里了。
额外的优化建议
为了避免那些没经过Start块的Agent干扰数据(它们的startTime可能没被初始化,计算出来的cycleTime会是无效值),你可以做两个优化:
- 在Patient Agent类里,给
startTime设置默认初始值(比如0); - 在计算cycleTime之前加个判断,只有经过Start块的Agent才会记录数据:
// 只有startTime被赋值过(不等于初始值0)才计算并记录 if(agent.startTime != 0) { agent.cycleTime = agent.endTime - agent.startTime; myDataSet.add(agent.cycleTime); }
另外别忘了,在你需要开始计时的流程块的On enter槽里,一定要给startTime赋值哦:
agent.startTime = time();
内容的提问来源于stack exchange,提问作者NickA
相关产品推荐
相关产品推荐

