AnyLogic如何实现每个仿真日从Excel文件读取并更新参数值
AnyLogic 逐行读取Excel按仿真日更新supply参数操作方法(个人学习版适用)
以下操作全使用学习版自带基础功能,不需要专业版授权:
- 导入Excel数据源
直接把存好10天supply数据的Excel文件拖入AnyLogic工程面板,弹出配置窗口时选择连接到本地原文件即可,不需要做额外格式转换。导入完成后可以在工程资源树里看到这个Excel文件,建议把默认名excelFile改成supplyData方便后续识别。
注意保证Excel里supply列没有合并单元格、没有加密,所有取值为数字格式,第一行为列名supply,10天有效数据从第2行开始依次排列。 - 新增行号索引变量
在你存放supply参数的Main顶层代理里,新建一个int类型变量,命名为currentDayRow,初始值设为2——对应Excel里第1天数据所在的行号(第1行是表头)。 - 仿真启动时初始化参数
找到Main属性面板里的「启动时执行」代码块,写入初始化代码,仿真启动时自动加载第1天的supply值:
这里// 读取第1天supply参数 supply = supplyData.getCellNumericValue("supply", currentDayRow);getCellNumericValue第一个参数直接传列名字符串"supply",不用手动记列号,后续调整Excel列顺序也不会读错。 - 配置每日自动更新逻辑
新建一个循环事件作为日步进触发点:触发模式选「超时」,首次触发时间设为1 day,重复触发间隔设为1 day,在事件的动作代码块写入逐行读取逻辑:
如果你已经自行编写了仿真日步进逻辑,不用新建事件,直接把上面这段更新代码嵌到你每次推进1天仿真时间的执行节点即可,保证执行时机和日切换完全对齐。// 行号偏移到下一天对应的数据行 currentDayRow++; // 边界判断,避免读超出10天范围的空行报错 if (currentDayRow > 11) { // 10天数据最后一行为表头行+10=11行 traceln("10天supply数据已全部读取完成,后续将固定使用最后一天取值"); supply = supplyData.getCellNumericValue("supply", 11); } else { // 更新当日supply参数 supply = supplyData.getCellNumericValue("supply", currentDayRow); } - 校验方法
调试阶段可以在更新supply的代码后加一行日志打印代码traceln("仿真第"+(currentDayRow-1)+"天,supply取值为:"+supply);,运行模型后看控制台输出的数值和Excel里的逐行取值是否一致,确认匹配正确后删掉日志代码就行。
内容的提问来源于stack exchange,提问作者maryam kouram
相关产品推荐
相关产品推荐

