中观仿真

中观仿真(Mesoscopic Simulation)是交通仿真软件中的一种重要仿真方法,它介于宏观仿真和微观仿真之间。中观仿真的主要特点是它在宏观层面的交通流模型和微观层面的车辆行为模型之间提供了一个平衡点,既能够处理大规模的交通网络,又能够保留一定程度的车辆行为细节。Aimsun 提供了强大的中观仿真功能,可以帮助用户在更大范围内进行交通分析和研究。

中观仿真的基本概念

中观仿真将交通流视为一系列的“交通单元”(例如车队或交通波),而不是单独的车辆。这些交通单元在仿真过程中根据交通流理论和一定的行为规则进行移动。中观仿真主要关注交通流的宏观特性,如流量、速度和密度,同时保留了一些微观的行为特征,如跟车模型和换道模型。这种仿真方法在处理大规模网络时具有较高的效率,同时能够提供较为准确的交通流预测。

中观仿真与微观仿真的区别

中观仿真与微观仿真的主要区别在于:

  • 微观仿真:每个车辆都是独立的个体,具有详细的驾驶行为模型。微观仿真能够详细模拟每个车辆的加速、减速、换道等行为,适用于小范围的高精度仿真。

  • 中观仿真:将车辆分为交通单元,每个单元代表一定数量的车辆。中观仿真通过交通流理论来模拟交通单元的行为,适用于大规模网络的仿真。

中观仿真的应用场景

中观仿真在以下场景中特别有用:

  • 大规模交通网络分析:对于城市级或区域级的交通网络,中观仿真能够高效地处理大规模数据,提供宏观层面的交通流预测。

  • 交通规划和设计:中观仿真可以帮助规划师和设计师评估不同交通方案的效果,如新的道路布局、信号配时等。

  • 交通管理策略评估:中观仿真可以用于评估交通管理策略的效果,如拥堵收费、公交优先等。

中观仿真的设置和配置

在 Aimsun 中设置中观仿真需要以下几个步骤:

  1. 选择仿真类型:在仿真设置中选择中观仿真。

  2. 配置网络:确保交通网络已经正确配置,包括道路、节点、路段等。

  3. 设置交通流模型:选择合适的交通流模型,如 Cell Transmission Model (CTM) 或者 Kinematic Wave Model (KWM)。

  4. 定义交通单元:设置交通单元的大小和行为规则。

  5. 配置仿真参数:调整仿真时间步长、仿真时长等参数。

代码示例:设置中观仿真

以下是一个 Python 脚本示例,展示如何在 Aimsun 中设置中观仿真:


# 导入 Aimsun 的 Python API

import aimsun_api as api



# 获取当前项目

project = api.get_project()



# 创建仿真配置对象

sim_config = project.create_simulation_configuration()



# 设置仿真类型为中观仿真

sim_config.set_simulation_type(api.SimulationType.MESOSCOPIC)



# 配置交通网络

network = project.get_network()

# 假设我们已经有一个交通网络,这里选择一个示例网络

example_network = network.find_network("ExampleNetwork")

sim_config.set_network(example_network)



# 设置交通流模型为 Cell Transmission Model

ctm_model = project.create_traffic_flow_model(api.TrafficFlowModelType.CTM)

sim_config.set_traffic_flow_model(ctm_model)



# 定义交通单元大小

sim_config.set_traffic_unit_size(10)  # 单位:米



# 配置仿真参数

sim_config.set_time_step(10)  # 单位:秒

sim_config.set_simulation_duration(3600)  # 单位:秒



# 保存仿真配置

project.save_simulation_configuration(sim_config, "MesoscopicSimulationConfig")

中观仿真的交通流模型

Aimsun 提供了几种常见的中观交通流模型,包括:

  • Cell Transmission Model (CTM):基于交通流的细胞传输理论,将道路划分为多个细胞,每个细胞内的交通流通过特定的规则进行传输。

  • Kinematic Wave Model (KWM):基于交通流的波动理论,将交通流视为波动传播的过程。

