可以从用户代码调用Repast代理表吗?

时间:2017-08-23 16:55:44

标签: java repast-simphony

在Repast Simphony中,可以从运行时环境中查看模拟中每个代理的所有代理的表。是否有一种从运行时环境中保存表或数据的简单方法?或者我是否需要编写代码来复制输出,如表所示?

1 个答案:

答案 0 :(得分:1)

在代理表工具栏中,有一个磁盘图标,用于将表保存到Excel文件中。也可以使用以下示例代码以编程方式生成表并将其保存到文件中:

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"));
}

但是请注意,如果频繁调用,这将是非常低效的,所以我不建议使用它来记录每个滴答。