我的模型正在针对外部优化问题运行参数变化实验。我必须将每个实验复制的输出导出到 Excel。我使用的是在主代理中的
On destroy:
处触发的函数,然后对每个输出值使用以下代码:
ExcelResults.setCellValue(planned_leadtime_1, varExcelSheetName, ActRow, ActColumn++);
目前,每个复制大约有 90 个输出值。不幸的是,这种方法使运行时间非常慢。
为了解决这个问题,我将每次复制的结果存储在
After simulation run:
中参数变化实验中的ArrayList中。现在我想将这个ArrayList直接传输到Excel中After iteration:
并重置ArrayList。
是否可以将 ArrayList 直接传输到 Excel,而无需使用
setCellValue()
迭代列表中的每个值?或者是否有另一种计算有效的方法将参数变化实验的输出传输到 Excel?
为了解决这个问题,我在参数变化实验中将每个复制的值存储在 ArrayList
experimentsResults
中。每次迭代后,表示多次复制的迭代的 ArrayList 会传输到 CSV 文件。
为了将数据存储在 ArrayList 中,创建了一个 java 类来表示需要传输到列表的所有数据。然后在
After simulation run:
中触发的函数中使用下面的代码
ReplicationData row = new ReplicationData();
row.experimentDescription = experimentDescription;
row.varCurrentIteration = varCurrentIteration;
experimentResults.add(row);
要将 ArrayList 写入 CSV,我使用了在
After iteration:
中触发的函数
for(int j=0; j<experimentResults.size(); j++)
{
String resultstring="";
resultstring = experimentResults.get(j).experimentDescription+";"+
experimentResults.get(j).varCurrentIteration+";"+
csvResults.println(resultstring);
}
csvResults.close();
我没有意识到的主要事情是将连接托盘中的文本文件直接放入实验中。这大大提高了写入速度。实验结束后,CSV文件可以轻松转换为Excel。