跳转到内容

Disim 高速公路模拟器/简介

来自 Wikibooks,开放世界的开放书籍

启动 Disim

[编辑 | 编辑源代码]

要启动 Disim,请打开终端并键入

disim

根据您的安装情况,您可能需要导航到 Disim 文件夹并使用以下命令启动它

./disim
Disim 模拟器的屏幕截图

如果您使用图形支持编译了 Disim,则应该会出现一个类似于右侧的窗口。如果您不需要图形支持,您可以跳过此部分并转到 命令行选项

图形界面

[编辑 | 编辑源代码]

图形界面允许您使用鼠标在地图中导航

  • 左键:更改摄像头的方向,
  • 右键:水平平移摄像头,
  • 中键(或同时按住左右键):放大和缩小地图,
  • 滚轮:放大和缩小地图,
  • SHIFT + 任何按钮:执行相同的操作但速度更快。

它允许您使用 CTRL 点击地图上的任何元素以获取有关该元素的信息

  • CTRL + 左键:选择并显示有关所点击元素的信息(目前尚不支持此功能)。

窗口顶部有几个菜单

  • 文件
    • 打开:打开一个文件选择窗口,您可以在其中选择要加载到模拟器中的地图。模拟将在新地图上的时间零点重新开始。其他选项保持不变。
    • 重新加载:重新打开当前地图并重新开始模拟。
    • 退出:退出模拟器。
  • 操作
    • 暂停:停止时间。时间步长持续时间减少到零,但汽车继续运行。此选项在调试汽车行为时非常有用,正如我们将在本文档的教程部分中看到的那样。
    • 快速:通过将时间步长持续时间设置为固定值(默认情况下为 64 毫秒)来尽可能快地运行模拟。
    • 无显示:与快速相同,但停止 3D 显示。
    • 更慢:您可能希望以更低的速度运行,而不是实时运行。此选项减慢时间。
    • 更快:与更慢相同,但加速时间。
    • 获取信息:此菜单目前不支持。
  • 视图
    • 跟随汽车:固定摄像头以跟随在道路网络上行驶的车辆。
    • 上一辆车:跟随上一辆车。
    • 下一辆车:跟随下一辆车。
    • 显示网格:在地图上显示十米网格。该网格的每个单元格都是一个 10 米乘 10 米的正方形。
    • 显示真实世界:显示一个漂亮的地形。
    • 显示天空盒:显示背景图像。
    • 绘制阴影:显示车辆的阴影。
  • 天气
    Disim 中的雨和雾效果
    • 下雨:将天气更改为下雨。它实际上会降低每辆车的加速度和视野能力。
    • 雾:将天气更改为有雾。它实际上会降低每辆车的视野能力。
  • 控制器
    • 加载脚本:允许您选择一个 LUA 脚本来控制每辆车的行为。
    • 重新加载:重新加载 LUA 脚本。这在您需要在运行时更改脚本时很有用,正如我们将在本文档的教程部分中看到的那样。
    • 卸载:卸载脚本并返回到一个虚拟的 C/C++ 控制器。

命令行选项

[编辑 | 编辑源代码]

Disim 提供了许多命令行选项。可以通过图形界面激活的所有选项都有一个命令行对应项。在终端中键入disim --help将显示所有可用选项

./disim --help
Disim 1.0a

Simulates a complete highway traffic.

Usage: Disim [OPTIONS]...

  -h, --help               Print help and exit
  -V, --version            Print version and exit
      --log[=STRING]       Log file  (default=`logs/log.txt')
      --record             Whether to record data
  -v, --verbose-level=INT  Verbose level  (default=`4')
  -m, --map=STRING         Map file  (default=`./maps/default.map')
  -d, --duration=INT       Duration of the experiment in seconds  (default=`0')
      --fast               Whether to start the simulation in fast mode  
      --pause              Whether to start the simulation in pause mode  
      --nogui              Whether to display the GUI  (default=`1')
      --density=INT        Initial density of cars at startup in veh/km (default=`0')
      --truck=DOUBLE       Proportion of trucks at all times  (default=`0.1')
      --weather=STRING     The weather conditions. Either nice, rain, fog or rain+fog
      --time-step=DOUBLE   The largest time-step in seconds  (default=`0.064')
      --lua=STRING         The LUA script to be executed as the car controller
      --luacontrol=STRING  The LUA script to be executed as the infrastructure controller
      --ncpu=INT           The number of cores on your computer  (default=`0')
  • log:指定一个日志文件,模拟器可以在其中记录正在发生的事情。记录在该日志文件中的内容取决于所选的详细级别。
  • record:打开录制功能。所有道路传感器都将开始记录数据并将这些数据保存在logs文件夹中,其名称与其对应。我们将在教程部分更详细地介绍这一点。
  • verbose-level:指定模拟器的详细程度,数值越高,详细程度越高。
  • map:指定要加载到模拟器中的地图。
  • duration:以秒为单位指定模拟的持续时间。当持续时间达到指定的时间时,Disim 会自动退出。0 秒的持续时间表示模拟不应停止。
  • fast:在启动时打开无显示选项。
  • pause:在启动时将模拟置于暂停状态。
  • nogui:这可能是最重要的选项。它允许在没有图形界面情况下运行模拟,因此 Disim 不需要显示服务器来运行,并且可以在专用服务器上运行。
  • density:以每公里车辆数为单位指定高速公路上初始存在的车辆密度。
  • truck:指定高速公路上行驶的卡车比例。
  • weather:指定天气状况。它可以是“晴朗”、“下雨”、“有雾”或“雨加雾”。
  • time-step:以秒为单位指定最小时间步长。该值越高,模拟速度越快(在快速nogui模式下),但该值越低,模拟的真实性越高。默认情况下为 64 毫秒,但请注意 500 毫秒可以产生相当不错的结果。
  • lua:指定要运行的 LUA 脚本以控制车辆。有关详细信息,请参阅脚本编写部分或教程。
  • luacontrol:指定要运行的 LUA 脚本以控制基础设施。
  • ncpu:指定模拟车辆时要生成的额外线程数量。此数量应大致等于运行 Disim 的计算机上的 CPU 内核数量。此选项有效地将工作负载并行化到计算机上可用的不同处理器上,从而有可能使模拟速度更快。

以下是一个示例命令,该命令在 my_highway.map 文件中描述的道路网络上运行一小时的模拟器,并且没有图形界面,并且记录放置在高速公路上传感器的數據

./disim --nogui --record --map="./maps/my_highway.map" --duration=3600

下一个命令将启动 Disim,并使用 my_script.lua 中的脚本控制汽车行为,并将卡车比例设置为 50%

./disim --truck=0.5 --lua="./scripts/my_script.lua"

以下命令将使用ncputime-step选项在一小时模拟中显示 Disim 的实际运行时间。

time ./disim --lua="scripts/my_script.lua" --nogui --duration=3600 --time-step=0.064 --ncpu=0
real	9m49.858s

time ./disim --lua="scripts/my_script.lua" --nogui --duration=3600 --time-step=0.064 --ncpu=6
real	4m55.867s (Gain: 2x)

time ./disim --lua="scripts/my_script.lua" --nogui --duration=3600 --time-step=0.5 --ncpu=0
real	1m16.503s (Gain: 7.75x)

time ./disim --lua="scripts/my_script.lua" --nogui --duration=3600 --time-step=0.5 --ncpu=6
real	0m37.891s (Gain: 15.9x)

下一步是什么?

[编辑 | 编辑源代码]

下一部分中,我们将解释如何创建自己的高速公路网络。

华夏公益教科书