美文网首页MatSIM ABM模型模拟
003_MatSIM可用功能及其使用方法

003_MatSIM可用功能及其使用方法

作者: alphonseLin | 来源:发表于2021-05-17 13:17 被阅读0次

    在本章中,您将了解通过提供的功能,去扩展和定制MATSim的可能性。第45章描述了如何将自己的扩展连接到MATSim。


    image.png

    3.1 MATSim 模块化

    MATSim遵循一个模块化的概念,但是“模块”不是一个具体术语;

    因此,模块可以在软件框架中的许多层次上存在。同样在MATSim中,一系列不同的功能类型,(例如配置选项集、重新规划组件、贡献,甚至外部工具)有时被描述为模块。尝试去理解源自一般模块化体系结构的不同访问级别,变得尤其重要。

    3.1.1 访问级别

    MATSim目前提供五个访问级别,在下面的五个部分中进行了描述。

    3.1.1.1 通过GUI,调用配置文件、道路和人口,使用MATSim

    如果仅需使用核心,需要执行以下操作(参见第2.1节):

    • 通过以下链接下载MATSim版本:http://matsim
    • 获取网络文件和初始计划文件。小样本数据可以手工输入;大数据量应该通过某种计算方法自动生成。
    • 编写或编辑配置文件。
    • 单击MATSim jar文件
    • 按照说明进行操作

    我们认为MATSim核心已经相当强大;例如,通过算法合成的代理人已经遵循完整的每日计划,具有完整的每日评分功能;因此,可以观察模型内的活动开放时间、出发时间选择和时间表延迟。

    3.1.1.2 通过GUI和外部文件,使用MATSim

    通过提供附加文件并相应地设置配置开关,可以从GUI使用一些附加功能。最重要的是,这涉及到除汽车(第7章)和基于时间表的公共交通(第16章)以外的,其他交通工具的显式模拟。

    3.1.1.3 编写“Java脚本”

    如果使用MATSim 发行版还不够,那么当前推荐的方法是学习如何编写MATSim“Java脚本”。这意味着使用Java作为MATSim的脚本语言;有关讨论,请参阅第3.1.2节。语法大致如下:
    ···
    ...main(...){
    //construct the config object:
    Config config=ConfigUtils.xxx(...);
    config.xxx().setYyy(...);
    ...
    //load and adapt the scenario object:
    Scenario scenario=ScenarioUtils.loadScenario(config);
    scenario.getXxx().doYyy(...);//()
    ...
    //load and adapt the controler object:
    Controler controler=new Controler(scenario);
    controler.doZzz(...);//(
    )
    ...
    //run the iterations:
    controler.run();
    }
    ···
    有关工作示例,请参见https://github.com/matsim-org/matsim-example-project;这也将包含一个有效的pom.xml文件,它将通过Maven引入所有库依赖项,包括MATSim本身。 扩展点,特别是在(
    )和(**),在第45章中有更详细的描述。这部分需要Java和IDE经验。

    java中的MATSim脚本示例可以在 https://github.com/matsim-org/matsim 找到代码示例。

    注意,不同的分支,对应于不同的MATSim版本。

    部分代码片段:
    ···
    Config config;
    if(args==null || args.length==0||args[0]==null){
    config=ConfigUtils.loadConfig("scenarios/equil/config.xml");
    }else{
    config=ConfigUtils.loadConfig(args);
    }
    config.controler().setOverwriteFileSetting(
    OutputDirectoryHierarchy.OverwriteFileSetting.deleteDirectoryIfExists);
    ···
    3.1.14 使用Contribs或外部扩展

    有一些MATSim扩展不是主发行版的一部分。它们有两种风格:

    • 属于MATSim存储库contrib部分的扩展。
    • 基于MATSim存储库之外的扩展。

    MATSim扩展列在http://matsim.org/extensions

    外部扩展往往更独立于MATSim主分布。这可能是更独立的任务(如输入生成或输出分析/可视化)或更独立的API设计的结果。

    对于contrib和外部扩展,都需要阅读自己的文档以获取有关其用法的信息。此类文件可通过http://matsim.org/extensionshttp://matsim.org/javadoc.

    MATSim核心团队再次建议从https://github.com/matsim-org/matsim使用contrib或外部扩展的示例项目,因为这两种类型的扩展都可以通过将它们添加到pom.xml文件让Maven做依赖管理。
    显然,这再次意味着需要有一些Java和IDE经验。

    例如:otfVIS 大致如下
    ···
    ...main(...){
    Config config=ConfigUtils.xxx(...);
    Scenario scenario=ScenarioUtils.loadScenario(config);
    Controler controler=newControler(scenario);
    controler.addOverridingModule(newOTFVisLiveModule());
    //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    controler.run();
    }
    ···
    上述代码可以打开otfvis,一个直接连接到每个mobsim运行的交互式可视化工具。

    3.1.1.5 编写自己的扩展

    如果现有的扩展不足以满足您的需求,那么下一个选择就是编写您自己的扩展。同样,我们建议从https://github.com/matsim-org/matsim示例项目。此外,还应使用第45章中描述的扩展点,因为这是扩展成为贡献的唯一方式。

    3.1.2 如此运转背后的理念

    正如上面所描述的,这种设置源于思路:不断增长的单个MATSim扩展最终可能使得MATSim团队及其核心开发人员团队难以专心于特定功能。因此,寻求一种方式,使他们能够专注于中央基础设施,而具体的功能,如道路定价、多模式模拟、信号、额外的选择维度或分析模块,可以是由社区撰写和贡献。显然,插件体系结构是较为合理的解决方案,但要使扩展插件具有足够的能力和健壮性需要时间和精力。

    同时,MATSim是一个研究平台;研究调查创新性问题,这通常意味着在设计代码时很可能预见不到这些问题。通常,直接编写脚本语言是此类问题的解决方案;例如,QGIS,VISUM(Verkehr in Städten–UMlegung)、EMME(equireme Multimodal Multimodal equirement)或SUMO(Simulation of Urban Mobility)(通过TraCI接口)允许使用Python制作插件。MATSim团队曾经讨论过Scala语言(SCAlable LAnguage),但最终决定只使用Java本身作为脚本语言,这样做的好处是开发和MATSim应用程序之间的用户不需要学习两种语言。
    此外,TU(Technische Universität)Berlin团队可以继续教授Java作为MATSim的入门和一般专业技能。

    3.2 现有MATSim功能概述

    图3.1显示了通用MATSim模块与MATSim循环的位置关系。一些模块有一个连接点(显示在循环周围,连接到相应的循环元素),而其他模块有多个连接点(显示在圆的中间),还有一些模块在全局范围内工作(显示在左上角和下角)。


    MATSim functionality

    模块使用的技术细节,特别是参数集,在http://matsim.org网站,尤其是http://matsim.org/javadoc以及http://matsim.org/extensions

    由于开源性、项目导向和论文导向的MATSim贡献过程(见第44章),模块通常是为特定的实际目的而实现的,这导致了各自模块的局限性。例如,模块可能只适用于特定模式,或者适用于已定义的调用顺序。通常,需要额外的工作来概括模块。因此,将特定模块与其他功能结合起来通常不是一项直接的任务。这意味着用户在有效地应用任何特定的模块组合之前,都必须对其进行系统的测试。
    该图表内所示的分类,会在第4章和以下各章节中进行描述。
    表格3.1 Matsim功能概述


    功能概述

    相关文章

      网友评论

        本文标题:003_MatSIM可用功能及其使用方法

        本文链接:https://www.haomeiwen.com/subject/cdsrjltx.html