SUMO跟车模型之IDM模型

IDM(智能交通模型Intelligent Driver Model)

       优点:IDM模型的参数数量少、意义明确,并且能用统一的模型描述从自由流到完全拥堵流的不同状态。

       缺点:缺乏随机项,也就是输入一定时,输出是确定的,这与现实中车辆行为的随机性有所差异。 例子:在交通流模拟中我们可以观察到相同参数的两辆车从路口停止线前同时起步后并行向前行驶,并在较长时间内保持同样的行驶状态,与实际车辆驾驶行为不符。

IDM模型(输入&输出)

       输入:前车速度、与前车的车距、自车车速

       输出:安全加速度

假设条件:

       1、自车加速度是关于自车速度的严格递减函数。并且如果没有其他车辆或者障碍物的阻挡,车辆倾向于加速至期望车速 v0 。

2、自车加速度是关于与前车或者障碍物的距离的递增函数。如果前车和障碍物在交互距离(视野范围)之外,则对自车不产生影响,可认为自车处于自由流状态。

3、自车加速度是关于前车车速的递增函数。结合第一点,意味着随着速度逐渐接近前车速度,自车加速度逐渐减小。同样的,前车在交互距离之外则忽略。

4、存在一个最小车距 s0 ,即使静止状态下也需要保持,如果在某个时刻两车之间小于这个最小车距,则可认为两车发生了碰撞,但是此时车辆是不可以倒车的。

5、平衡流状态下的车距不低于一个“安全距离”,即 s0+vT ,其中 s0 为最小车距,而 T 为安全车头时距。

6、智能控制车辆接近慢车or障碍物or红绿灯

       ●正常情况下,刹车的操作应该是轻柔的。例如在达到一个稳定的跟驰状态前或者到达停止线前,减速度应逐渐增大至一个舒适值,然后平滑的减小到0。

       ●在紧急情况下,减速超过舒适值,直至危险解除。危险解除后如果需要应该以舒适减速度 继续减速。

7、在不同的驾驶模式之间切换时应该是平顺的。例如从加速状态过渡 到 跟驰状态。即加速度关于时间的导数(加加速度,jerk J )是有限的。一般认为舒适加加速度的范围为 |J|≤1.5m/s3 。也就是说加速度不可以产生突变。

8、模型参数应该是可解释的,并且每个模型参数只能描述驾驶行为的一个方面(这有利于模型校准)。

 

 

  • 9
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SUMO-idm跟驰模型是一种基于间距-速度控制的车辆跟驰模型,其代码实现如下: ```python class IDMVehicle(AVLaneVehicle): """ A vehicle using the IDM acceleration model. This vehicle implements the IDM car-following model. Additionally, it may use the MOBIL lane-changing model to change lanes. Parameters ---------- * see parents * idm_params : dict, optional Dictionary with parameters for the IDM model. The default value is `{'a': 1.3, 'b': 2.0, 'v0': 30, 'T': 1.5, 's0': 2, 'delta': 4}`. For a description of the parameters, please refer to the `IDM model wikipedia page <https://en.wikipedia.org/wiki/Intelligent_driver_model>`_. Notes ----- The MOBIL model is only used if the `lane_change_controller` is set to a `MobilLaneChanger` instance. Examples -------- >>> from flow.controllers import IDMController, ContinuousRouter >>> from flow.core.params import VehicleParams, SumoParams >>> >>> sumo_params = SumoParams(sim_step=0.1, render=False) >>> vehicle_params = VehicleParams() >>> vehicle_params.add( ... "human", ... acceleration_controller=(IDMController, {}), ... routing_controller=(ContinuousRouter, {}), ... num_vehicles=20) >>> >>> # create a network and a scenario >>> from flow.networks import HighwayNetwork >>> from flow.scenarios import Scenario >>> from flow.core.params import NetParams >>> from flow.core.params import InitialConfig >>> from flow.scenarios import HighwayScenario >>> from flow.envs.ring.accel import IDMVehicle >>> >>> network = HighwayNetwork( ... name='highway', ... vehicles=vehicle_params, ... net_params=NetParams(), ... initial_config=InitialConfig( ... spacing="uniform", ... lanes_distribution=float("inf"), ... lanes_count=2 ... ) ... ) >>> scenario = HighwayScenario( ... name='highway', ... generator_class=HighwayGenerator, ... vehicles=vehicle_params, ... net_params=NetParams(), ... initial_config=InitialConfig( ... spacing="uniform", ... lanes_distribution=float("inf"), ... lanes_count=2 ... ) ... ) >>> >>> # create the environment >>> from flow.envs import HighwayPOEnv >>> env = HighwayPOEnv( ... env_params=EnvParams(), ... sim_params=sumo_params, ... scenario=scenario, ... simulator='traci' ... ) >>> >>> # run the simulation >>> obs = env.reset() >>> for i in range(100): ... action = [1, 0] ... obs, rewards, dones, info = env.step(action) ... if i % 10 == 0: ... env.render() >>> env.close() """ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.idm_params = kwargs.get( "idm_params", {'a': 1.3, 'b': 2.0, 'v0': 30, 'T': 1.5, 's0': 2, 'delta': 4}) def get_accel(self, env): """See parent class.""" leader = self.get_leader(env) if leader is None: return self.idm_params["a"] v = env.k.vehicle.get_speed(self.id) v_leader = env.k.vehicle.get_speed(leader) dv = max(0, v_leader - v) s = env.k.vehicle.get_headway(self.id) s_star = self.idm_params["s0"] + max( 0, v * self.idm_params["T"] + v * dv / (2 * np.sqrt(self.idm_params["a"] * self.idm_params["b"]))) return self.idm_params["a"] * ( 1 - np.power(v / self.idm_params["v0"], self.idm_params["delta"]) - np.power(s_star / s, 2)) ``` 其中,`get_accel`方法是计算车辆加速度的主要函数。在该函数中,根据跟驰模型的公式计算出车辆的期望车头间距`s_star`,然后根据该期望车头间距计算车辆的加速度。具体来说,该模型主要包含以下几个参数: - `a`:车辆加速度的最大值; - `b`:车辆减速度的最大值; - `v0`:车辆的期望速度; - `T`:期望的时间间隔,即车辆跟前车保持的时间间隔; - `s0`:车辆的最小车头间距; - `delta`:车辆速度对加速度的影响因子。 通过调整这些参数,可以对车辆的行为进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值