模拟环行公路堵车问题

公路堵车概率模型 | Nagel-Schreckenberg 交通流模型。
路面上有N辆车,以不同的速度向前行驶,模拟堵车问题有以下假设:

  • 假设某辆车的当前车速是V;
  • 若前方可见范围内没车,则它在下一秒的车速提高到V+1,直到达到规定最高限速;
  • 若前方有车,前车距离为d,且d
  • 每辆车会以概率p随机减速v-1
# -*- encoding: utf-8
import math
import numpy as np
import matplotlib.pyplot as plt
path = 5000
n = 100
v0 = 5
p = 0.3
Times = 3000
np.random.seed(0)

x = np.random.rand(n) * path  # N辆车的起始位置
x.sort()
v = np.tile([v0], n).astype(np.float) # N辆车的初始车速

plt.figure(figsize=(10, 8),facecolor='white')

for t in range(Times):
    plt.scatter(x, [t]*n, s=1, c='k', alpha=0.1)
    for i in range(n):# 计算每辆车与前车的距离,并准备下一秒的车速
        if x[(i+1)%n] > x[i]:
            d = x[(i+1)%n] - x[i]
        else:
            d = path - x[i] + x[(i+1)%n]
        
        if v[i] < d: # 安全距离
            if np.random.rand() > p: 
                v[i] += 1 # 正常加速
            else:
                v[i] -= 1 # 随机减速
        else:
            v[i] = d-1 # 非安全距离,减速
            
    v = v.clip(0, 150) # 限速为0-150
    x += v # 更新位置
    x %= path # 环行公路位置修正
plt.xlim(0, path)
plt.ylim(0, Times)
plt.tight_layout(pad=2)
plt.show()
模拟环行公路堵车问题_第1张图片
模拟环行公路堵车.png

【参考资料】

  1. 邹博课件

你可能感兴趣的:(模拟环行公路堵车问题)