AnyLogic中使用自定义分布设置年龄分布的问题
AnyLogic动态年度人口年龄分布分配问题解决方法
我在AnyLogic中构建模型时,需要根据国家统计的年度人口年龄结构(0-100岁各年龄段人口数量)为智能体分配对应年龄。目前通过自定义分布结合加载的「各年龄组年度观测数表格」实现,同时添加了仿真年份与表格年份匹配的条件,用来体现人口老龄化带来的年度年龄分布差异。但遇到问题:AnyLogic仅在初始阶段检查年份条件,全程沿用首年的年龄分布;只有运行单一年份的仿真时,才能正确使用对应年份的分布。
解决方法
动态刷新自定义分布数据源
AnyLogic的自定义分布默认仅在模型初始化时读取一次数据源,要实现年度更新,需在每年仿真推进时重新筛选对应年份的数据并更新分布:- 添加一个
Time Event(时间事件),设置为每年触发一次 - 在事件动作中编写代码(假设表格名为
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
相关产品推荐
相关产品推荐