Cell Transmission Model (CTM)

CTM 是一种常用的中观交通流模型,它将道路划分为多个细胞,每个细胞内的交通流通过特定的规则进行传输。CTM 的主要优点是计算效率高,适用于大规模网络的仿真。

Kinematic Wave Model (KWM)

KWM 基于交通流的波动理论,将交通流视为波动传播的过程。KWM 的主要优点是能够较为准确地模拟交通拥堵的形成和消散过程。

代码示例:配置 CTM 模型

以下是一个 Python 脚本示例,展示如何在 Aimsun 中配置 CTM 模型:


# 导入 Aimsun 的 Python API

import aimsun_api as api



# 获取当前项目

project = api.get_project()



# 创建交通流模型对象

ctm_model = project.create_traffic_flow_model(api.TrafficFlowModelType.CTM)



# 配置 CTM 模型参数

ctm_model.set_cell_length(100)  # 单位:米

ctm_model.set_max_speed(130)  # 单位:公里/小时

ctm_model.set_jam_density(150)  # 单位:辆/公里

ctm_model.set_free_flow_speed(120)  # 单位:公里/小时

ctm_model.set_wave_speed(15)  # 单位:米/秒



# 保存 CTM 模型

project.save_traffic_flow_model(ctm_model, "CTMModel")

中观仿真的交通单元行为

在中观仿真中,交通单元的行为规则是仿真准确性的重要因素。Aimsun 提供了多种行为规则,包括:

  • 跟车模型:定义交通单元在跟随前车时的行为。

  • 换道模型:定义交通单元在换道时的行为。

  • 交通信号模型:定义交通单元在遇到交通信号时的行为。

跟车模型

跟车模型定义了交通单元在跟随前车时的行为。常见的跟车模型有:

  • 线性跟车模型:交通单元的速度根据前车的速度线性调整。

  • 非线性跟车模型:交通单元的速度根据前车的速度和距离进行非线性调整。

换道模型

换道模型定义了交通单元在换道时的行为。常见的换道模型有:

  • 基于速度的换道模型:交通单元根据速度差进行换道。

  • 基于位置的换道模型:交通单元根据位置差进行换道。

交通信号模型

交通信号模型定义了交通单元在遇到交通信号时的行为。常见的交通信号模型有:

  • 固定配时信号:信号按照固定的配时方案进行控制。

  • 自适应信号:信号根据交通流量动态调整配时方案。

代码示例:配置跟车模型

以下是一个 Python 脚本示例,展示如何在 Aimsun 中配置线性跟车模型:


# 导入 Aimsun 的 Python API

import aimsun_api as api



# 获取当前项目

project = api.get_project()



# 创建跟车模型对象

linear_following_model = project.create_following_model(api.FollowingModelType.LINEAR)



# 配置跟车模型参数

linear_following_model.set_min_speed(10)  # 单位:公里/小时

linear_following_model.set_max_speed(120)  # 单位:公里/小时

linear_following_model.set_speed_factor(0.8)  # 前车速度的影响因子



# 保存跟车模型

project.save_following_model(linear_following_model, "LinearFollowingModel")

中观仿真的数据输入和输出

中观仿真的数据输入和输出是仿真过程中的重要环节。输入数据主要包括交通网络、交通需求、交通信号配时等,输出数据则包括交通流量、速度、密度等。

数据输入
  • 交通网络:定义道路、节点、路段等。

  • 交通需求:定义交通流的来源和目的地。

  • 交通信号配时:定义交通信号的控制方案。

数据输出
  • 交通流量:单位时间内通过某一点的车辆数。

  • 速度:交通单元的平均速度。

  • 密度:单位长度道路上的车辆数。

代码示例:输入交通需求

以下是一个 Python 脚本示例,展示如何在 Aimsun 中输入交通需求:


