AnyLogic技术问询:带时间约束的充电区Agent进出统计及在场数计算
在AnyLogic中统计带时间约束的充电区Agent进出及实时在场数
一、基础变量定义
在充电站(Charging Station)代理或模型主环境中添加以下变量:
int currentAgentsInStation:存储实时在场且符合时间约束的Agent总数,初始值设为0HashMap<Agent, Double> agentEntryTimes:记录每个进入充电区的Agent及其进入时间,用于后续时间约束校验
二、Agent进入充电区的统计逻辑
在充电区(Charging Block)的On enter事件中编写代码:
// 记录当前Agent的进入时间 agentEntryTimes.put(agent, time()); // 按时间约束判断是否纳入统计(示例:仅统计8:00-20:00进入的Agent) double startTime = timeToDouble(8, 0, 0); double endTime = timeToDouble(20, 0, 0); if (time() >= startTime && time() <= endTime) { currentAgentsInStation++; }
三、Agent离开充电区的统计逻辑
在充电区(Charging Block)的On exit事件中编写代码:
// 获取该Agent的进入时间 Double entryTime = agentEntryTimes.get(agent); if (entryTime != null) { double startTime = timeToDouble(8, 0, 0); double endTime = timeToDouble(20, 0, 0); // 校验进入时间是否符合统计约束,符合则更新在场数 if (entryTime >= startTime && entryTime <= endTime) { currentAgentsInStation--; } // 移除已离开Agent的时间记录,避免内存占用 agentEntryTimes.remove(agent); }
四、实时在场数展示
- 在模型界面添加
Text组件,将其Text属性绑定为"" + currentAgentsInStation,即可实时显示符合时间约束的Agent在场总数 - 若需更详细统计(如峰值、平均在场时长),可添加
Statistics组件,将currentAgentsInStation作为统计输入项
五、示例场景说明
假设需统计工作日8:00-20:00进入充电区的车辆:
- 车辆进入充电区时,系统自动记录进入时间,若在目标时段内则在场数+1
- 车辆充电完成离开时,系统核对其进入时间,符合时段则在场数-1
- 界面Text组件实时更新显示当前在场的合规车辆数量
内容的提问来源于stack exchange,提问作者Romi
相关产品推荐
相关产品推荐

