本系列共设为两部分,分别讨论:
1.从Excel导入数据到Anylogic,再将数据读写至Agent属性中。
2.将Java计算结果写入到Database中并将Database导出至Excel。
本文为第一部分,介绍如何从Excel将数据导入至Anylogic并进行数据的读写。
Anylogic版本:AnyLogic 8.7.0 Professional 关注私信分享资源
目录
一、创建新模型并配置数据库
(一)初始化模型
启动 AnyLogic 8.7.0 Professional,创建一个新的模型。在项目导航栏中,选择 “Database” 选项,这一步是后续数据操作的基础,它为模型搭建了数据存储与管理的框架。
(二)创建数据库表格
1.进入 “Properties” 设置界面,选择创建或导入表格(Create or import a table...),选择导入数据库表格(Import database table(s))。
2.浏览并选择表格,选择表格后更新表格中Table,可以选择修改导入后的table名称,勾选“在模型运行时自动更新表格”选项。
3.成功导入后,在 “projects - Database” 目录下即可看到新导入的表格,此时表格已成功集成到模型数据库中,为后续的数据处理提供了数据基础。
(三)更新数据库表格
在外部Excel文件发生添加列等结构变化时,需要重新导入Database,具体步骤如下:
右键点击需要更新的数据库表格,选择导入数据库表格(import database tables...),选择需要更新的表格路径以及具体表格,最后选中替换表格(Replace tables),完成表格更新。
二、连接 Excel 文件与模型
(一)添加 Excel 文件连接
在 “Palette” 页面中,点击 “Connectivity”,找到 “Excel File” 组件并拖动到 “Main” 操作界面,将其命名为 “data_excel”。这一操作建立了模型与 Excel 文件之间的连接桥梁,使得数据能够在两者之间进行交互。
(二)配置 Excel 文件属性
点击data_excel,在Properties中选择文件,此时之前设置好的数据应显示在相关设置区域。确保文件路径正确无误,并且可以根据需求选择在模型启动时加载文件,以保证数据的及时可用性。
三、创建 Agent 及设置属性
(一)创建 Agent 群体
从 “Palette” 中拖动 “Agent” 到 “Main” 中,选择创建群体 Agent。这一操作基于实际建模需求,将现实世界中的实体抽象为 Agent,通过创建群体 Agent,可以模拟多个相似实体在系统中的行为和交互。
(二)定义 Agent 属性
双击进入创建的 Agent(如 MyAgent)内部,从 “Palette” 中拖动 “Parameter” 到操作面板,并根据实际需求重命名为相应属性,如 “id”“cost”“name” 等。在定义属性时,务必点击对应 Parameter 并修改数据类型,使其与 Excel 中数据类型精确匹配。数据类型的一致性是确保后续数据处理准确性的关键,若类型不匹配,在运行过程中会触发错误,导致模型无法正常运行。
(三)编写设置 Agent 属性的函数
回到 “Main” 中,添加一个设置属性的函数,命名为 “setAgentsParameter”,并将初始数量设置为空。该函数的核心作用是从 Excel 文件中读取数据,并将其赋值给对应的 Agent 属性。
再Function body中编写function内容。在函数编写过程中,通过循环遍历 Excel 文件的每一行数据,利用 “data_excel” 提供的方法获取单元格数据。例如:
int row=2; //从第二行开始读取,跳过列名
while(data_excel.cellExists("cost",row,1)){
int id= (int)data_excel.getCellNumericValue("cost", row, 1);
double cost= data_excel.getCellNumericValue("cost", row, 2);
String name= data_excel.getCellStringValue("cost", row, 3);
double x= data_excel.getCellNumericValue("location", row, 2);
double y= data_excel.getCellNumericValue("location", row, 3);
MyAgent myAgent=add_myAgents();
myAgent.id=id;
myAgent.name=name;
myAgent.cost=cost;
myAgent.x=x;
myAgent.y=y;
row++;
traceln(row);
}
这段代码通过 “cellExists” 方法判断单元格是否存在,利用 “getCellNumericValue” 和 “getCellStringValue” 方法获取数值型和字符串型数据,然后创建新的 Agent 实例,并将读取到的数据赋值给 Agent 的相应属性,实现了从 Excel 数据到 Agent 属性的精准映射。
(四)设置事件自动运行函数
拉取 “event” 到 “Main” 中,命名为 “startFunction”。在 “Properties” 中,保持基础参数不变,编写 “Action” 为运行 “setAgentsParameter” 函数。这样设置后,该事件在模型开始运行后将自动触发,确保 Agent 属性能够在模型启动时及时完成初始化设置。
四、运行模型与查看结果
完成上述所有设置后,运行 “Main” 模型。在模型运行过程中,右下角的 “panel” 提供了丰富的信息展示功能。选择 “myAgents”,可以查看每个 Agent 的属性设置情况,如 “id”“name”“cost” 等属性的值是否正确赋值。通过观察这些数据,可以验证 Excel 表格读取与 Agent 属性设置的准确性,确保模型数据的可靠性。
查看不同myAgent的属性设置情况,与excel表格进行对比,发现设置无误。至此,我们成功实现了在 AnyLogic 中读取 Excel 表格数据并准确设置 Agent 属性的功能。
myAgents[0] myAgents[1]
excel table:cost excel table:location
总结
这一过程不仅展示了 AnyLogic 在数据处理方面的强大能力,也为后续进一步的数据处理和分析奠定了坚实基础,如基于这些数据进行复杂的仿真分析、优化决策等。希望本文能够帮助读者在使用 AnyLogic 进行建模与仿真项目时,更加熟练地处理数据相关任务,提升项目开发效率和质量。
本系列的第二部分将介绍如何将Java计算结果写入到Database中并将Database导出至Excel。