You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AnyLogic新手求助:如何创建符合预期的Time Stack Chart

实现AnyLogic定时统计Agent状态的堆叠图表

结论

完全可以实现你需要的每60分钟统计一次Agent状态数量、并持续更新的堆叠图表效果。下面是具体实现步骤:

1. 改用定时触发的统计逻辑

你当前是在Agent离开Delay块时统计,属于事件触发,不符合"每60分钟定时统计"的需求,需要替换为定时事件:

  • 在Main画布中拖拽一个Event块,设置触发类型为Periodically,周期设为60分钟(注意匹配模型的时间单位,若模型用秒则填3600)。
  • 在Event的「动作」栏编写统计代码,示例如下(假设你的Agent有state枚举属性,且所有Agent都在agentPopulation集合中):
    // 统计各状态Agent数量
    int state1Count = count(agentPopulation, a -> a.state == State.STATE_1);
    int state2Count = count(agentPopulation, a -> a.state == State.STATE_2);
    int state3Count = count(agentPopulation, a -> a.state == State.STATE_3);
    
    // 获取当前时间(转为小时格式,方便X轴展示)
    double currentHour = time() / 60;
    

2. 选择适配的图表类型

如果你的预期图表是每60分钟一个堆叠柱子的样式,建议使用Stacked Bar Chart而非Time Stack Chart:

  • 拖拽Stacked Bar Chart到界面,设置X轴为时间点(比如上面的currentHour),Y轴为Agent数量。
  • 创建一个Dataset(在「数据」面板中添加),添加列:time(数值型)、state1(整数型)、state2(整数型)、state3(整数型)。
  • 在定时Event的动作代码末尾,将统计结果添加到Dataset:
    dataset.add(currentHour, state1Count, state2Count, state3Count);
    
  • 绑定图表数据源:将Stacked Bar Chart的「数据集」设为你创建的dataset,X轴选择time列,每个状态对应一个系列(比如系列1关联state1列)。

3. 持续更新的实现

只要定时Event每60分钟执行一次,就会自动把新的统计数据添加到Dataset,图表会自动刷新显示最新的堆叠柱子,实现持续更新。

4. 若坚持使用Time Stack Chart的适配方法

如果一定要用Time Stack Chart呈现定时更新的效果,可在定时Event中手动给图表的每个系列添加数据点:

// 给每个状态系列添加当前时间点的数值
timeStackChart.addPoint("状态1", time(), state1Count);
timeStackChart.addPoint("状态2", time(), state2Count);
timeStackChart.addPoint("状态3", time(), state3Count);

这种方式会让图表在每个小时点生成一个数据节点,呈现阶梯式的堆叠效果,也能满足定时统计的需求。

关键注意事项

  • 确保Agent的state属性在状态切换时(比如进入/离开Delay、状态图转换)被正确更新,否则统计结果会出错。
  • 统计时要针对当前存在的Agent,使用agentPopulation集合或getAllAgents(Agent.class)方法(根据你的模型结构选择),避免统计已销毁的Agent。

内容的提问来源于stack exchange,提问作者Kittinun Yenyueak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 05:38:14