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

AnyLogic中使用自定义分布设置年龄分布的问题

AnyLogic动态年度人口年龄分布分配问题解决方法

我在AnyLogic中构建模型时,需要根据国家统计的年度人口年龄结构(0-100岁各年龄段人口数量)为智能体分配对应年龄。目前通过自定义分布结合加载的「各年龄组年度观测数表格」实现,同时添加了仿真年份与表格年份匹配的条件,用来体现人口老龄化带来的年度年龄分布差异。但遇到问题:AnyLogic仅在初始阶段检查年份条件,全程沿用首年的年龄分布;只有运行单一年份的仿真时,才能正确使用对应年份的分布。


解决方法

  • 动态刷新自定义分布数据源
    AnyLogic的自定义分布默认仅在模型初始化时读取一次数据源,要实现年度更新,需在每年仿真推进时重新筛选对应年份的数据并更新分布:

    1. 添加一个Time Event(时间事件),设置为每年触发一次
    2. 在事件动作中编写代码(假设表格名为populationAgeData,年份字段year、年龄区间ageGroup、观测数count;自定义分布名为ageDistribution):
      List<PopulationAgeRecord> currentYearData = populationAgeData.stream()
          .filter(record -> record.year == currentSimulationYear)
          .collect(Collectors.toList());
      ageDistribution.setData(currentYearData, "ageGroup", "count");
      
  • 取消初始化时的固定筛选绑定
    不要在自定义分布的设置界面中直接绑定带年份条件的筛选,而是在模型启动时先加载初始年份的数据,之后通过上述事件动态更新。

  • 验证刷新效果
    可添加调试输出确认分布切换是否成功:

    traceln("当前使用年份:" + currentSimulationYear + ",数据条目数:" + currentYearData.size());
    

内容的提问来源于stack exchange,提问作者Luiz Calderoni

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 14:15:31