# 导入 Aimsun 的 Python API

import aimsun_api as api



# 获取当前项目

project = api.get_project()



# 创建交通需求对象

traffic_demand = project.create_traffic_demand()



# 定义交通需求数据

traffic_demand.add_origin_destination_pair("Origin1", "Destination1", 1000)  # 单位:辆/小时

traffic_demand.add_origin_destination_pair("Origin2", "Destination2", 800)  # 单位:辆/小时

traffic_demand.add_origin_destination_pair("Origin3", "Destination3", 500)  # 单位:辆/小时



# 保存交通需求数据

project.save_traffic_demand(traffic_demand, "TrafficDemandData")

中观仿真的运行和结果分析

中观仿真的运行步骤包括:

  1. 加载仿真配置:加载之前保存的仿真配置。

  2. 运行仿真:启动仿真并运行。

  3. 结果分析:分析仿真结果,提取交通流量、速度、密度等数据。

代码示例:运行中观仿真

以下是一个 Python 脚本示例,展示如何在 Aimsun 中运行中观仿真:


# 导入 Aimsun 的 Python API

import aimsun_api as api



# 获取当前项目

project = api.get_project()



# 加载仿真配置

sim_config = project.load_simulation_configuration("MesoscopicSimulationConfig")



# 加载交通需求数据

traffic_demand = project.load_traffic_demand("TrafficDemandData")



# 设置仿真配置中的交通需求

sim_config.set_traffic_demand(traffic_demand)



# 运行仿真

project.run_simulation(sim_config)



# 获取仿真结果

simulation_results = project.get_simulation_results(sim_config)



# 分析仿真结果

for link in simulation_results.get_links():

    print(f"Link: {link.get_id()}")

    print(f"  Traffic Flow: {link.get_traffic_flow()} vehicles/hour")

    print(f"  Average Speed: {link.get_average_speed()} km/h")

    print(f"  Density: {link.get_density()} vehicles/km")

中观仿真的高级应用

中观仿真在高级应用中可以进一步扩展,例如:

  • 动态交通管理:根据实时交通数据动态调整交通信号配时。

  • 交通事件仿真:模拟突发事件对交通流的影响,如交通事故、道路施工等。

  • 多模式交通仿真:模拟多种交通模式(如汽车、公交、自行车等)的交互。

动态交通管理

动态交通管理可以根据实时交通数据动态调整交通信号配时,提高交通效率。这需要结合实时数据采集和仿真模型的动态调整。

代码示例:动态调整交通信号配时

以下是一个 Python 脚本示例,展示如何在 Aimsun 中动态调整交通信号配时:


# 导入 Aimsun 的 Python API

import aimsun_api as api



# 获取当前项目

project = api.get_project()



# 加载仿真配置

sim_config = project.load_simulation_configuration("MesoscopicSimulationConfig")



# 获取交通信号对象

traffic_signal = project.get_traffic_signal("Signal1")



# 定义动态调整函数

def adjust_signal_timing(traffic_flow):

    if traffic_flow > 500:

        traffic_signal.set_green_duration(60)  # 单位:秒

    else:

        traffic_signal.set_green_duration(30)  # 单位:秒



# 在仿真过程中动态调整信号配时

for time_step in range(sim_config.get_simulation_duration()):

    current_traffic_flow = project.get_current_traffic_flow("Link1")

    adjust_signal_timing(current_traffic_flow)

    project.run_simulation_step(sim_config, time_step)



# 获取仿真结果

simulation_results = project.get_simulation_results(sim_config)



# 分析仿真结果

for link in simulation_results.get_links():

    print(f"Link: {link.get_id()}")

    print(f"  Traffic Flow: {link.get_traffic_flow()} vehicles/hour")

    print(f"  Average Speed: {link.get_average_speed()} km/h")

    print(f"  Density: {link.get_density()} vehicles/km")

交通事件仿真

