可以从用户代码调用 Repast 代理 table 吗?
Can the Repast agent table be called from user code?
在 Repast Simphony 中,可以从运行时环境中查看模拟(每个时钟周期)中所有代理的 table。有没有一种简单的方法可以保存 table 或运行时环境中的数据?或者我是否需要编写代码来复制 tables 显示的输出?
在代理 table 工具栏中有一个磁盘图标,可以将 table 保存到 Excel 文件。也可以使用以下示例代码以编程方式生成 table 并将其保存到文件中:
public void log(){
double tick = RunEnvironment.getInstance().getCurrentSchedule().getTickCount();
Context context = RunState.getInstance().getMasterContext();
Map<String,TableModel> models = new HashMap<String,TableModel>();
// Create a tab panel for each agent layer
for (Object agentType : context.getAgentTypes()){
Class agentClass = (Class)agentType;
JPanel agentPanel = AgentTableFactory.createAgentTablePanel(context.getAgentLayer(agentClass), agentClass.getSimpleName());
if (agentPanel instanceof TablePanel){
TableModel model = ((TablePanel)agentPanel).getTable().getModel();
models.put(agentClass.getSimpleName(), model);
}
}
SpreadsheetUtils.saveTablesAsExcel(models, new File("out-"+tick+".xlsx"));
}
注意,如果频繁调用,效率会非常低,所以我不建议使用它来记录每个报价。
在 Repast Simphony 中,可以从运行时环境中查看模拟(每个时钟周期)中所有代理的 table。有没有一种简单的方法可以保存 table 或运行时环境中的数据?或者我是否需要编写代码来复制 tables 显示的输出?
在代理 table 工具栏中有一个磁盘图标,可以将 table 保存到 Excel 文件。也可以使用以下示例代码以编程方式生成 table 并将其保存到文件中:
public void log(){
double tick = RunEnvironment.getInstance().getCurrentSchedule().getTickCount();
Context context = RunState.getInstance().getMasterContext();
Map<String,TableModel> models = new HashMap<String,TableModel>();
// Create a tab panel for each agent layer
for (Object agentType : context.getAgentTypes()){
Class agentClass = (Class)agentType;
JPanel agentPanel = AgentTableFactory.createAgentTablePanel(context.getAgentLayer(agentClass), agentClass.getSimpleName());
if (agentPanel instanceof TablePanel){
TableModel model = ((TablePanel)agentPanel).getTable().getModel();
models.put(agentClass.getSimpleName(), model);
}
}
SpreadsheetUtils.saveTablesAsExcel(models, new File("out-"+tick+".xlsx"));
}
注意,如果频繁调用,效率会非常低,所以我不建议使用它来记录每个报价。