具有最佳速度函数的汽车跟随模型 - 超车发生

时间:2015-08-30 23:01:44

标签: python math simulation traffic

我正在创建一个关于汽车模拟的项目,而且我遇到了一个问题。当我运行我的代码时,汽车有时会相互超越。

我花了几天时间试图弄清楚为什么会这样,我仍然不知道。最佳速度函数应设置(de)加速度,以便不会发生超车,但由于某种原因,它仍然允许汽车有时相互过度吸收而不能足够快地减速。

你能帮助我,还是只是把我推向我应该看的方向?

这是我的最佳速度函数:

def optimal_velocity_function(dx, d_safe, v_max):
vx_opt = v_max * (np.tanh(dx - d_safe) + np.tanh(d_safe))
return vx_opt    

现在我在Euler的方法中使用它来解决ODE:

def euler_method(x, v, n_cars, h, tau, d_safe, v_max):
# Euler method used to solve ODE
# returns new position of car and its new velocity
dv = np.zeros(n_cars)

for j in range(n_cars - 1):
        dv[j] = tau ** (-1) * (optimal_velocity_function(x[j+1] - x[j],   d_safe, v_max) - v[j])

dv[n_cars - 1] = tau ** (-1) * (v_max - v[n_cars - 1])  # Speed of first car

v_new = v + h * dv
x_new = x + h * v_new

return [x_new, v_new]    

这是模型的其余部分,基本上只是生成起始值,然后使用上面的函数进行迭代。

def optimal_velocity_model(n, n_cars, d_0, v_0, h, tau, d_safe, v_max):
global x_limit, canvas, xx, vv

car_positions = np.linspace(0, n_cars, n_cars)
x = np.array(sorted(np.random.random(n_cars) + car_positions))  # Generation of cars with minimal distance
x = x * d_0
v = np.random.random(n_cars) + v_0  # Generating initial speeds around v_0
xx = np.zeros([n_cars, n])  # Matrix of locations
vv = np.zeros([n_cars, n])  # Matrix of velocities

for i in range(n):
    xx[:, i] = x
    vv[:, i] = v
    [x, v] = euler_method(x, v, n_cars, h, tau, d_safe, v_max)

x_limit = xx.max()  # Interval in which will cars be
return    

非常感谢。学家

1 个答案:

答案 0 :(得分:0)

我认为你在数学方面有点迷失,而不是专注于问题的物理学。通过使用delta X以上的tanhh以及安全距离,您可以产生一个柔和的SPEED过渡,可能无法保证超车被禁止。

我的思路如下:

  • 首先评估接近安全距离的两辆车的相对速度

  • 根据可以在距离内停止的车辆属性定义最小减速度

  • 使用tanhh或任何其他函数来建模之间的转换 积极的制动或反之亦然。

  • 通过整合加速来更新您的速度。

为了计算减速度,我可以想到一个简单的方法来保持使用tanh:

Deceleration=Max_Dec(relative_speed)*[1+tanh(d_safe-dx)]

希望这可以为您提供更多指导!