交通事件仿真可以模拟突发事件对交通流的影响,如交通事故、道路施工等。这需要在仿真模型中定义事件的发生和影响范围。

代码示例:模拟交通事故

以下是一个 Python 脚本示例,展示如何在 Aimsun 中模拟交通事故:


# 导入 Aimsun 的 Python API

import aimsun_api as api



# 获取当前项目

project = api.get_project()



# 加载仿真配置

sim_config = project.load_simulation_configuration("MesoscopicSimulationConfig")



# 定义交通事故事件

def simulate_accident(time_step, link_id, duration):

    link = project.get_link(link_id)

    link.set_speed_limit(30)  # 降低速度限制

    link.set_capacity(0.5)  # 降低通行能力

    for t in range(time_step, time_step + duration):

        project.run_simulation_step(sim_config, t)

    link.set_speed_limit(120)  # 恢复速度限制

    link.set_capacity(1.0)  # 恢复通行能力



# 在仿真过程中模拟交通事故

for time_step in range(sim_config.get_simulation_duration()):

    if time_step == 1800:  # 事故发生在第 30 分钟

        simulate_accident(time_step, "Link1", 600)  # 事故持续 10 分钟

    project.run_simulation_step(sim_config, time_step)



# 获取仿真结果

simulation_results = project.get_simulation_results(sim_config)



# 分析仿真结果

for link in simulation_results.get_links():

    print(f"Link: {link.get_id()}")

    print(f"  Traffic Flow: {link.get_traffic_flow()} vehicles/hour")

    print(f"  Average Speed: {link.get_average_speed()} km/h")

    print(f"  Density: {link.get_density()} vehicles/km")

多模式交通仿真

多模式交通仿真可以模拟多种交通模式(如汽车、公交、自行车等)的交互。这需要在仿真模型中定义不同交通模式的行为规则和交互方式。

代码示例:设置多模式交通仿真

以下是一个 Python 脚本示例,展示如何在 Aimsun 中设置多模式交通仿真:


# 导入 Aimsun 的 Python API

import aimsun_api as api



# 获取当前项目

project = api.get_project()



# 创建仿真配置对象

sim_config = project.create_simulation_configuration()



# 设置仿真类型为中观仿真

sim_config.set_simulation_type(api.SimulationType.MESOSCOPIC)



# 配置交通网络

network = project.get_network()

# 假设我们已经有一个交通网络,这里选择一个示例网络

example_network = network.find_network("ExampleNetwork")

sim_config.set_network(example_network)



# 设置交通流模型为 Kinematic Wave Model

kwm_model = project.create_traffic_flow_model(api.TrafficFlowModelType.KWM)

sim_config.set_traffic_flow_model(kwm_model)



# 定义不同交通模式的行为规则

car_following_model = project.create_following_model(api.FollowingModelType.LINEAR)

car_following_model.set_min_speed(10)

car_following_model.set_max_speed(120)

car_following_model.set_speed_factor(0.8)

project.save_following_model(car_following_model, "CarFollowingModel")



bus_following_model = project.create_following_model(api.FollowingModelType.NON_LINEAR)

bus_following_model.set_min_speed(10)

bus_following_model.set_max_speed(80)

bus_following_model.set_speed_factor(0.6)

project.save_following_model(bus_following_model, "BusFollowingModel")



# 将行为规则应用到不同的交通模式

sim_config.set_following_model("Car", car_following_model)

sim_config.set_following_model("Bus", bus_following_model)



# 设置交通需求

traffic_demand = project.create_traffic_demand()

traffic_demand.add_origin_destination_pair("Origin1", "Destination1", 1000, "Car")

traffic_demand.add_origin_destination_pair("Origin2", "Destination2", 500, "Bus")

project.save_traffic_demand(traffic_demand, "MultiModeTrafficDemand")



# 运行仿真

sim_config.set_traffic_demand(traffic_demand)

project.run_simulation(sim_config)



# 获取仿真结果

simulation_results = project.get_simulation_results(sim_config)



# 分析仿真结果

for link in simulation_results.get_links():

    print(f"Link: {link.get_id()}")

    print(f"  Car Traffic Flow: {link.get_traffic_flow('Car')} vehicles/hour")

    print(f"  Car Average Speed: {link.get_average_speed('Car')} km/h")

    print(f"  Car Density: {link.get_density('Car')} vehicles/km")

    print(f"  Bus Traffic Flow: {link.get_traffic_flow('Bus')} vehicles/hour")

    print(f"  Bus Average Speed: {link.get_average_speed('Bus')} km/h")

    print(f"  Bus Density: {link.get_density('Bus')} vehicles/km")

中观仿真的优化和校准

中观仿真的优化和校准是提高仿真精度的重要步骤。优化主要涉及仿真参数的调整,校准则需要将仿真结果与实际数据进行对比,调整模型参数以提高仿真精度。

优化步骤
  1. 选择优化指标:优化指标通常包括交通流量、速度、密度等。这些指标可以帮助评估仿真模型的性能和准确性。

  2. 调整模型参数:根据优化指标调整交通流模型和行为规则的参数。常见的参数包括交通单元的大小、交通流模型的参数(如细胞长度、最大速度、拥堵密度等)以及行为规则的参数(如跟车模型的速度因子、换道模型的位置差等)。

  3. 运行仿真:运行仿真并评估优化效果。通过对比优化前后的仿真结果,可以判断参数调整是否有效。

  4. 迭代调整:根据评估结果进行迭代调整,直至达到满意的效果。这个过程可能需要多次试验和调整,以找到最佳的参数组合。

校准步骤
  1. 收集实际数据:实际数据是校准的基础,通常包括交通流量、速度、密度等。这些数据可以通过各种传感器、摄像头等设备采集。

  2. 运行基准仿真:运行未校准的仿真,获取初始结果。这一步的目的是为后续的对比提供一个基准。

  3. 对比仿真结果和实际数据:分析仿真结果与实际数据的差异。通过对比,可以发现仿真模型中存在的问题和不足。

  4. 调整模型参数:根据对比结果调整模型参数,以减少仿真结果与实际数据的差异。常见的调整方法包括手动调整和自动优化算法。

代码示例:中观仿真的优化和校准

以下是一个 Python 脚本示例,展示如何在 Aimsun 中进行中观仿真的优化和校准:


# 导入 Aimsun 的 Python API

import aimsun_api as api



# 获取当前项目

project = api.get_project()



# 创建仿真配置对象

sim_config = project.create_simulation_configuration()



# 设置仿真类型为中观仿真

sim_config.set_simulation_type(api.SimulationType.MESOSCOPIC)



# 配置交通网络

network = project.get_network()

# 假设我们已经有一个交通网络,这里选择一个示例网络

example_network = network.find_network("ExampleNetwork")

sim_config.set_network(example_network)



# 设置交通流模型为 Cell Transmission Model

ctm_model = project.create_traffic_flow_model(api.TrafficFlowModelType.CTM)

sim_config.set_traffic_flow_model(ctm_model)



# 定义交通单元大小

sim_config.set_traffic_unit_size(10)  # 单位:米



# 配置仿真参数

sim_config.set_time_step(10)  # 单位:秒

sim_config.set_simulation_duration(3600)  # 单位:秒



# 设置交通需求

traffic_demand = project.create_traffic_demand()

traffic_demand.add_origin_destination_pair("Origin1", "Destination1", 1000)  # 单位:辆/小时

traffic_demand.add_origin_destination_pair("Origin2", "Destination2", 800)  # 单位:辆/小时

traffic_demand.add_origin_destination_pair("Origin3", "Destination3", 500)  # 单位:辆/小时

sim_config.set_traffic_demand(traffic_demand)



# 运行初始仿真

project.run_simulation(sim_config)



# 获取初始仿真结果

initial_results = project.get_simulation_results(sim_config)



# 收集实际数据

actual_data = {

    "Link1": {"traffic_flow": 1100, "average_speed": 60, "density": 120},

    "Link2": {"traffic_flow": 850, "average_speed": 55, "density": 130},

    "Link3": {"traffic_flow": 550, "average_speed": 45, "density": 140}

}



# 定义优化函数

def optimize_simulation(sim_config, actual_data):

    # 调整交通流模型参数

    ctm_model = sim_config.get_traffic_flow_model()

    ctm_model.set_cell_length(120)  # 调整细胞长度

    ctm_model.set_max_speed(125)  # 调整最大速度

    ctm_model.set_jam_density(140)  # 调整拥堵密度

    ctm_model.set_free_flow_speed(110)  # 调整自由流速度

    ctm_model.set_wave_speed(18)  # 调整波动速度



    # 调整交通单元大小

    sim_config.set_traffic_unit_size(15)  # 单位:米



    # 重新运行仿真

    project.run_simulation(sim_config)



    # 获取优化后的仿真结果

    optimized_results = project.get_simulation_results(sim_config)



    # 对比仿真结果和实际数据

    for link_id, link in optimized_results.get_links().items():

        print(f"Link: {link_id}")

        print(f"  Initial Traffic Flow: {initial_results.get_links()[link_id].get_traffic_flow()} vehicles/hour")

        print(f"  Optimized Traffic Flow: {link.get_traffic_flow()} vehicles/hour")

        print(f"  Initial Average Speed: {initial_results.get_links()[link_id].get_average_speed()} km/h")

        print(f"  Optimized Average Speed: {link.get_average_speed()} km/h")

        print(f"  Initial Density: {initial_results.get_links()[link_id].get_density()} vehicles/km")

        print(f"  Optimized Density: {link.get_density()} vehicles/km")



        # 计算误差

        flow_error = abs(link.get_traffic_flow() - actual_data[link_id]["traffic_flow"]) / actual_data[link_id]["traffic_flow"]

        speed_error = abs(link.get_average_speed() - actual_data[link_id]["average_speed"]) / actual_data[link_id]["average_speed"]

        density_error = abs(link.get_density() - actual_data[link_id]["density"]) / actual_data[link_id]["density"]



        print(f"  Flow Error: {flow_error * 100:.2f}%")

        print(f"  Speed Error: {speed_error * 100:.2f}%")

        print(f"  Density Error: {density_error * 100:.2f}%")



# 进行优化

optimize_simulation(sim_config, actual_data)



# 保存优化后的仿真配置

project.save_simulation_configuration(sim_config, "OptimizedMesoscopicSimulationConfig")

中观仿真的优势和局限性

优势
  1. 计算效率高:中观仿真通过将车辆分为交通单元,减少了计算量,适用于大规模网络的仿真。

  2. 兼顾宏观和微观特性:中观仿真既能够提供宏观层面的交通流预测,又能够保留一定程度的车辆行为细节。

  3. 适用范围广:中观仿真可以应用于交通规划、设计、管理和事件仿真等多个领域。

局限性
  1. 细节有限:中观仿真虽然保留了一些微观行为特征,但仍然无法像微观仿真那样详细模拟每个车辆的行为。

  2. 模型复杂度:中观仿真模型的复杂度介于宏观和微观之间,配置和优化可能需要更多的时间和专业知识。

  3. 实时应用有限:由于中观仿真需要一定的计算时间,可能不适用于实时交通管理应用。

结论

中观仿真在交通仿真中具有重要的地位,它通过在宏观和微观之间的平衡,提供了高效且准确的交通流预测。Aimsun 提供了强大的中观仿真功能,可以帮助用户在大规模交通网络中进行详细的交通分析和研究。通过优化和校准,可以进一步提高仿真的精度,使其更好地服务于实际交通管理需求。在这里插入图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